Tenga en cuenta que esa sintaxis se hereda del shell Bourne.
Después del nombre de la variable, puede tener in
que tener la lista de elementos dada explícitamente o do
hacer 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 do
en 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
/ until
donde do
es necesario.
while
cmd1
cmd2
do
cmd3
cmd4
done
Necesita el do
para 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 do
siempre 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 in
o do
como nombre de variable en lugar de j
arriba).
Incluso si rara vez se documenta, la mayoría de los shells tipo Bourne (Bourne, ksh, bash, zsh, not ash
ni yash
) también admiten:
for i in 1 2 3; { echo "$i";}
El shell Bourne ksh
y zsh
(pero no bash
) también admiten:
for i { echo "$i"; }
Mientras bash
, ksh
y zsh
(pero no el shell Bourne) soporte:
for i; { echo "$i"; }
Todos (Bourne, bash
, ksh
, zsh
) de soporte:
for i
{ echo "$i";}
ksh93
, bash
, zsh
Soporte:
for ((i=1;i<=3;i++)) { echo "$i"; }