如果我做的:如何在命令替換失敗時使zsh在整行失敗?
$(blah) bleh
我得到
zsh: command not found: blah
zsh: command not found: bleh
這有我有點擔心,因爲這意味着的zsh正在執行bleh
這是從來沒有打算成爲一個命令;如果它恰好是可執行的並做了我不想要的事情呢?
當blah
失敗時,是否有辦法使整條線路失效?
如果我做的:如何在命令替換失敗時使zsh在整行失敗?
$(blah) bleh
我得到
zsh: command not found: blah
zsh: command not found: bleh
這有我有點擔心,因爲這意味着的zsh正在執行bleh
這是從來沒有打算成爲一個命令;如果它恰好是可執行的並做了我不想要的事情呢?
當blah
失敗時,是否有辦法使整條線路失效?
使用&&
分隔命令將終止失敗:
$(blah) && bleh
原因bleh
受審是,$(blah)
得到由一個空字符串替換如果blah
不存在。在這種情況下,bleh
將成爲完全解析的命令行中的第一個單詞,因此被用作命令解釋。
所以你必須捕捉空字符串,並阻止進一步執行。值得慶幸的是ZSH有一個參數擴展,即${name:?word}
可以只是這種情況下使用:
${$(blah):?No such thing} bleh
如果blah
不存在,ZSH將打印No such thing
並返回到提示(或退出shell,如果它是非-interactive):
zsh: : No such thing
否則它只會取代命令
% alias blah="echo echo '>>>'"
% ${$(blah):?No such thing} bleh
>>> bleh
實際上,我並不想命令分開,但execu這是一個單一的命令。比如'$(echo cat)/ dev/null'。 – Owen