Linux : changer le séparateur dans une boucle for

Admettons que j’ai un fichier qui contienne :

Linux, y’a moins bien mais c’est plus chère.
rm -fr en root, system dans la choucroute.

Faisons une boucle for basique dessus :

[pastacode lang= »bash » manual= »for%20i%20in%20%60cat%20fichier.txt%60%0Ado%0A%20%20echo%20%24i%0Adone » message= » » highlight= » » provider= »manual »/]

Le résultat ne correspond pas à ce à quoi on pourrait s’attendre :

Linux,
y’a
moins
bien
mais
c’est
plus
chère.
rm
-fr
en
root,
system
dans
la
choucroute.

La raison est simple, la boucle for prends comme séparateur les retours à la ligne, mais aussi les espaces, les tabulations et tous les autres caractères du style. Heureusement, la variable d’environnement $IFS (comme Internal Field Separator) permets de fournir sa propre liste de séparateurs. Il suffit de faire :

[pastacode lang= »bash » manual= »IFS%3D%24’%5Cn’%0Afor%20i%20in%20%60cat%20fichier.txt%60%0Ado%0A%20%20echo%20%24i%0Adone » message= » » highlight= » » provider= »manual »/]

Le résultat correspond à ce qui est attendu :

Linux, y’a moins bien mais c’est plus chère.
rm -fr en root, system dans la choucroute.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.