Bash - "for" vs "while read"
$ cat toto
ceci est une chaine entiere
celle ci aussi meme avec des espaces
Le champs séparateur pour le "for", c'est l'espace:
$ for i in `cat toto`; do echo YOP "$i"; done
YOP ceci
YOP est
YOP une
YOP chaine
YOP entiere
YOP celle
YOP ci
YOP aussi
YOP meme
YOP avec
YOP des
YOP espaces
Pour faire en sorte que le champs séparateur soit la ligne, on peut passer par "while read":
$ cat toto | while read i; do echo YOP "$i"; done
YOP ceci est une chaine entiere
YOP celle ci aussi meme avec des espaces
- Extraits du man:
for nom [ in mot ] ; do liste ; done
La liste de mots à la suite de in est développée, créant une liste d'éléments. La variable nom prend successivement la valeur de chacun des éléments, et liste est exécutée à chaque fois.....
while liste ; do liste ; done
La commande while répète la liste du do tant que la dernière commande de la liste du while renvoie un code de retour nul....
read [-er] [-a nom_a] [-p msg] [nom ...]
Une ligne est lue depuis l'entrée standard, puis le premier mot de cette ligne est affecté au premier nom, le second mot au second nom, et ainsi de suite. Les mots restants sont affectés au dernier nom....