bash, boucles for

2012-08-07

En bash, on aurait tendance à penser que “for line in $(cat fichier)” renvoie les lignes mais c’est faux car les séparateurs par défaut sont les espaces, tabulations… On itère donc sur la liste des mots…

Pour palier à ce soucis, on peut jouer en modifiant la variable IFS et en la restaurant ensuite.

Cela donne : old_IFS=$IFS
IFS=$’\n’
for line in $(cat fichier)
do
echo “La ligne est : $line” done
IFS=$old_IFS
Une méthode plus subtile mais tout aussi jolie est d’utiliser read et while… Cela donne maintenant : cat fichier | while read line || [[ $line ]] do
echo “La ligne est : $line” done

C’est quand même moins tordu ;)

A noter, le [[ $line ]] permet de prendre en compte la dernière ligne s’il n’y a pas de retour chariot.