该函数应该退出调用脚本:
crash() {
echo error
exit 1
}
这按预期工作:
echo before
crash
echo after # execution never reaches here
但这并不:
echo before
x=$(crash) # nothing is printed, and execution continues
echo after # this is printed
如何捕获函数的结果并允许其退出?
答案1
这是因为在子 shell 中$(crash)
执行crash
,因此exit
适用于子 shell 而不是您的脚本。
如果由于脚本无论如何都退出而不会使用它,那么在变量中捕获输出有什么意义呢?
答案2
这应该可以解决您的问题:
echo before
x=$(crash) || exit # if crash give -gt 0 value then exit with the same value
echo after