GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist es notwendig, eine Rücktaste einzufügen, wenn IFS so eingestellt wird, dass es bei Zeilenumbrüchen aufgeteilt wird?

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.


Linux
  1. Wann sind doppelte Anführungszeichen erforderlich?

  2. Warum ist Printf besser als Echo?

  3. Warum hat Ifs in `while Ifs=Read..` keine Auswirkung?

  4. Warum funktioniert die automatische Vervollständigung nicht, wenn ein Befehlsname nach „Quelle“ eingegeben wird?

  5. Alle Zeilenumbrüche werden entfernt, wenn die cat-Ausgabe in einer Variablen gespeichert wird

Echo-Befehl in Linux (mit Beispielen)

16 Beispiele für Echo-Befehle unter Linux

Echo-Befehl in Linux mit Beispielen

Warum ist das Setzen einer Variablen vor einem Befehl in Bash legal?

Schriftart im Echo-Befehl ändern?

Echo-Befehl unter Linux:7 praktische Beispiele