GNU/Linux >> Linux Esercitazione >  >> Linux

Usare "${a:-b}" per l'assegnazione di variabili negli script?

Ho esaminato alcuni script scritti da altre persone (in particolare Red Hat) e molte delle loro variabili sono assegnate utilizzando la seguente notazione
VARIABLE1="${VARIABLE1:-some_val}"
o alcune espandi altre variabili
VARIABLE2="${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

Linux
  1. Suggerimenti Linux per l'utilizzo di cron per pianificare le attività

  2. Utilizzo di AppImage per la gestione dei pacchetti Linux

  3. Java Impossibile connettersi al server finestra X11 utilizzando 'localhost:10.0' come valore della variabile DISPLAY

  4. Utilizzo delle variabili in SQLCMD per Linux

  5. usando awk con le condizioni del valore della colonna

Suggerimenti per l'utilizzo del comando top in Linux

Suggerimenti per l'utilizzo di tmux

Suggerimenti per l'utilizzo dello schermo

Utilizzo dello strumento SS per la risoluzione dei problemi di rete

Utilizzo del comando di sospensione di Linux negli script Bash

Comprendere il ciclo for negli script della shell