为什么在引用子shell并将结果传递给echo的末尾没有新行?

Mic*_*alH 9 shell bash echo command-substitution

当我做ls | grep pnggrep 的输出是:

2015-05-15-200203_1920x1080_scrot.png 
2015-05-16-025536_1920x1080_scrot.png
Run Code Online (Sandbox Code Playgroud)

(文件名,换行符,文件名,换行符)

然后,echo $(ls | grep png)输出:

2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png
Run Code Online (Sandbox Code Playgroud)

(文件名,来自分词的空间,文件名,换行符!!来自回声!!)

没关系,但是当我这样做以防止分词时:echo "$(ls | grep png)",输出是:

2015-05-15-200203_1920x1080_scrot.png 
2015-05-16-025536_1920x1080_scrot.png
Run Code Online (Sandbox Code Playgroud)

我的问题是,第二个换行符在哪里(一个应该来自 grep,一个来自 echo)?

cuo*_*glm 8

那是来自 的换行符echo,您可以通过使用echo -n抑制尾随换行符来验证:

echo -n "$(ls | grep png)"
Run Code Online (Sandbox Code Playgroud)

命令替换删除所有尾随换行符,最后一个换行符由echogrep在此处无关。