2011-09-16 6 views
55

Capisco l'operatore di due punti in bash che funziona come a null e so che è utilizzato in parameter expansion, oltre ad essere utilizzato in altri modi, ma qualcuno può spiegare questo :

: ${SOMETHING='value'} 

Da sperimentazione so che questa imposta la variabile di ambiente $SOMETHING-'value' ma perché?

"Proprio perché lo fa" è una risposta valida, ma per favore mi indichi la documentazione per esso (che non riesco a trovare) o un nome appropriato per questo utilizzo sarebbe utile. Spero che ci sia una spiegazione più illuminante.

+1

noti che il ':' incorporato esiste nella shell Bourne e ksh nonché bash. – ghoti

risposta

60

L'espressione imposta QUALCOSA su value se non è già impostato. Questo è un operatore utile da avere in molte situazioni. Tuttavia, restituisce anche il valore assegnato, quindi se si eseguisse semplicemente

${SOMETHING='value'} 

quindi la shell avrebbero cercato di richiamare il comando value. Questo potrebbe o non potrebbe fare qualcosa di indesiderato; come minimo avrebbe gettato un messaggio "valore: comando non trovato".

Per evitare questo, è possibile utilizzare il numero non operativo :, che valuta il suo argomento e poi lo getta via, anziché eseguirlo.

+9

Il comando incorporato ':' è documentato [qui] (http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins). È anche uno [standard POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#colon). –

+3

Anche spiegato [qui] (http://www.tldp.org/LDP/abs/html/special-chars.html#COLON0REF). –

5

spiegato qui: http://tldp.org/LDP/abs/html/parameter-substitution.html

Se il parametro non impostato, impostarlo di default.

Entrambe le forme sono quasi equivalenti. Il: fa la differenza solo quando il parametro $ è stato dichiarato ed è null, [1] come sopra.

echo ${var=abc} # abc 
echo ${var=xyz} # abc 
# $var had already been set to abc, so it did not change. 
+2

Suggerirei http://wiki.bash-hackers.org/syntax/pe o http://mywiki.wooledge.org/BashFAQ/073 (e i suoi collegamenti) come riferimenti migliori rispetto all'ABS (che è cronicamente insoddisfatto e ha una tendenza a mostrare cattive pratiche nei suoi esempi). –

Problemi correlati