如果我这样做:
$(blah) bleh
我得到了
zsh: command not found: blah
zsh: command not found: bleh
这让我有点担心,因为这意味着zsh正在执行bleh
,这绝不是一个命令;如果碰巧是可执行的并做了我不想要的事情呢?
有没有办法让整行在blah
失败的那一刻失败?
答案 0 :(得分:1)
尝试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
答案 1 :(得分:0)
使用&&
分隔命令将在失败时终止:
$(blah) && bleh