如何在命令替换失败时使zsh失败整行?

时间:2014-02-17 18:45:21

标签: zsh command-substitution

如果我这样做:

$(blah) bleh

我得到了

zsh: command not found: blah
zsh: command not found: bleh

这让我有点担心,因为这意味着zsh正在执行bleh,这绝不是一个命令;如果碰巧是可执行的并做了我不想要的事情呢?

有没有办法让整行在blah失败的那一刻失败?

2 个答案:

答案 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