GNU/Linux >> Znalost Linux >  >> Linux

Co zde dělá '-' (pomlčka) za názvy proměnných?

Za normálních okolností ${FOO-} se chová úplně stejně jako ${FOO} .

Nicméně s set -u , rozšíření nenastavených proměnných se ve výchozím nastavení stane chybou.

Takže ${FOO} může to být chyba, ale ${FOO-} nikdy nebude.


Proměnné uvnitř ${...} se nazývají „Rozšíření parametrů“.
Vyhledejte tento termín v online příručce nebo ve skutečné příručce (řádek 792).
${var-} forma je svým tvarem podobná ${var:-} . Rozdíl je vysvětlen jen jeden řádek před :- rozšíření (řádek 810):

... bash testuje parametr, který není nastaven nebo má hodnotu null. Vynechání výsledků dvojtečky v testu pouze pro parametr, který není nastaven.

Tento formulář tedy testuje pouze v případě, že proměnná není nastavena (a není null) a nahradí celé rozšíření ${...} pro hodnotu za - , což je v tomto případě null .

Proto ${var-} se stává:

  1. Hodnota proměnné, když má var hodnotu (a ne null).
  2. Také hodnota var (chybí dvojtečka!), když je var null:'' , tedy:také null.
  3. Hodnota za znakem - (v tomto případě null '' ), pokud var není nastavena.

Všechno to je opravdu:

  1. Rozbalte na '' když je var buď nenastaveno, nebo null.
  2. Rozbalte na hodnotu proměnné (když má proměnná hodnotu).

Proto expanze nemění nic na hodnotě var, ani to není expanze, pouze se vyhne možné chybě, pokud má shell možnost nounset set.

Tento kód se zastaví při obou použitích $var :

#!/bin/bash
set -u

unset var

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

Tento kód však poběží bez chyby:

#!/bin/bash
set -u

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

Linux
  1. Co dělá systémové volání brk()?

  2. V čem je kouzlo - (pomlčka) v parametrech příkazového řádku?

  3. Co znamená „rc“ v „.bashrc“ atd.?

  1. Co dělá -e v bash shebang?

  2. Co znamená tečka za bity oprávnění souboru?

  3. Co znamená schopnost ep?

  1. Linux – Co znamená tečka za bity oprávnění souboru?

  2. Point of Uniq -u a co to dělá??

  3. Co je proměnná prostředí XDG_VTNR?