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

vbopmzt1  于 2023-03-19  发布在  Shell
关注(0)|答案(2)|浏览(99)

此Bash代码段按预期工作:

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

但是这个使用local的示例并不像我所期望的那样:

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

谁能解释一下为什么local扫描命令的返回码?

sulc1iza

sulc1iza1#

具有local的代码返回0的原因是因为$?“扩展到最近执行的前台管道的退出状态”。因此$?返回local的成功
您可以通过将x的声明与x的初始化分开来修复此行为,如下所示:

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

2j4z5cfb2#

local命令的返回代码掩盖了false的返回代码

相关问题