這是什麼意思是這樣的:
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.
}
僅供參考,ABS是一個非常很差的參考。建議不要使用它。 bash黑客wiki或wooledge wiki都好多了。 –
... 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 –
我明白了。感謝您的建議! – darkgrin