2009-06-30 16 views
6

Weiß jemand, was ist: = für?Bash-Skript Was ist: = für?

Ich habe versucht zu googeln, aber es scheint, google filtert alle Symbole?

Ich weiß, das unten ist so etwas wie zu prüfen, ob die Variable HOME ein Verzeichnis ist und dann etwas nicht gleich leer ist Zeichenfolge.

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

Antwort

14

Von Bash Reference Manual:

${parameter:=word}

Wenn der Parameter nicht gesetzt oder Null ist, wird die Erweiterung des Wortes Parameter zugeordnet. Der Wert des Parameters ist dann substituiert. Die Position Parameter und Sonderparameter dürfen auf diese Weise nicht zugewiesen werden.

Grundsätzlich wird es den Wert von wordparameter zuweisen, wenn und nur wenn parameter nicht gesetzt oder null ist.

+0

mich schlagen um eine Sekunde :) –

+0

Und mich durch zwei;) – bedwyr

+0

ich gesehen habe: = viel setzt. Normalerweise lese ich es ist "definiert durch". In C++, C#, Java (+ hundert andere Stellen): = gleich =. Und wenn das wahr ist, ist ussuell = gleich ==. Wow - das war ein subtiler Punkt von mir. Entschuldigung dafür, dass ich mich so schlecht erklären kann :) – cwap

1

Von der Bash-Manpage:

zuordnen Standardwerte. Wenn der Parameter nicht gesetzt oder null ist, wird die Erweiterung des Worts dem Parameter zugewiesen. Der Wert des Parameters wird dann ersetzt. Die Position Parameter und Sonderparameter dürfen auf diese Weise nicht zugewiesen werden.

Manpages sind eine wunderbare Sache. man bash wird Ihnen fast alles erzählen, was Sie über Bash wissen wollen.

0

Hier ist "${HOME:=}" ein mehr oder weniger ein No-Op, da es $ HOME zurückgibt, wenn es gesetzt ist und nichts, wenn es nicht ist.

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

identisch funktioniert Dies würde:

if [ "${HOME}" != "" ] && [ -d ${HOME} ] 

Wenn Sie etwas nach dem Gleichheitszeichen haben, der erste Teil der if würde immer wahr.

if [ "${HOME:=here}" != "" ] && [ -d ${HOME} ] 

was passiert Sie hatte immer einen String bekommen, die nicht gleich „“ ist.

Dies würde jedoch davon ab, ob $ HOME und $ Standard waren beide null:

if [ "${HOME:=$DEFAULT}" != "" ] && [ -d ${HOME} ] 
+0

Es ist nicht ganz ein No-Op, denn wenn $ HOME nicht definiert ist, wird es auf den leeren String gesetzt. – camh

+0

@camh: In bash gibt es praktisch keinen Unterschied zwischen einer undefinierten Variable und einer mit einem Nullwert. –