2015-11-30 125 views
0

參考指南http://tldp.org/LDP/abs/html/testconstructs.html,有一行說:「if COMMAND」構造返回COMMAND的退出狀態。「如果COMMAND」通過COMMAND的退出狀態是什麼意思?

我明白if結構是如何工作的,但不知何故不明白這句話的意思。我認爲http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html的指南解釋得更清楚。 ABS指南中是否存在某些內容?

+2

僅供參考,ABS是一個非常很差的參考。建議不要使用它。 bash黑客wiki或wooledge wiki都好多了。 –

+1

... Wooledge wiki上的相應頁面是http://mywiki.wooledge.org/BashGuide/TestsAndConditionals#Conditional_Blocks_.28if.2C_test_and_.5B.5B.29;在bash-hacker wiki上的相應頁面是http://wiki.bash-hackers.org/syntax/ccmd/if_clause –

+0

我明白了。感謝您的建議! – darkgrin

回答

3

這是什麼意思是這樣的:

if false; then 
    : 
else 
    echo "Exit status is $?" 
fi 

false退出狀態是通過,所以$?表示退出狀態仍然可用在調用的下一行中的echo


一個構件是否通過退出狀態更直接重要的情況是變量賦值。

比較以下兩種:

# passes through exit status 
var=$(echo "hello"; false) # var=hello; $?=1 

# masks exit status 
declare var=$(echo "hello"; false) # var=hello; $?=0 

declare(如local)不穿過所述分配期間執行的任何命令替換的退出狀態;因此,通過返回其自身的退出狀態(0,除非它傳遞了一個無效的變量名或者在其自己的操作中有錯誤),它會掩蓋可能發生的任何失敗。

因此,如果你要聲明一個局部變量,並指定由命令替換的值沒有扔掉退出狀態,最好的做法是使用兩條獨立的線路:

somefunc() {     # local only makes sense inside a function 
    local var     # declare your local variables first... 
    var=$(echo "hello"; false) # ...then use them separately. 
} 
相關問題