捕获 bash 函数的结果并允许其退出

lon*_*nix 1 bash shell-script trap

该函数应该退出调用脚本:

crash() {
  echo error
  exit 1
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作:

echo before
crash
echo after         # execution never reaches here
Run Code Online (Sandbox Code Playgroud)

但这并不:

echo before
x=$(crash)         # nothing is printed, and execution continues
echo after         # this is printed
Run Code Online (Sandbox Code Playgroud)

如何捕获函数的结果并允许其退出?

xen*_*oid 5

这是因为在子 shell 中$(crash)执行,因此适用于子 shell 而不是您的脚本。crashexit

如果由于脚本无论如何都退出而不会使用它,那么在变量中捕获输出有什么意义呢?