Parce que, comme le dit le manuel bash concernant la substitution de commande :
Bash effectue l'expansion en exécutant la commande et en remplaçant la substitution de commande par la sortie standard de la commande, toutes les nouvelles lignes de fin étant supprimées.
Donc, en ajoutant \b
vous empêchez la suppression de \n
.
Une façon plus propre de le faire pourrait être d'utiliser $''
citant, comme ceci :
IFS=$'\n'
Je viens de me rappeler le moyen le plus simple. Testé avec bash sur debian wheezy.
IFS="
"
sans blague :)
C'est un hack à cause de l'utilisation de echo
et la substitution de commandes.
prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2
Le $()
supprime les retours à la ligne et \b
empêche \n
d'être une nouvelle ligne de fin tout en étant très peu susceptible d'apparaître dans un texte. IFS=$'\n'
est le meilleur moyen de configurer IFS pour qu'il se divise sur les retours à la ligne.