Tomemos un for loop
#!/bin/bash for i in `seq 1 10`; do echo $i done
El punto y coma AFAIK en los scripts bash hace que el shell ejecute el comando actual sincrónicamente y luego vaya al siguiente. Presionar enter hace literalmente lo mismo, excepto que no le permite ingresar el siguiente comando, limpiando el búfer inmediatamente.
Entonces, ¿por qué el shell «t no puede interpretar la siguiente línea
for i in `seq 1 10`; do; echo $i; done
¿cómo funciona esto for loop
¿funciona?
Respuesta
La sintaxis de un bucle for
del bash
la página de manual es
for name [ [ in [ word ... ] ] ; ] do list ; done
Los puntos y comas se pueden reemplazar con retornos de carro, como se indica en otra parte de bash
página de manual: «Puede aparecer una secuencia de una o más líneas nuevas en una lista en lugar de un punto y coma para delimitar los comandos».
Sin embargo, lo contrario no es cierto; no puede reemplazar arbitrariamente nuevas líneas con punto y coma. Su secuencia de comandos de varias líneas se puede convertir en una sola línea siempre que observe las reglas de sintaxis anteriores y no inserte un punto y coma adicional después de do
:
for i in `seq 1 10`; do echo $i; done
Comentarios
- La secuencia de comandos final es incorrecta, como señaló @ dr01, debe eliminar el punto y coma después de
do
. - @jake, esto también dice que debe eliminar el punto y coma después de
do
. Además, esta respuesta explica por qué debe quitar el punto y coma después de `do '. - ¿Y si
$i
necesita ser parte de un nombre de archivo? ¿Necesita comillas dobles? - ¿
filename_${i}
luego - @ user4556274 de acuerdo con la sintaxis " porque yo hago; done " también debería funcionar. ¿Por qué no ' no?
Responder
El punto y coma after do
es un error y no debería estar allí.
Lo siguiente funciona correctamente:
for i in `seq 1 10`; do echo $i; done