2012-03-01 72 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