这个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 :(得分:61)
local
的代码返回0的原因是因为$?
“扩展到最近执行的前台管道的退出状态。”因此$?
正在返回local
您可以通过将x
的声明与x
的初始化分开来解决此问题,如下所示:
$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1
答案 1 :(得分:4)
local
命令的返回码掩盖了false
的返回码