Il semble que la pratique normale placerait le réglage d'IFS en dehors de la boucle while afin de ne pas le répéter à chaque itération… Est-ce juste un style habituel « singe voir, singe faire », comme ce fut le cas pour ce singe jusqu'à ce que je lise l'homme a lu , ou ai-je raté un piège subtil (ou manifestement évident) ?
Réponse acceptée :
Le piège est que
IFS=; while read..
définit l'IFS
pour tout l'environnement shell en dehors de la boucle, alors que
while IFS= read
le redéfinit uniquement pour la read
appel (sauf dans le shell Bourne).
Vous pouvez vérifier que faire une boucle comme
while IFS= read xxx; ... done
puis après une telle boucle, echo "blabalbla $IFS ooooooo"
impressions
blabalbla ooooooo
alors qu'après
IFS=; read xxx; ... done
l'IFS
séjours redéfini :maintenant echo "blabalbla $IFS ooooooo"
impressions
blabalbla ooooooo
Donc si vous utilisez le second formulaire, il faut penser à réinitialiser :IFS=$' tn'
.
La deuxième partie de cette question a été fusionnée ici, j'ai donc supprimé la réponse connexe d'ici.