¿Cómo hacer un bucle for en la línea de comandos?

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 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *