Зауважте, що цей синтаксис успадкований від оболонки Борна.
Після імені змінної, ви можете мати або 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"; }