jeudi 30 juillet 2009

Internal Field Separator

En bash il y a une variable speciale, super importante, pour qui developpe des scripts shell : IFS
Comme son nom l'indique c'est le separateur de champs. Il vaut <space><tab><newline> par defaut.

Chacun de ses caractères sont considérés comme des séparateurs de champs.
On peut donc faire des choses comme :
shell> IFS=";"
shell> set -- "premier;deuxieme;troisieme;quatrieme"
shell> echo $3
troisieme

Je pourrai detaillé, si l'envie m'en prend, plus à fond les enormes possibilités que nous offre cette variable spéciale. Mais l'objet de mon post n'est pas là. En effet je suis aussi un peu un malade de la structuration de mon code et quand pour mes besoin j'avais besoin que le separateur de champs soit uniquement je devais faire :
shell> IFS="
"
shell> for i in $(cat foo.txt);do echo -- $i --; done

Or je detestais voir cette commande sur deux lignes, et l'utilisation de IFS="\n" ne fonctionnait pas. Alors comment faire ? Et bien jusqu'à récemment rien. Jusqu'à ce que je découvre cette nouvelle possibilité :
shell> IFS=$'\n'
shell> for i in $(cat foo.txt);do echo -- $i --; done

Notez bien l'utilisation des simples quotes !

Et me voila heu-reux ! E-R-E !!!

Aucun commentaire: