Observe que essa sintaxe é herdada do shell Bourne.
Após o nome da variável, você pode ter in
a lista de elementos fornecida explicitamente ou do
fazer um loop sobre 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 os do
dois casos (mesmo que não seja estritamente necessário no primeiro) cria uma sintaxe mais consistente. Também é consistente com os loops while
/ until
onde do
é necessário.
while
cmd1
cmd2
do
cmd3
cmd4
done
Você precisa do
dizer onde termina a lista de comandos de condição .
Observe que o shell Bourne não suportava for i; do
. Essa sintaxe também não foi POSIX até a edição de 2016 do padrão ( for i do
sempre foi POSIX; veja o bug do grupo Austin relacionado ).
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 j
acima).
Mesmo raramente documentado, a maioria dos shells tipo Bourne (Bourne, ksh, bash, zsh, not ash
nem yash
) também suporta:
for i in 1 2 3; { echo "$i";}
O shell Bourne ksh
e zsh
(mas não bash
) também suportam:
for i { echo "$i"; }
Enquanto bash
, ksh
e zsh
(mas não o shell Bourne), suporte:
for i; { echo "$i"; }
Todos (Bourne, bash
, ksh
, zsh
) apoio:
for i
{ echo "$i";}
ksh93
, bash
, zsh
Apoio:
for ((i=1;i<=3;i++)) { echo "$i"; }