Ich habe mir ein paar Skripte angesehen, die andere Leute geschrieben haben (insbesondere Red Hat), und viele ihrer Variablen werden mit der folgenden Notation zugewiesenVARIABLE1="${VARIABLE1:-some_val}"
oder einige erweitern andere VariablenVARIABLE2="${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
Referenzen
- Parametererweiterungen – Bash Hackers Wiki
- 10.2. Parameterersetzung
- Bash-Parametererweiterungen