Рейтинг:0

Использование переменных в циклах for bash

флаг bd

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

для числа в { eval echo {0..$1}}
делать 
    эхо 5
сделано

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

./test.sh 2

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

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

для числа в $(seq "$2")

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

время=1
всего=5
для числа в $(seq "$2")
делать
    эхо "$ время + $ всего" | До нашей эры
сделано

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

флаг cc
Используйте обратные символы (`) вместо внешнего { }, и ваш цикл должен работать, но начинайте с 1 вместо 0 для ожидаемых двух раз в цикле.
флаг hr
Если вы используете `seq "$2"`, вам нужно указать числовой второй позиционный параметр при вызове скрипта ex. `./test.sh foo 2`
Рейтинг:2
флаг hr

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

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

для числа в $(seq "$1")

или используйте C-стиль за петля

for ((число=0; число<"$1"; число++))
Yunfei Chen avatar
флаг bd
Это работает, но если я использую переменные внутри цикла for, он сразу прерывается
Yunfei Chen avatar
флаг bd
время=1 всего=5 для числа в $(seq "$2") делать эхо "$ время + $ всего" | До нашей эры сделано
флаг hr
@YunfeiChen не получается, как именно? Как вы вызываете скрипт? В частности, сколько позиционных параметров вы предоставляете (поскольку вы, по-видимому, изменили «$1» на «$2»)
Yunfei Chen avatar
флаг bd
Дает мне: (standard_in) 1: синтаксическая ошибка (standard_in) 1: недопустимый символ: : (standard_in) 1: синтаксическая ошибка (standard_in) 1: синтаксическая ошибка (standard_in) 1: синтаксическая ошибка (standard_in) 2: синтаксическая ошибка (standard_in) 2: недопустимый символ: : (standard_in) 2: синтаксическая ошибка (standard_in) 2: синтаксическая ошибка (standard_in) 2: синтаксическая ошибка
флаг hr
Комментарии @YunfeiChen - неподходящее место для дополнительных вопросов - в частности, форматирование не позволяет мне видеть, что вы на самом деле печатаете. Если "недопустимый символ" - `^M`, то это потому, что ваш скрипт имеет окончание строки Windows.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.