Tenga en cuenta que esa sintaxis se hereda del shell Bourne.
Después del nombre de la variable, puede tener inque tener la lista de elementos dada explícitamente o dohacer un bucle sobre los parámetros posicionales.
for i in 1 2 3
do
echo "$i"
done
O
set 1 2 3
for i do
echo "$i"
done
Tenerlo doen ambos casos (incluso si no es estrictamente necesario en el primero) genera una sintaxis más consistente. También es consistente con los bucles while/ untildonde does necesario.
while
cmd1
cmd2
do
cmd3
cmd4
done
Necesita el dopara decir dónde termina la lista de comandos de condición .
Tenga en cuenta que el shell Bourne no era compatible for i; do. Esa sintaxis tampoco fue POSIX hasta la edición 2016 del estándar ( for i dosiempre ha sido POSIX; vea el error relacionado con el grupo de Austin ).
zsh tiene algunas 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
O soporte para más de una variable:
for i j (1 a 2 b) echo $i $j
(aunque no puede usar ino docomo nombre de variable en lugar de jarriba).
Incluso si rara vez se documenta, la mayoría de los shells tipo Bourne (Bourne, ksh, bash, zsh, not ashni yash) también admiten:
for i in 1 2 3; { echo "$i";}
El shell Bourne kshy zsh(pero no bash) también admiten:
for i { echo "$i"; }
Mientras bash, kshy zsh(pero no el shell Bourne) soporte:
for i; { echo "$i"; }
Todos (Bourne, bash, ksh, zsh) de soporte:
for i
{ echo "$i";}
ksh93, bash, zshSoporte:
for ((i=1;i<=3;i++)) { echo "$i"; }