La expresion:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
funciona correctamente
No encuentro la descripción de esta sintaxis en la que se {...;}
está reemplazando ; do ...; done
en el manual.
¿Hay alguna referencia en el manual? ¿Para qué conchas funciona eso correctamente?
Respuestas:
{ ...; }
ya se aceptó en lugar dedo ...; done
enfor
bucles en la primera versión del shell Bourne en Unix V7 a finales de los 70 (ver el código fuente ) aunque nunca se documenta hasta donde sé.Todos
ksh
(tanto el original derivado del shell Bourne como la reescritura de ksh93),pdksh
¹ (y derivados)bash
(desde el comienzo en 1989) y lozsh
admiten. No sé de ningunaash
derivada que lo haga.yash
tampoco, peroyash
fue escrito con el estándar POSIX.En
zsh
, se agregó soporte con 2.0 en 1991, pero como parte de una nueva gama de formas cortas para la mayoría de las construcciones que va más allá de la sintaxis de Bourne. No es solofor i in 1 2; { ...; }
, esfor i in 1 2; any-command
(y sus variantes). Y está documentado allí y lo ha estado desde su introducción .AFAIK, al lado
zsh
, solo pdksh lo documenta (para ambosfor
yselect
).En cuanto al
((init; condition; action))
formulario, proviene deksh93
y fue copiado porzsh
ybash
.Ni eso
((...))
ni lo{ ...; }
en lugar dedo ...; done
son POSIX.Consulte también ¿Cuál es el propósito de la palabra clave "hacer" en Bash para bucles? para más
for
formas de bucle.¹ ni versiones anteriores, ni el shell Forsyth en el que se basa. Se agregó en 5.1.1 en 1994 y eso probablemente explica por qué se documentó allí
fuente