Denn wie das Bash-Handbuch bezüglich der Befehlsersetzung sagt:
Bash führt die Erweiterung aus, indem es den Befehl ausführt und die Befehlsersetzung durch die Standardausgabe des Befehls ersetzt, wobei alle nachgestellten Zeilenumbrüche gelöscht werden.
Also durch Hinzufügen von \b
Sie verhindern das Entfernen von \n
.
Ein saubererer Weg, dies zu tun, könnte darin bestehen, $''
zu verwenden Zitieren, etwa so:
IFS=$'\n'
Ich habe mich gerade an den einfachsten Weg erinnert. Getestet mit Bash auf Debian Wheezy.
IFS="
"
kein Scherz :)
Es ist ein Hack wegen der Verwendung von echo
und Befehlsersetzung.
prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2
Die $()
entfernt nachgestellte Zeilenumbrüche und \b
verhindert \n
davon ab, ein nachgestellter Zeilenumbruch zu sein, während es höchst unwahrscheinlich ist, dass es in irgendeinem Text erscheint. IFS=$'\n'
ist der bessere Weg, um IFS so einzustellen, dass es bei Zeilenumbrüchen aufgeteilt wird.