Зауважте, що цей синтаксис успадкований від оболонки Борна.
Після імені змінної, ви можете мати або inявно вказаний список елементів, або do, щоб перейти через позиційні параметри.
for i in 1 2 3
do
echo "$i"
done
Або
set 1 2 3
for i do
echo "$i"
done
Наявність doв обох випадках (навіть якщо це не є строго необхідним у першому) означає більш послідовний синтаксис. Він також відповідає while/ untilпетлям, де doце необхідно.
while
cmd1
cmd2
do
cmd3
cmd4
done
Вам потрібно doсказати, де закінчується список команд умови .
Зауважте, що оболонка Борна не підтримувала for i; do. Цей синтаксис також не був POSIX до випуску стандарту 2016 року ( for i doзавжди був POSIX; див . Відповідну помилку групи Austin ).
zsh має кілька скорочених форм, таких як:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Або підтримка декількох змінних:
for i j (1 a 2 b) echo $i $j
(хоча замість вищесказаного ви не можете використовувати inабо doяк ім’я змінної j).
Навіть якщо це документально рідко задокументовано, більшість оболонок Борна (Bourne, ksh, bash, zsh, не ashні yash) також підтримують:
for i in 1 2 3; { echo "$i";}
Оболонка Bourne kshта zsh(але не bash) також підтримують:
for i { echo "$i"; }
Хоча bash, kshі zsh(але не Bourne оболонки) підтримка:
for i; { echo "$i"; }
Всі (Bourne, bash, ksh, zsh) підтримка:
for i
{ echo "$i";}
ksh93, bash, zshПідтримка:
for ((i=1;i<=3;i++)) { echo "$i"; }