function test_ok {
echo "function without error" || { echo "[Error] text"; return 1; }
echo "this is executed"
}
function test_nok {
echo "function with error"
cause-an-error || { echo "[Error] text"; return 1; }
echo "this is not executed"
echo "this is not executed"
}
test_ok ; echo "$?"
test_nok ; echo "$?"
我希望函数return 1
中的test_nok
仅退出嵌套函数{ echo "[Error] text"; return 1; }
,并执行以下两个回显命令,因为它们属于父函数test_nok
。
但是事实并非如此,echo "this is not executed"
实际上没有执行,test_nok
的退出代码为1。这是我需要的行为,但是我不明白为什么这样工作=>为什么echo "this is not executed"
未执行?
答案 0 :(得分:1)
Gordon Davisson在一条评论中回答了我的问题:
这里没有嵌套函数。 { }
不是函数,它只是对命令进行分组。
答案 1 :(得分:0)
您可以将错误代码保存在变量中,然后在函数末尾返回(尽管这可能不是一个好主意。我建议在错误发生时返回):
function test_nok {
echo "function with error"
cause-an-error || { error_code=$?; echo "[Error] text"; }
echo "this is not executed"
echo "this is not executed"
return $error_code
}
test_nok
echo $?
输出:
function with error
./test.sh: line 5: cause-an-error: command not found
[Error] text
this is not executed
this is not executed
127