shell – ¿Por qué no hay un ";" después de "hacer" en sh loops?

Pregunta:

¿Por qué no hay un ; carácter después de do en bucles de shell cuando se escribe en una sola línea?

Esto es lo que quiero decir. Cuando se escribe en varias líneas, un bucle for ve así:

$ for i in $(jot 2)
> do
>     echo $i
> done

Y en una sola línea:

$ for i in $(jot 2); do echo $i; done

Todas las líneas colapsadas obtienen un ; después de ellos, excepto por la línea do , y si incluye el ; , es un error. Alguien probablemente mucho más inteligente que yo decidió que esto era lo correcto por una razón, pero no puedo entender cuál es la razón. Me parece inconsistente.

Lo mismo con while los bucles también.

$ while something
> do
>     anotherthing
> done
$ while something; do anotherthing; done

Respuesta:

Esa es la sintaxis del comando. Ver comandos compuestos

for name [ [in [words …] ] ; ] do commands; done

Nota específicamente: do commands

La mayoría de las personas ponen los commands do y en una línea separada para facilitar la lectura, pero no es necesario, puede escribir:

for i in thing
do something
done

Sé que esta pregunta es específicamente sobre shell y la he vinculado al manual de bash. No está escrito de esa manera en el manual de shell, pero está escrito de esa manera en un artículo escrito por Stephen Bourne para la revista byte.

Stephen dice:

Una lista de comandos es una secuencia de uno o más comandos simples separados o terminados por una nueva línea o ; (punto y coma). Además, las palabras reservadas como do y done normalmente van precedidas de una nueva línea o ; … A su vez, cada vez que se ejecuta la lista de comandos siguiente.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım