Warum gibt es am Ende des Zitierens einer Unterschale und der Übergabe der Ergebnisse an das Echo keine neue Zeile?

9

Wenn ich ls | grep pngdie Ausgabe von grep mache, ist:

2015-05-15-200203_1920x1080_scrot.png 
2015-05-16-025536_1920x1080_scrot.png

(Dateiname, Newline, Dateiname, Newline)

dann echo $(ls | grep png)Ausgaben:

2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png

(Dateiname, Leerzeichen von Wortaufteilung, Dateiname, Zeilenumbruch !! von Echo !!)

Das ist alles in Ordnung, aber wenn ich dies tue, um die Wortteilung zu verhindern : echo "$(ls | grep png)", lautet die Ausgabe:

2015-05-15-200203_1920x1080_scrot.png 
2015-05-16-025536_1920x1080_scrot.png

Und meine Frage ist, wo ist der zweite Zeilenumbruch (einer sollte von grep und einer von echo sein)?

MichalH
quelle

Antworten:

8

Das ist Newline von echo, Sie können überprüfen, indem Sie echo -nnachfolgende Newline unterdrücken:

echo -n "$(ls | grep png)"

Kommandosubstitution entfernen Sie alle Hinterzeilenumbrüche, letzter Newline durch hinzugefügt wurde echo, grephat hier nichts zu tun.

cuonglm
quelle
"Befehlsersetzung alle nachgestellten Zeilenumbrüche entfernen" - fertig! Vielen Dank
MichalH