这个 Bash 片段按预期工作:
$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1
但是这个使用
local
,并不像我预期的那样:
$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0
任何人都可以解释为什么
local
丢弃命令的返回代码吗?
带有
local
的代码返回0的原因是因为$?
“扩展到最近执行的前台管道的退出状态。”因此 $?
返回 local
的成功
您可以通过将
x
的声明与 x
的初始化分开来修复此行为,如下所示:
$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1
local
命令的返回码掩盖了false
的返回码