GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwendung von „${a:-b}“ für die Variablenzuweisung in Skripten?

Ich habe mir ein paar Skripte angesehen, die andere Leute geschrieben haben (insbesondere Red Hat), und viele ihrer Variablen werden mit der folgenden Notation zugewiesen
VARIABLE1="${VARIABLE1:-some_val}"
oder einige erweitern andere Variablen
VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"

Welchen Sinn hat es, diese Notation zu verwenden, anstatt nur die Werte direkt zu deklarieren (z. B. VARIABLE1=some_val )?

Gibt es Vorteile dieser Notation oder mögliche Fehler, die verhindert würden?

Macht den :- haben in diesem Zusammenhang eine besondere Bedeutung?

Akzeptierte Antwort:

Diese Technik ermöglicht es, einer Variablen einen Wert zuzuweisen, wenn eine andere Variable entweder leer oder undefiniert ist. HINWEIS: Diese „andere Variable“ kann dieselbe oder eine andere Variable sein.

Auszug

${parameter:-word}
    If parameter is unset or null, the expansion of word is substituted. 
    Otherwise, the value of parameter is substituted.

HINWEIS: Dieses Formular funktioniert auch, ${parameter-word} . Wenn Sie eine vollständige Liste aller in Bash verfügbaren Formen der Parametererweiterung sehen möchten, empfehle ich Ihnen dringend, sich dieses Thema im Bash-Hacker-Wiki mit dem Titel „Parametererweiterung“ anzusehen.

Beispiele

Variable existiert nicht

$ echo "$VAR1"

$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value

Variable vorhanden

$ VAR1="has value"
$ echo "$VAR1"
has value

$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value

Dasselbe kann durch Auswerten anderer Variablen oder Ausführen von Befehlen innerhalb des Standardwertteils der Notation erreicht werden.

$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"

$

$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value

Weitere Beispiele

Sie können auch eine etwas andere Notation verwenden, wo es nur VARX=${VARX-<def. value>} .

$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0

Im obigen $VAR1 &$VAR2 wurden bereits mit dem String „hat einen anderen Wert“ aber $VAR3 definiert war nicht definiert, daher wurde stattdessen der Standardwert verwendet .

Ein weiteres Beispiel

$ VARX="${VAR3-0}"
$ echo "$VARX"
0

Prüfung und Zuordnung mit := Schreibweise

Zuletzt werde ich den Handy-Operator := erwähnen . Dies führt eine Überprüfung durch und weist einen Wert zu, wenn die zu testende Variable leer oder undefiniert ist.

Beispiel

Beachten Sie, dass $VAR1 ist jetzt eingestellt. Der Operator := hat den Test und die Zuordnung in einem Arbeitsgang gemacht.

$ unset VAR1
$ echo "$VAR1"

$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default

Wenn der Wert jedoch zuvor festgelegt wurde, bleibt er unverändert.

$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value

Handlicher Dandy-Referenztisch

Verwandte:Konstruieren Sie einen Befehl, indem Sie eine Zeichenfolge in ein tty einfügen?

Referenzen

  • Parametererweiterungen – Bash Hackers Wiki
  • 10.2. Parameterersetzung
  • Bash-Parametererweiterungen

Linux
  1. Verwenden von Bash für die Automatisierung

  2. Verwenden des SS-Tools für die Netzwerkfehlerbehebung

  3. Ersetzen Sie eine Zeile durch einen anderen Inhalt mit Sed und Parallel für eine große Datei?

  4. Verwenden Sie die Erweiterung .sh oder .bash für Bash-Skripte?

  5. Verwenden des Linux-Sleep-Befehls in Bash-Skripten

Tipps zur Verwendung des Top-Befehls unter Linux

Tipps zur Verwendung von tmux

Tipps zur Verwendung des Bildschirms

Die for-Schleife in Shell-Skripten verstehen

Java Kann keine Verbindung zum X11-Fensterserver herstellen, wenn „localhost:10.0“ als Wert der DISPLAY-Variablen verwendet wird

Verwenden von Variablen in SQLCMD für Linux