Zauważ, że ta składnia jest dziedziczona z powłoki Bourne'a.
Po nazwie zmiennej możesz mieć albo injawnie podaną listę elementów, albo dozapętlić parametry pozycyjne.
for i in 1 2 3
do
echo "$i"
done
Lub
set 1 2 3
for i do
echo "$i"
done
Posiadanie dow obu przypadkach (nawet jeśli nie jest to absolutnie konieczne w pierwszym), zapewnia bardziej spójną składnię. Jest również zgodny z pętlami while/, w untilktórych dojest to konieczne.
while
cmd1
cmd2
do
cmd3
cmd4
done
Musisz dopowiedzieć, gdzie kończy się lista poleceń warunkowych .
Pamiętaj, że powłoka Bourne'a nie była obsługiwana for i; do. Ta składnia nie była również POSIX do czasu wydania standardu 2016 ( for i dozawsze był POSIX; patrz powiązany błąd grupy Austin ).
zsh ma kilka krótszych form, takich jak:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Lub wsparcie dla więcej niż jednej zmiennej:
for i j (1 a 2 b) echo $i $j
(chociaż nie można użyć inlub dojako nazwy zmiennej zamiast jpowyższego).
Nawet jeśli jest to rzadko udokumentowane, większość powłok podobnych do Bourne'a (Bourne, ksh, bash, zsh, not ashnor yash) również obsługuje:
for i in 1 2 3; { echo "$i";}
Powłoka Bourne'a ( kshi zshnie bash) obsługuje również:
for i { echo "$i"; }
Chociaż bash, kshi zsh(ale nie Bourne shell) support:
for i; { echo "$i"; }
Wszystkie (Bourne, bash, ksh, zsh) wsparcie:
for i
{ echo "$i";}
ksh93, bash, zshSupport:
for ((i=1;i<=3;i++)) { echo "$i"; }