2009-05-28 8 views
0

ich geschrieben ein, wenn Anweisung der Form:

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

Mein Shell-Skript Anrufe Diese Aussage zweimal und überraschend besteht die Bedingung zweimal.

[Hinweis (vielleicht ...): Dieser genaue Code wird in einer Funktion in einer enthaltenen Datei wiederholt. Die if-Anweisung wird zuerst vor dem Funktionsaufruf ausgewertet. Es wird "erneut" ausgewertet, wenn die Funktion aufgerufen wird.]

Was ist los hier? Verstehe ich das -x Flag falsch?

Danke!

+0

Ich habe die Idee von: http://fixunix.com/questions/15902-bash-checking-i-f-env-var-set.html und wurde irregeführt. Vielleicht war das meine schlechte ... – Yaneeve

Antwort

4

${VAR:-x} sagt, wenn VAR nicht festgelegt ist, ersetzen Sie die Zeichenfolge x andernfalls ersetzen Sie den Wert VAR.

Ähnlich sagt ${FOO:-bar} den Wert von FOO ersetzen oder die Zeichenfolge bar wenn FOO nicht as described here gesetzt.

Das bedeutet wird immer wahr sein als -n bedeutet, dass, wenn nicht leer und "${VAR:-x}" wird nie leer sein.

+0

Wie frage ich dann die Existenz/Nicht-Nullheit einer Variablen ab? – Yaneeve

+1

Just -n "$ {VAR}" sollte es tun. Dies ist der Fall, wenn VAR gesetzt ist und nicht leer ist. –

Verwandte Themen