Observe que essa sintaxe é herdada do shell Bourne.
Após o nome da variável, você pode ter in
para ter a lista de elementos explicitamente fornecida, ou do
, para percorrer os parâmetros posicionais.
for i in 1 2 3
do
echo "$i"
done
Ou
set 1 2 3
for i do
echo "$i"
done
Ter o do
em ambos os casos (mesmo que não seja estritamente necessário no primeiro) torna a sintaxe mais consistente. Também é consistente com os% while
/ until
loops onde o do
é necessário.
while
cmd1
cmd2
do
cmd3
cmd4
done
Você precisa do do
para informar onde a lista de comandos condição termina.
Observe que o shell Bourne não oferece suporte a for i; do
. Essa sintaxe também não era POSIX até a edição 2016 do padrão ( for i do
sempre foi POSIX; veja o bug relacionado do grupo Austin ).
zsh
tem algumas formas abreviadas como:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Ou suporte para mais de uma variável:
for i j (1 a 2 b) echo $i $j
(embora você não possa usar in
ou do
como nome da variável no lugar de j
acima).
Mesmo que raramente documentados, a maioria dos shells semelhantes a Bourne (Bourne, ksh, bash, zsh, não ash
nem yash
) também suportam:
for i in 1 2 3; { echo "$i";}
O shell Bourne, ksh
e zsh
(mas não bash
) também suporta:
for i { echo "$i"; }
Embora o suporte bash
, ksh
e zsh
(mas não o shell Bourne) suporte:
for i; { echo "$i"; }
Suporte a todos (Bourne, bash
, ksh
, zsh
):
for i
{ echo "$i";}
ksh93
, bash
, zsh
support:
for ((i=1;i<=3;i++)) { echo "$i"; }