在 zsh 中,以下 2 个命令的结果不同:
a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)
第一个逐行打印内容,而第二个将整个内容打印在一行中。
我猜这是因为子shell逐行返回结果到主echo
进程,但我无法确认这一点。
有人可以帮我清除吗?
答案1
在 zsh 中,未加引号的变量不会自动拆分和全局, 尽管不带引号的命令替换将被拆分使用 中的值转换为单词IFS
。
在您的情况下,第一个命令将文件的内容保存/etc/hosts
到变量a
,echo $a
打印a
变量的值而不进行分割和全局,您得到的内容/etc/hosts
(split 和 glob 不在变量赋值的 RHS 中执行)。
echo $(</etc/hosts)
使用不带引号的命令替换,结果将被拆分为单词,因此您将获得/etc/hosts
所有由空格分隔的单词的内容。