为什么“本地”扫描命令的返回码?
这个Bash片段正如我所料:
$ fun1() { x=$(false); echo "exit code: $?"; } $ fun1 exit code: 1
但是,这个使用local不是:
$ fun2() { local x=$(false); echo "exit code: $?"; } $ fun2 exit code: 0
任何人都可以解释此行为?
与local代码返回0的原因是因为$? “扩展到最近执行的前台pipe道的退出状态。” 那么$? 正在回归local的成功
你可以通过从x的初始化中分离x的声明来解决这个问题,就像这样:
$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun exit code: 1
local命令的返回码隐藏返回码为false