Ho esaminato alcuni script scritti da altre persone (in particolare Red Hat) e molte delle loro variabili sono assegnate utilizzando la seguente notazioneVARIABLE1="${VARIABLE1:-some_val}"
o alcune espandi altre variabiliVARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"
Qual è lo scopo di usare questa notazione invece di dichiarare direttamente i valori (ad esempio, VARIABLE1=some_val
)?
Ci sono vantaggi in questa notazione o possibili errori che potrebbero essere evitati?
Fa il :-
ha un significato specifico in questo contesto?
Risposta accettata:
Questa tecnica consente di assegnare un valore a una variabile se un'altra variabile è vuota o non è definita. NOTA: Questa "altra variabile" può essere la stessa o un'altra variabile.
estratto
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted.
Otherwise, the value of parameter is substituted.
NOTA: Anche questo modulo funziona, ${parameter-word}
. Se desideri vedere un elenco completo di tutte le forme di espansione dei parametri disponibili all'interno di Bash, ti consiglio vivamente di dare un'occhiata a questo argomento nel wiki di Bash Hacker intitolato:"Espansione dei parametri".
Esempi
La variabile non esiste
$ echo "$VAR1"
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value
esiste una variabile
$ VAR1="has value"
$ echo "$VAR1"
has value
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value
La stessa cosa può essere fatta valutando altre variabili o eseguendo comandi all'interno della parte del valore predefinito della notazione.
$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"
$
$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value
Altri esempi
Puoi anche usare una notazione leggermente diversa dove è solo VARX=${VARX-<def. value>}
.
$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0
Nel $VAR1
sopra &$VAR2
erano già definiti con la stringa "ha un altro valore" ma $VAR3
non era definito, quindi è stato utilizzato il valore predefinito, .
Un altro esempio
$ VARX="${VAR3-0}"
$ echo "$VARX"
0
Controllo e assegnazione tramite :=
notazione
Infine menzionerò l'operatore pratico, :=
. Questo eseguirà un controllo e assegnerà un valore se la variabile sottoposta a test è vuota o non definita.
Esempio
Nota che $VAR1
è ora impostato. L'operatore :=
fatto il test e il compito in un'unica operazione.
$ unset VAR1
$ echo "$VAR1"
$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default
Tuttavia, se il valore è impostato prima, viene lasciato solo.
$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value
Tabella di riferimento Handy Dandy
Correlati:costruisci un comando inserendo una stringa in un tty?
Riferimenti
- Espansioni dei parametri – Bash Hackers Wiki
- 10.2. Sostituzione dei parametri
- Espansioni dei parametri Bash