аргумент, не распознанный для цикла

Я новый довольно новый когда дело доходит до создания сценариев в Linux (я также действительно не знаю, на которых условиях использовать как удар/оболочка), но у меня есть следующая команда в сценарии, который я хочу выполнить с некоторыми аргументами

write_loop.sh

#!/bin/bash
echo $1
echo $2
for i in {1..$1}; do printf "file '%s'\n" $2 >> list.txt; done

Я пытаюсь выполнить его как это в терминале с 2 аргументами: сумма времен для цикличного выполнения (150) и имя файла для цикличного выполнения ("цикл mp4")

./write_loop.sh 150 loop.mp4

Аргументы передаются сценарию очень хорошо, но по некоторым причинам для цикла не работает. Когда я вручную изменяюсь $1 кому: 150 в write_loop.sh это работает, таким образом, я не уверен, что проблема (возможно, аргумент имеет другой тип?). Любой бит справки ценится.

1
задан 3 December 2018 в 02:32

1 ответ

Переменные не могут использоваться в расширении диапазона {INT..INT}, таким образом, нейтрализация к этому должна использовать seq как показывают в связанном сообщении. С другой стороны, используйте подобный C для цикла, так как Вы используете bash так или иначе:

#!/bin/bash           
echo $1
echo $2
echo {1..$1}
for((i=1;i<=$1;i++)); do 
   printf "'%s'\n" "$2"
done

Или POSIX-ly:

#!/bin/bash           
echo $1
echo $2
i=1
while [ $i -le $1  ]; do 
   printf "'%s'\n" "$2"
   i=$((i+1))
done

Обратите внимание, что я изменился printf часть для тестирования. Адаптируйте его к своим потребностям.

1
ответ дан 7 December 2019 в 15:10

Другие вопросы по тегам:

Похожие вопросы: