在编写一个简单的 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