2015-05-08 8 views
6

Non sono riuscito a trovare alcuna documentazione che spiegherebbe la sintassi riportata di seguito. Cosa fa all'interno di uno script bash? È un test?Comando di Bash che inizia con i due punti con un altro punto prima dei segni di uguale a

: ${foo:=bar}; export foo 
+1

Lo hai inserito in uno script di bash e lo hai testato? – Almo

+3

Non proprio un duplicato di quella domanda dal momento che non copre qui il bit di espansione dei parametri (anche se quale parte di questo viene posta esattamente non è chiara). –

+1

Vedere questo: http://stackoverflow.com/questions/7444504/explanation-of-this-use-of-the-colon-operator – tolanj

risposta

5

Il comando : è il null utility:

Questa utility deve espandersi solo argomenti del comando. Viene utilizzato quando è necessario un comando, come nella condizione allora di un comando if, ma nulla deve essere eseguito dal comando.

anche Bourne Shell Builtins:

fare nulla al di là espansione argomenti e l'esecuzione di reindirizzamenti. Lo stato di ritorno è zero.

Il ${foo:=bar} sintassi è una speciale Parameter Expansion:

${parameter:=[word]} 

Valori Assegna default. Se il parametro non è impostato o è nullo, l'espansione della parola (o una stringa vuota se la parola è omessa) deve essere assegnata al parametro. In tutti i casi, il valore finale del parametro deve essere sostituito. Solo variabili, non parametri posizionali o parametri speciali, possono essere assegnati in questo modo.

manuale Bash Reference entry:

${parameter:=word} 

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

Quindi la riga di comando nella sua domanda:

: ${foo:=bar}; export foo 

è di due comandi:

  1. : ${foo:=bar}
  2. export foo

Il primo dei quali si espande la variabile di 012.e se è vuoto o non impostato assegna il valore bar.

Il secondo esporta la variabile foo per sotto-shell e altri processi.

+0

Ora ho i due ":" sono indipendenti, ed è per questo che non sono riuscito a trovare alcun documento su di loro. Il primo è necessario in questo caso? – toliveira

+1

':' all'inizio è il comando nullo. ';' è un separatore di comandi. Il ':' nell'espansione fa parte della sintassi di espansione e significa "o vuoto". Vedi la tabella un po 'più in basso in [questa sezione] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02) per alcuni esempi. –

+0

Grazie, ho capito. Ma è necessario il comando Null? "È usato quando è necessario un comando, come nella condizione di un comando if", ma non è questo il caso, vero? – toliveira

Problemi correlati