在zsh shell脚本上设置变量时,使用'和`会导致不同的结果-
>>>one=`echo test`
>>>$one
>>>
>>>two='echo test'
>>>$two
>>>zsh: command not found: echo test
两者的功能是什么?
答案 0 :(得分:1)
这并不像看起来那样简单。这是浅对正在发生的事情的解释。根据外壳程序(和版本),诸如IFS
之类的变量以及至少包括别名的其他可能性,以下任何或全部内容可能均不适用,但我认为在正常情况下这是一种合理的思考方式。由于我比Zsh更熟悉Bash,因此我包括了Bash引用,但是所有这些应该都适用于Zsh和其他类似POSIX的shell。
让我们逐行解构这些
one=`echo test`
:
`echo test`
是command substitution。 (在现代Shell中,此格式为discouraged,而$(echo test)
则为{。}。)按以下方式处理:
echo test
)中的字符串word split分为“ echo”和“ test”。execve
有关吗?
one
。 $one
:
test
确实是一个命令(很有可能也是zsh的内置命令),因此它运行良好并返回退出代码1,因为没有参数。有关详细说明,请参见help test
或man test
。 two='echo test'
:
two
。 $two
:
ln -s /bin/echo '/bin/echo test'
)zsh
会帮助您打印一条错误消息。