2009-05-28 24 views
0

我寫了被評估,如果形式的語句:

if [ -n "${VAR:-x}" ]; then 
    #do something 
    export VAR=#something 
fi 

我的shell腳本調用這個聲明兩次,並且令人驚訝地通過了兩次。

[提示(也許...):這個確切的代碼在一個包含文件中的函數中重複。 if語句首先在函數調用之前進行評估。當函數被調用時,它被「再次」評估。]

這裏是什麼事?我是否錯誤地理解了-x標誌?

謝謝!

+0

我的想法來自於: http://fixunix.com/questions/15902-bash-checking-if-env-var-set.html 並被誤導。也許這是我的不好... – Yaneeve 2009-05-28 11:16:17

回答

4

${VAR:-x}說如果VAR沒有設置替換字符串x否則替換值爲VAR

同樣,${FOO:-bar}說替代的FOO值或bar如果FOO沒有設置as described here的字符串。

這意味着-n "${VAR:-x}"將始終爲真,因爲-n表示檢查是否空白,並且"${VAR:-x}"永遠不會爲空。

+0

那麼我怎樣才能查詢一個變量的存在/非空? – Yaneeve 2009-05-28 10:58:34