【问题标题】:Why does "local" sweep the return code of a command?为什么“本地”会扫描命令的返回码?
【发布时间】:2011-05-24 04:53:39
【问题描述】:

这个 Bash sn-p 按预期工作:

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

但是这个,使用local,并没有像我预期的那样:

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

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

【问题讨论】:

标签: bash shell local


【解决方案1】:

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

【讨论】:

  • 是的,我明白了,但是 local 作为一个特殊的关键字,我希望不会掩盖它。我想这是一个错误的假设。
  • 这不是一个“特殊关键字”,它是一个内置的shell。甚至内置函数也有返回值。
  • Shellcheck 可以检测到这个问题 (SC2155)。
【解决方案2】:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多