Почему «для любого текста; сделать цикл четыре раза?

9

Это ошибка или особенность?
Кажется, это происходит для буквенно-цифровых символов без кавычек .

Запуск GNU Bash, версия 4.1.5

for alpha01234; do echo $((++i)); done

вывод:

1
2
3
4
Peter.O
источник

Ответы:

14

Это особенность forсоставной команды, как описано help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Выполните команды для каждого члена в списке.

forЦикл выполняет последовательность команд для каждого элемента в списке элементов. Если in WORDS ...;нет, то in "$@"предполагается. Для каждого элемента в WORDS, NAMEустанавливается этот элемент, и COMMANDSвыполняются.

Таким образом, код, который вы цитировали, вероятно, выполняется в скрипте, который вызывается с 4 параметрами.

manatwork
источник
Спасибо ... То, что бросило меня полностью, было то, что это произошло в командной строке ... Я на самом деле не пробовал это в сценарии ... Я, должно быть, использовал set a b c dв последнее время. Я часто использую setэтот способ в скрипте для тестирования .. После перезапуска терминала он остановился ... (имеет смысл сейчас) ..
Peter.O
12

for x; do …это ярлык для for x in "$@"; do …: он перебирает позиционные параметры. Если он повторяется четыре раза, это означает, что у вас есть четыре позиционных параметра ( $1сквозной $4).

Жиль "ТАК - перестань быть злым"
источник