从 zsh 中的 subshel​​l 回显结果

car*_*arl 5 zsh echo subshell

在 zsh 中,以下 2 个命令的结果不同:

a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)
Run Code Online (Sandbox Code Playgroud)

第一个逐行打印内容,而第二个将整个内容打印在一行中。

我猜是因为子shell将结果逐行返回给主echo进程,但我无法确认。

有人可以帮我清除吗?

cuo*_*glm 5

在 zsh 中,未加引号的变量不会自动 split 和 glob,而未加引号的命令替换将使用 中的值拆分IFS为单词。

在您的情况下,第一个命令将文件的内容保存/etc/hosts到变量中aecho $a打印a变量的值而不进行拆分和全局变量,您将得到的内容/etc/hosts在变量赋值的右侧不执行拆分和全局变量)。

echo $(</etc/hosts)使用不带引号的命令替换,结果将被拆分为单词,因此您将获得/etc/hosts所有由空格分隔的单词的内容。