为什么“本地”丢弃命令的返回码?
这个 Bash 片段按预期工作:
$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1
但是这个使用 local
的代码并不像我预期的那样:
$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0
任何人都可以解释为什么 local
丢弃命令的返回代码吗?
This Bash snippet works as expected:
$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1
But this one, using local
, does not as I would have expected:
$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0
Can anyone explain why does local
discards the return code of the command?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
local
代码返回 0 的原因是$?
“扩展到最近执行的前台管道的退出状态。”因此$?
返回local
的成功您可以通过将
x
的声明与x< 的初始化分开来修复此行为/代码> 像这样:
The reason the code with
local
returns 0 is because$?
"Expands to the exit status of the most recently executed foreground pipeline." Thus$?
is returning the success oflocal
You can fix this behavior by separating the declaration of
x
from the initialization ofx
like so:local
命令的返回码掩盖了false
的返回码The return code of the
local
command obscures the return code offalse