从 zsh 中的子 shell 回显结果

从 zsh 中的子 shell 回显结果

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

a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)

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

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

有人可以帮我清除吗?

答案1

在 zsh 中,未加引号的变量不会自动拆分和全局, 尽管不带引号的命令替换将被拆分使用 中的值转换为单词IFS

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

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

相关内容