条件 && 命令 + 退出

条件 && 命令 + 退出

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

  [ "$#" -ne 3 ] || echo "wrong number of arguments" && exit

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

这是行不通的,因为exit退出的是生成的 shell ( ),而不是主要的 shell:

  [ "$#" -ne 3 ] && ( command ; exit )

这将始终退出:

  [ "$#" -ne 3 ] && command ; exit 

我可以使用详细语法:

 if [ "$#" -ne 3 ] ; then 
      command 
      exit
 fi

但如果我不想参与if并保持语法简洁 - 我怎样才能字符串命令的条件执行,包括exit这样的命令?

答案1

您可以将命令分组在花括号中:

[ "$#" -ne 3 ] || { command; exit; }

{ list; }导致列出命令在当前 shell 上下文中运行,而不是在子 shell 中运行。

阅读更多关于bash 分组命令

答案2

尝试这个

f() { [ "$#" -ne 3 ] && { command ; exit; }; }; f 1 2 3

然后

f() { [ "$#" -ne 3 ] && { command ; exit; }; }; f 1 2

相关内容