如果我做:
$(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
使用&&
to 分隔命令将在失败时终止:
$(blah) && bleh