当命令替换失败时,如何使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