2

如果我做:

$(blah) bleh

我明白了

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

这让我有点担心,因为这意味着 zsh 正在执行bleh,而这从未打算成为命令;如果它恰好是可执行的并且做了我不想要的事情怎么办?

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

4

2 回答 2

2

尝试的原因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
于 2014-02-17T21:43:02.453 回答
0

使用&&to 分隔命令将在失败时终止:

$(blah) && bleh

于 2014-02-17T18:47:05.280 回答