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

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

当我执行ls | grep pnggrep 的输出时:

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

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

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

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

(文件名、分词空格、文件名、换行符!!来自 echo!!)

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

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

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

答案1

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

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

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

相关内容