2009-06-30 11 views
6

Qualcuno sa cos'è: = per?Script di Bash che cos'è: = per?

Ho provato su Google ma sembra che Google filtri tutto il simbolo?

So che il sotto è qualcosa come controllare se la variabile HOME è una directory e quindi qualcosa non è uguale alla stringa vuota.

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

risposta

14

Da Bash Reference Manual:

${parameter:=word}

Se il parametro è posto o è nullo, l'espansione di parola è assegnato al parametro . Il valore del parametro è quindi sostituito. I parametri pos. e i parametri speciali possono non essere assegnati a in questo modo.

Fondamentalmente assegnerà il valore di word a parameter se e solo se parameter è settato o nullo.

+0

mi ha battuto di un secondo :) –

+0

E mi da due;) – bedwyr

+0

ho visto: = un sacco di posti. Di solito ho letto che è "definito da". In C++, C#, Java (+ un centinaio di altri posti): = equals =. E quando questo è vero, ussually = equals ==. Wow - è stato un punto delicato per me. Scusa per essere stato così cattivo nello spiegare me stesso :) – cwap

1

Dalla pagina man bash:

assegnare i valori predefiniti. Se il parametro non è impostato o è nullo, l'espansione della parola viene assegnata al parametro . Il valore del parametro viene quindi sostituito. I parametri pos. e i parametri speciali possono non essere assegnati a in questo modo.

Le pagine di man sono una cosa meravigliosa. man bash ti dirà quasi tutto ciò che vuoi sapere su Bash.

0

Qui "${HOME:=}" è un più o meno un non-operativo, poiché restituisce $ HOME se è impostato e nulla se non lo è.

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

Questo funzionerebbe in modo identico:

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

Se tu avessi qualcosa dopo il segno di uguale, la prima parte del if sarebbe sempre vero.

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

qualsiasi cosa succeda, otterresti sempre una stringa che non è uguale a "".

Tuttavia, questo potrebbe dipendere dal fatto che $ HOME e $ DI DEFAULT erano entrambi nulli:

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

Non è proprio un no-op, poiché se $ HOME non è definito, verrà impostato sulla stringa vuota. – camh

+0

@camh: In bash, non c'è praticamente alcuna differenza tra una variabile non definita e una con un valore nullo. –