Чому "для будь-якого тексту; робити петлю чотири рази?


9

Це помилка чи особливість?
Здається, це трапляється для буквених цифр, які не котируються .

Запуск GNU bash, версія 4.1.5

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

вихід:

1
2
3
4

Відповіді:


14

Це особливість forскладеної команди, як описано help for:

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

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

forЦикл виконує послідовність команд для кожного елемента в списку елементів. Якщо in WORDS ...;немає, то in "$@"передбачається. Для кожного елемента в WORDS, NAMEвстановлений цей елемент, і COMMANDSвиконується.

Тож кодируваний вами код, ймовірно, виконується в сценарії, який викликався з 4 параметрами.


Дякую ... Мене повністю закинуло те, що це сталося в командному рядку .. Я насправді не пробував це в сценарії .. Я, мабуть, set a b c dнещодавно використовував. Я часто використовую setцей спосіб у сценарії для тестування .. Після перезавантаження терміналу він зупинився ... (має сенс зараз) ..
Peter.O

12

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.