为什么“本地”扫描命令的返回码?
这个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