Warum wirken sich doppelte Anführungszeichen auf das Drucken dieser Echo-Anweisungen in Linux aus?

8

Ich nehme die Ausgabe von ps aux :

auf %Vor%

und wenn ich es echo, sieht es so aus

%Vor%

und wenn ich echo plus doppelt zitieren, sieht es so aus:

%Vor%

Warum setzt es diese Zeilen in neue Zeilen, wenn ich doppelte Anführungszeichen verwende, aber nicht in Anführungszeichen?

    
Hunle 07.09.2017, 01:54
quelle

1 Antwort

3

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

%Vor%

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:

%Vor%

Aber ich würde das nicht empfehlen.

    
clemens 07.09.2017 05:46
quelle

Tags und Links