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

当命令替换失败时,如何使zsh整行失败?,zsh,command-substitution,Zsh,Command Substitution,如果我这样做: $(blah) bleh 我明白了 这让我有点担心,因为这意味着zsh正在执行bleh,这从来就不是一个命令;如果它碰巧是可执行的,并且做了我不想要的事情,该怎么办 有没有办法在布拉赫失败时使整条线路失败?使用&&分离命令将在失败时终止: $(blah)&&bleh尝试bleh的原因是,如果$(blah)不存在,则将$(blah)替换为空字符串。在这种情况下,bleh将是完全解析的命令行上的第一个单词,因此被解释为命令 因此,您必须捕获空字符串并阻止进一步执行。谢天谢地,ZSH

如果我这样做:

$(blah) bleh
我明白了

这让我有点担心,因为这意味着zsh正在执行
bleh
,这从来就不是一个命令;如果它碰巧是可执行的,并且做了我不想要的事情,该怎么办


有没有办法在
布拉赫
失败时使整条线路失败?

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


$(blah)&&bleh

尝试
bleh
的原因是,如果
$(blah)
不存在,则将
$(blah)
替换为空字符串。在这种情况下,
bleh
将是完全解析的命令行上的第一个单词,因此被解释为命令

因此,您必须捕获空字符串并阻止进一步执行。谢天谢地,ZSH有一个参数扩展,即
${name:?word}
,可以仅用于这种情况:

${$(blah):?No such thing} bleh
如果
blah
不存在,ZSH将打印
无此类内容
并返回提示(或退出shell,如果它是非交互式的):

否则它将只是替换的命令

% alias blah="echo echo '>>>'"
% ${$(blah):?No such thing} bleh
>>> bleh

实际上,我并不是要分离这些命令,而是要将其作为单个命令执行。例如
$(echo cat)/dev/null
zsh: : No such thing
% alias blah="echo echo '>>>'"
% ${$(blah):?No such thing} bleh
>>> bleh