Prenons un simple for loop
#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done
Le point-virgule AFAIK dans les scripts bash oblige Shell à exécuter la commande en cours de manière synchrone, puis passe à la suivante. Appuyer sur Entrée fait littéralement la même chose sauf qu'il ne vous permet pas d'entrer la commande suivante, vidant immédiatement le tampon.
Alors pourquoi Shell ne peut pas interpréter la ligne suivante
for i in `seq 1 10`; do; echo $i; done
comment cela for loop
fonctionne réellement?
La syntaxe d'une boucle for
à partir de la page de manuel bash
est
for name [ [ in [ Word ... ] ] ; ] do list ; done
Les points-virgules peuvent être remplacés par des retours chariot, comme indiqué ailleurs dans la page de manuel bash
: "Une séquence d'un ou plusieurs sauts de ligne peut apparaître dans une liste au lieu d'un point-virgule pour délimiter les commandes."
Cependant, l'inverse n'est pas vrai; vous ne pouvez pas remplacer arbitrairement les retours à la ligne par des points-virgules. Votre script multiligne peut être converti en une seule ligne tant que vous respectez les règles de syntaxe ci-dessus et n'insérez pas de point-virgule supplémentaire après le do
:
for i in `seq 1 10`; do echo $i; done
Le point-virgule après do
est une erreur et ne devrait pas y être.
Les éléments suivants fonctionnent correctement:
for i in `seq 1 10`; do echo $i; done