在编写一个简单的 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 上下文中运行,而不是在 subshell 中。
阅读有关分组命令的更多信息bash
| 归档时间: |
|
| 查看次数: |
4227 次 |
| 最近记录: |