为什么“本地”扫描命令的返回码?

时间:2010-12-12 10:40:30

标签: bash shell local

这个Bash片段按照我的预期工作:

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

但是,使用local的这个不会:

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

任何人都可以解释为什么local扫描命令的返回码?

2 个答案:

答案 0 :(得分:61)

local的代码返回0的原因是因为$?“扩展到最近执行的前台管道的退出状态。”因此$?正在返回local

的成功

您可以通过将x的声明与x的初始化分开来解决此问题,如下所示:

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

答案 1 :(得分:4)

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