¿Por qué no hay una nueva línea al final de citar una subshell y pasar los resultados a echo?

9

Cuando hago ls | grep pngla salida de grep es:

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

(nombre de archivo, nueva línea, nombre de archivo, nueva línea)

entonces, echo $(ls | grep png)salidas:

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

(nombre de archivo, espacio de división de palabras, nombre de archivo, nueva línea !! del eco !!)

Todo está bien, pero cuando hago esto para evitar que la palabra se divida: echo "$(ls | grep png)"la salida es:

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

Y mi pregunta es, ¿dónde está la segunda línea nueva (una debería ser de grep y otra de echo)?

MichalH
fuente

Respuestas:

8

Esa es la nueva línea de echo, puede verificar usando echo -npara suprimir la nueva línea final:

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

La sustitución de comandos elimina todas las líneas nuevas finales, la última línea nueva fue agregada por echo, grepno tiene nada que hacer aquí.

Cuonglm
fuente
"La sustitución de comandos elimina todas las líneas nuevas" - ¡eso es todo! Gracias
MichalH