为什么“本地”清除命令的返回代码?

这个Bash片段符合我的预期:


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

$ fun1

exit code: 1

但是,使用local,这不会:


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

$ fun2

exit code: 0

谁能解释为什么local清除命令的返回代码?


守着一只汪
浏览 447回答 2
2回答

GCT1015

代码local返回0 的原因是$?“扩展到最近执行的前台管道的退出状态”。从而$?回报成功local您可以通过如下方式将声明x与初始化分开来解决此问题x:$ fun() { local x; x=$(false); echo "exit code: $?"; }; funexit code: 1

大话西游666

该local命令的返回码遮盖了的返回码false
打开App,查看更多内容
随时随地看视频慕课网APP