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

Was macht hier das '-' (Bindestrich) nach Variablennamen?

Unter normalen Umständen ${FOO-} verhält sich genauso wie ${FOO} .

Allerdings mit set -u , wird die Erweiterung von nicht gesetzten Variablen standardmäßig zu einem Fehler.

Also ${FOO} könnte ein Fehler sein, aber ${FOO-} wird es nie sein.


Variablen innerhalb eines ${...} werden als „Parametererweiterung“ bezeichnet.
Suchen Sie nach diesem Begriff im Online-Handbuch oder im eigentlichen Handbuch (Zeile 792).
Die ${var-} form ist ähnlich wie ${var:-} . Der Unterschied wird nur eine Zeile vor dem :- erklärt Erweiterung (Zeile 810):

... bash testet auf einen Parameter, der nicht gesetzt oder null ist. Das Weglassen des Doppelpunkts ergibt einen Test nur für einen Parameter, der nicht gesetzt ist.

Daher testet dieses Formular nur, wenn eine Variable nicht gesetzt ist (und nicht null) und ersetzt die gesamte Erweiterung ${...} für den Wert nach - , was in diesem Fall null ist .

Daher die ${var-} wird zu:

  1. Der Wert von var, wenn var einen Wert hat (und nicht null).
  2. Auch der Wert von var (der Doppelpunkt :fehlt!), wenn var null ist:'' , also:auch null.
  3. Der Wert nach dem - (in diesem Fall null '' ), wenn var nicht gesetzt ist.

All das ist wirklich nur:

  1. Erweitern Sie auf '' wenn var entweder nicht gesetzt oder null ist.
  2. Auf den Wert von var erweitern (wenn var einen Wert hat).

Daher ändert die Erweiterung weder den Wert von var noch ihre Erweiterung, sondern vermeidet nur einen möglichen Fehler, wenn die Shell die Option nounset hat eingestellt.

Dieser Code stoppt bei beiden Verwendungen von $var :

#!/bin/bash
set -u

unset var

echo "variable $var"
[[ $var ]] && echo "var set"

Dieser Code wird jedoch ohne Fehler ausgeführt:

#!/bin/bash
set -u

unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"

Linux
  1. Was bedeutet die Zahl in Klammern hinter Unix-Befehlsnamen in Manpages?

  2. Was macht der Systemaufruf brk()?

  3. Was ist die Magie von - (einem Bindestrich) in Befehlszeilenparametern?

  4. Was bewirkt die Ausführungserlaubnis?

  5. Was macht das -e in einem Bash-Shebang?

Keine X11-DISPLAY-Variable - was bedeutet das?

Was bedeutet das 'rc' in `.bashrc` usw.?

Was bedeutet hier 999?

Was bedeutet ein Punkt nach den Dateiberechtigungsbits?

Was bedeutet die ep-Fähigkeit?

Was ist die Umgebungsvariable XDG_VTNR?