为什么“local”会丢弃命令的返回码?

问题描述 投票:0回答:2

这个 Bash 片段按预期工作:

$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1

但是这个使用

local
,并不像我预期的那样:

$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0

任何人都可以解释为什么

local
丢弃命令的返回代码吗?

bash shell local
2个回答
86
投票

带有

local
的代码返回0的原因是因为
$?
“扩展到最近执行的前台管道的退出状态。”因此
$?
返回
local

的成功

您可以通过将

x
的声明与
x
的初始化分开来修复此行为,如下所示:

$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1

6
投票

local
命令的返回码掩盖了
false

的返回码
© www.soinside.com 2019 - 2024. All rights reserved.