此Bash代码段按预期工作:
$ fun1() { x=$(false); echo "exit code: $?"; } $ fun1 exit code: 1
但是这个使用local的示例并不像我所期望的那样:
local
$ fun2() { local x=$(false); echo "exit code: $?"; } $ fun2 exit code: 0
谁能解释一下为什么local扫描命令的返回码?
sulc1iza1#
具有local的代码返回0的原因是因为$?“扩展到最近执行的前台管道的退出状态”。因此$?返回local的成功您可以通过将x的声明与x的初始化分开来修复此行为,如下所示:
$?
x
$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun exit code: 1
2j4z5cfb2#
local命令的返回代码掩盖了false的返回代码
false
2条答案
按热度按时间sulc1iza1#
具有
local
的代码返回0的原因是因为$?
“扩展到最近执行的前台管道的退出状态”。因此$?
返回local
的成功您可以通过将
x
的声明与x
的初始化分开来修复此行为,如下所示:2j4z5cfb2#
local
命令的返回代码掩盖了false
的返回代码