GNU/Linux >> Znalost Linux >  >> Linux

Používáte „${a:-b}“ pro přiřazení proměnných ve skriptech?

Díval jsem se na několik skriptů, které napsali jiní lidé (konkrétně Red Hat), a mnoho jejich proměnných je přiřazeno pomocí následujícího zápisu
VARIABLE1="${VARIABLE1:-some_val}"
nebo některé rozšířit další proměnné
VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"

Jaký má smysl používat tento zápis namísto pouhého přímého deklarování hodnot (např. VARIABLE1=some_val )?

Existují výhody tohoto zápisu nebo možné chyby, kterým by se dalo předejít?

:- mají v tomto kontextu konkrétní význam?

Přijatá odpověď:

Tato technika umožňuje proměnné přiřadit hodnotu, pokud je jiná proměnná prázdná nebo nedefinovaná. POZNÁMKA: Tato „jiná proměnná“ může být stejná nebo jiná proměnná.

úryvek

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

POZNÁMKA: Tento formulář také funguje, ${parameter-word} . Pokud byste chtěli vidět úplný seznam všech forem rozšíření parametrů dostupných v Bash, pak vřele doporučuji, abyste se podívali na toto téma na wiki Bash Hacker s názvem:„Rozšíření parametrů“.

Příklady

proměnná neexistuje

$ echo "$VAR1"

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

proměnná existuje

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

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

Totéž lze provést vyhodnocením jiných proměnných nebo spuštěním příkazů v části zápisu s výchozí hodnotou.

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

$

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

Další příklady

Můžete také použít mírně odlišný zápis, kde je to jen VARX=${VARX-<def. value>} .

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

Ve výše uvedeném $VAR1 &$VAR2 byly již definovány řetězcem „má jinou hodnotu“, ale $VAR3 nebyla definována, takže byla místo toho použita výchozí hodnota .

Další příklad

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

Kontrola a přiřazení pomocí := notace

Nakonec zmíním praktický operátor := . To provede kontrolu a přiřadí hodnotu, pokud je testovaná proměnná prázdná nebo nedefinovaná.

Příklad

Všimněte si, že $VAR1 je nyní nastaveno. Operátor := provedl test a zadání v jediné operaci.

$ unset VAR1
$ echo "$VAR1"

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

Pokud je však hodnota nastavena dříve, zůstane sama.

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

Příruční referenční tabulka Dandy

Související:Vytvořte příkaz vložením řetězce do tty?

Odkazy

  • Rozšíření parametrů – Bash Hackers Wiki
  • 10.2. Substituce parametrů
  • Rozšíření parametrů Bash

Linux
  1. Linuxové tipy pro používání cronu k plánování úloh

  2. Použití AppImage pro správu balíčků Linuxu

  3. Použití Bash pro automatizaci

  1. Použití nástroje SS pro řešení problémů se sítí

  2. Použít rozšíření .sh nebo .bash pro skripty Bash?

  3. Použití Linux Sleep Command ve skriptech Bash

  1. Jak trasovat Python skripty pomocí trace.py

  2. Variabilní rozsah pro skripty bash shell a funkce ve skriptu

  3. Použití proměnné v cestě příkazu pro ExecStart ve službě systemd