条件 && 命令 + 退出

SF.*_*SF. 3 bash shell-script

在编写一个简单的 shell 工具时,我发现了一个我不知道如何让它工作的部分。

  [ "$#" -ne 3 ] || echo "wrong number of arguments" && exit
Run Code Online (Sandbox Code Playgroud)

上述工作按预期工作,因为很难想象回声可能失败的情况。但是如果我用一个可能失败的命令替换 echo 并且仍然执行exit呢?

这是行不通的,因为exit退出了产生的外壳( )而不是主要的外壳:

  [ "$#" -ne 3 ] && ( command ; exit )
Run Code Online (Sandbox Code Playgroud)

这将始终退出:

  [ "$#" -ne 3 ] && command ; exit 
Run Code Online (Sandbox Code Playgroud)

我可以使用冗长的语法:

 if [ "$#" -ne 3 ] ; then 
      command 
      exit
 fi
Run Code Online (Sandbox Code Playgroud)

但是如果我不想参与if并保持语法简洁 - 我如何将命令的条件执行串起来,包括exit这样的?

cuo*_*glm 11

您可以在花括号中对命令进行分组:

[ "$#" -ne 3 ] || { command; exit; }
Run Code Online (Sandbox Code Playgroud)

{ list; } 导致 list 命令在当前 shell 上下文中运行,而不是在 subshel​​l 中。

阅读有关分组命令的更多信息bash