我有一个脚本,如果命令以非零状态退出并且我想在退出前回显某条日志,则脚本应立即退出:
set -e
command A || (echo "A failed";exit 1)
command B || (echo "B failed";exit 1)
if Condition C;
then
command D || (echo "D failed";exit 1)
它做了我想要的。如果在命令A / B / D中失败,请向我回显正确的消息并退出。我知道()表示子shell,并且在子shell中它回显某些东西,然后在subshell(出口1)中返回false,因此它是“ false || false”,因此在主shell中退出。我的问题是,是否与:
相同?#set -e
command A || { echo "A failed";exit 1; }
command B || { echo "B failed";exit 1; }
if Condition C;
then
command D || {echo "D failed";exit 1; }
如果没有,有什么区别?在我的测试中,它们的行为相同。
在第二个版本中,exit 1
退出原始外壳,而不是子外壳。这就是为什么您不需要set -e
使脚本退出的原因。
您可以像这样获得第一个外壳的等效物:
set -e
command A || { echo "A failed";false; }
command B || { echo "B failed";false; }
if Condition C;
then
command D || {echo "D failed";false; }
[false
以非零状态退出,这将触发set -e
退出外壳。