如果我执行:
$(blah) bleh
我明白了
zsh: command not found: blah
zsh: command not found: bleh
这让我有些担心,因为它意味着zsh正在执行bleh
,而这从未被设计成一个命令;如果它可以被执行并做了我不想要的事情怎么办?
有没有一种方式可以使整行在blah
失败时立即失败?
如果我执行:
$(blah) bleh
我明白了
zsh: command not found: blah
zsh: command not found: bleh
这让我有些担心,因为它意味着zsh正在执行bleh
,而这从未被设计成一个命令;如果它可以被执行并做了我不想要的事情怎么办?
有没有一种方式可以使整行在blah
失败时立即失败?
bleh
,是因为如果blah
不存在,$(blah)
将被替换为空字符串。在这种情况下,bleh
将成为完全解析的命令行上的第一个单词,因此被解释为命令。
因此,您必须捕获空字符串并防止进一步执行。幸运的是,ZSH有一个参数扩展功能,即 ${name:?word}
,可以用于处理这种情况:
${$(blah):?No such thing} bleh
blah
不存在,ZSH将打印No such thing
并返回提示符(或退出shell,如果它是非交互式的):zsh: : No such thing
% alias blah="echo echo '>>>'"
% ${$(blah):?No such thing} bleh
>>> bleh
&&
来分隔命令,如果失败则终止执行:
$(blah) && bleh
$(echo cat) /dev/null
这样的例子。 - Owen