¿Es para ((...)) {...;} una sintaxis de shell válida? ¿En que conchas?

Respuestas:

30

{ ...; }ya se aceptó en lugar de do ...; doneen forbucles 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 lo zshadmiten. No sé de ninguna ashderivada que lo haga. yashtampoco, pero yashfue 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 solo for i in 1 2; { ...; }, es for 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 ambos fory select).

En cuanto al ((init; condition; action))formulario, proviene de ksh93y fue copiado por zshy bash.

Ni eso ((...))ni lo { ...; }en lugar de do ...; doneson POSIX.

Consulte también ¿Cuál es el propósito de la palabra clave "hacer" en Bash para bucles? para más forformas 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í

Stéphane Chazelas
fuente
1
Wow, el Sr. Bourne abrazó por completo el uso del preprocesador c en ese código fuente de los 70.
Trauma digital