这猛砸片断作品我预期会:为什么“本地”扫描命令的返回码?
$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1
但是这样一来,使用local
,并不:
$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0
任何人都可以解释为什么local
扫命令的返回码?
这猛砸片断作品我预期会:为什么“本地”扫描命令的返回码?
$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1
但是这样一来,使用local
,并不:
$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0
任何人都可以解释为什么local
扫命令的返回码?
代码local
返回0的原因是因为$?
“扩展到最近执行的前台管道的退出状态。”因此$?
正在恢复的local
成功,您可以通过从x
像这样的初始化分离x
声明解决这个问题:
$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1
查看https://lists.gnu.org/archive/html/bug-bash/2010-03/msg00007.html – tokland 2016-11-23 14:31:34