2012-03-01 78 views
24

如何在bash中检查命令替换的退出代码如果赋值是在函数中的局部变量?
请参阅以下示例。第二个是我想检查退出代码的地方。
有人对此有一个很好的解决方法或正确的解决方案吗?在bash局部变量赋值中的命令替换退出代码

$ function testing { test="$(return 1)"; echo $?; }; testing 
1 
$ function testing { local test="$(return 1)"; echo $?; }; testing 
0 

回答

31

如果你看一下local男子文件(实际上只是BASH内建手册页),它被视为它自己的命令,它给出了0在成功创建局部变量的退出代码。因此local正在覆盖最后执行的错误代码。

试试这个:

function testing { local test; test="$(return 1)"; echo $?; }; testing 

编辑:我继续尝试了你,和它的作品。

+0

谢谢,像往常一样,我发布我的问题后,我发现自己的答案出来,就像你提出的一样。在8小时过去之前,我的名声太低,无法回答我自己的问题。 但'本地人'给了我'LOCAL(8postfix)'手册页的手册页,所以不太有用。但我在http://mywiki.wooledge.org/BashPitfalls#local_varname.3D.24.28command.29上找到它。 – Vampire 2012-03-02 06:09:06

+0

另一个信息来源是“man bash”。在“SHELL BUILTIN COMMANDS”部分提到'local'。 – 2013-02-18 18:12:45

+0

'help'命令返回内置命令的文档。请参阅'help local'。 – Eliot 2017-08-02 20:41:42