Использование переменных в циклах for bash [дубликат]

Мне просто интересно, можно ли использовать переменные в циклах for ?? Я пробовал:

for number in { eval echo {0..$1}}
do 
    echo 5
done

Я хотел, чтобы он распечатал 5 раз, сколько раз я вводил в подсказку, однако он ведет себя странно, если я ввожу:

./test.sh 2

Он должен распечатать 5 два раза, но он распечатает 5 четыре раза. Может кто-то помочь мне с этим? А также почему он распечатывается 4 раза вместо 2 ??

Правка: По большей части

for number in $(seq "$2")

Работает, но если я попробую произвести с его помощью вычисления, мой код сломается:

time=1
total=5
for number in $(seq "$2")
do
    echo "$time + $total" | bc
done

Дает : seq: недопустимый аргумент с плавающей запятой: '' Попробуйте 'seq --help' для получения дополнительной информации. Кто-нибудь может сказать мне, как это исправить ??

0
задан 2 July 2021 в 05:11

1 ответ

Он распечатывает 5 четыре раза, потому что { eval echo {0..2}} приводит к четырем маркерам, разделенным пробелами {, 0, 1 и 2}

Если вы хотите использовать $1 в качестве конца выражения диапазона в bash, лучше использовать внешнюю команду seq:

for number in $(seq "$1")

или использовать цикл for в стиле C

for ((number=0; number<"$1"; number++))
2
ответ дан 28 July 2021 в 11:22

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

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