Ich nehme die Ausgabe von ps aux
:
und wenn ich es echo, sieht es so aus
%Vor% und wenn ich echo
plus doppelt zitieren, sieht es so aus:
Warum setzt es diese Zeilen in neue Zeilen, wenn ich doppelte Anführungszeichen verwende, aber nicht in Anführungszeichen?
Der Effekt kommt von der Shell. Ohne Anführungszeichen ersetzt die Shell Zeilenumbrüche, Tabulatoren und Leerzeichen durch Leerzeichen. Sie können diese Ersetzung durch doppelte Anführungszeichen vermeiden. Weitere Informationen finden Sie im Abschnitt Word Splitting
auf der Manpage von bash(1)
:
Wortteilung
Die Shell scannt die Ergebnisse der Parametererweiterung, der Befehlsersetzung und der arithmetischen Erweiterung, die nicht innerhalb der Tabelle aufgetreten sind doppelte Anführungszeichen für die Worttrennung.
Die Shell behandelt jedes IFS-Zeichen als Trennzeichen und teilt das Ergebnisse der anderen Erweiterungen in Worte über diese Zeichen. Wenn IFS ist nicht gesetzt, oder sein Wert ist genau, der Standardwert, dann dient irgendeine Sequenz von IFS-Zeichen zum Abgrenzen von Wörtern. Wenn IFS hat einen anderen Wert als der Standard, dann Sequenzen des Whitespace Leerzeichen und Tabulatorzeichen werden am Anfang und am Ende des Befehls ignoriert Wort, solange das Leerzeichen Zeichen im Wert von IFS (an IFS Leerzeichen Zeichen). Jedes Zeichen in IFS, das nicht IFS ist, weiß Leerzeichen begrenzt zusammen mit allen angrenzenden IFS-Leerzeichen Leerzeichen Feld. Eine Folge von IFS-Leerzeichen wird ebenfalls als a behandelt Trennzeichen. Wenn der Wert von IFS null ist, tritt keine Worttrennung auf.
Sie können den Inhalt von IFS
mit echo "$IFS" | xxd
sehen. Es zeigt dir
bedeutet Platz (0x20), Tab (0x09) und Zeilenumbruch (0x0a). Die zweite 0x0a kommt vom echo-Befehl.
Sie können diese Ersetzung vermeiden, indem Sie IFS
auf die leere Zeichenfolge setzen:
Aber ich würde das nicht empfehlen.