2009-05-28 11 views
0

私が書かれているANに設定されていても評価されてしまった場合、フォームの声明:

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

私のシェルスクリプトの呼び出しこのステートメントは2回、は驚くほどです。

[ヒント(おそらく...):この正確なコードは、インクルードされたファイル内の関数で繰り返されます。 ifステートメントは、関数呼び出しの前にまず評価されます。この関数が呼び出されたときに評価されます。]

ここには何がありますか? -xフラグが間違っていると思いますか?

ありがとうございます! VARがそうでなければVARの値を代入した文字列xを代用設定されていない場合

+0

http://fixunix.com/questions/15902-bash-checken-if-env-var-set.html からアイデアを得て、誤解を招いていました。おそらく、これは私の悪いことでした... – Yaneeve

答えて

4

${VAR:-x}氏は述べています。

同様に、${FOO:-bar}FOOas described hereに設定されていない場合FOOの値または文字列barに置き換えて言います。

つまり、-nは空白でない場合はチェックし、"${VAR:-x}"は空白にならないため、-n "${VAR:-x}"は常に真となります。

+0

どうすれば変数の存在/非ヌルネスをクエリできますか? – Yaneeve

+1

ちょうど-n "$ {VAR}"はそれを行うべきです。 VARが設定されていて空白でない場合、これは真です。 –

関連する問題