Čím je ' v bash skriptování rozdíl mezi deklarací a normální proměnnou?

V bash skriptování:

vytvoříme proměnnou pouhým pojmenováním:

abc=ok 

nebo můžeme použít declare

declare abc=ok 

v čem je rozdíl?

a proč bash dělá tolik způsobů, jak vytvořit proměnnou?

Komentáře

  • Při použití ve funkci, declare nastaví NAME jako místní, stejně jako u příkazu local. Možnost -g toto chování potlačuje. Viz help declare.
  • declare umožňuje vytvářet asociativní pole, celá čísla a čtení pouze proměnné. Také rozšiřuje své argumenty, takže jsou možné věci jako declare $name=1.

Odpovědět

Od help -m declare:

NAME

    declare – Nastavte hodnoty a atributy proměnných.

SYNOPSIS

    declare [ -aAfFgilnrtux ] [ -p ] [ name [=value] …]

POPIS

    Nastavit hodnoty a atributy proměnných.

    Deklarovat proměnné a dát jim atributy. Pokud nejsou zadány žádné JMÉNA, zobrazte atributy a hodnoty všech proměnných.

    Možnosti:

      -f

        omezit akci nebo zobrazení na názvy a definice funkcí

      -F

        omezit zobrazení pouze na názvy funkcí (plus číslo řádku a zdrojový soubor při ladění)

      -g

        vytvářet globální proměnné při použití ve funkci prostředí; jinak ignorováno

      -p

        zobrazit atributy a hodnotu každého NÁZVU

    Možnosti, které nastavují atributy:

      -a

        vytvoření indexovaných polí NÁZVŮ (pokud jsou podporována)

      -A

        vytváření asociativních polí NÁZVŮ (pokud jsou podporována)

      -i

        aby NÁZVY měly atribut integer

      -l

        k převodu NÁZVŮ na malá písmena při přiřazení

      -n

        učinit z NAME odkaz na proměnnou pojmenovanou podle její hodnoty

      -r

        , aby se názvy NAME adonly

      -t

        , aby NÁZVY obsahovaly Atribut trace

      -u

        k převodu NÁZVŮ na velká písmena při přiřazení

      -x

        vytváření jmen exportovat

    pomocí + místo - vypne daný atribut .

    Proměnné s atributem integer mají aritmetické vyhodnocení (viz příkaz let) provedené, když je proměnné přiřazena hodnota.

    Když declare používá ve funkci funkci NAME, která je lokální, jako u příkazu local. Možnost -g toto chování potlačit.

    Stav ukončení:
    Vrátí úspěch, pokud není zadána neplatná volba nebo nedojde k chybě přiřazení proměnné.

VIZ TÉŽ

    bash (1)

IMPLEMENTACE

    GNU bash, verze 4.3.11 (1) – vydání (i686-pc-linux-gnu)
    Copyright (C) 2013 Free Software Foundation, Inc.
    Licence GPLv3 +: GNU GPL verze 3 nebo novější < http : //gnu.org/licenses/gpl.html >


Takže declare se používá k nastavení hodnot proměnných a atributů .

Dovolte mi ukázat použití dvou atributy s velmi jednoduchým příkladem:

$ # First Example: $ declare -r abc=ok $ echo $abc ok $ abc=not-ok bash: abc: readonly variable $ # Second Example: $ declare -i x=10 $ echo $x 10 $ x=ok $ echo $x 0 $ x=15 $ echo $x 15 $ x=15+5 $ echo $x 20 

Z výše uvedeného příkladu si myslím, že byste měli rozumět použití declare proměnná nad normální proměnnou! Tento typ declare ace je užitečný ve funkcích, smyčkách se skriptováním.

Navštivte také Psaní proměnných: deklarovat nebo vysázet

Komentáře

  • ano, " a atributy " to je to! to je rozdíl.
  • Skvělé! Miluji příklady, nejlepší způsob, jak učit / učit se. Děkujeme!
  • Potřebujete vědět, jaké " atributy " mají této odpovědi rozumět. ' mají vlastnosti proměnné jako ' celé číslo ', ' array ' nebo ' pouze pro čtení '.
  • To vysvětluje deklaraci, ale úplně ignoruje, co se stane, když jednoduše deklarujete proměnnou pomocí bash.

Odpovědět

abc=ok přiřadí hodnotu proměnné abc. declare abc deklaruje proměnnou nazvanou abc. Tyto dva lze kombinovat jako declare abc=ok.

V bash, stejně jako jiné skořápky, nemusí být proměnné řetězce a pole deklarovány, takže declare není nutné, pokud nechcete předat možnosti, např declare -A abc vytvořit abc asociativní pole nebo declare -r vytvořit proměnnou jen pro čtení. Avšak uvnitř funkce declare dělá rozdíl: způsobí, že proměnná bude pro funkci lokální, což znamená, že hodnota proměnné mimo funkci (pokud existuje) je zachována . (Pokud nepoužíváte declare -g, což činí proměnnou nelokální; to je užitečné v kombinaci s dalšími možnostmi, např. declare -gA k vytvoření globálního asociativní pole ve funkci.) Příklad:

f () { declare a a="a in f" b="b in f" echo "From f: a is $a" echo "From f: b is $b" } a="Initial a" b="Initial b" f echo "After f: a is $a" echo "After f: b is $b" 

Výstup:

From f: a is a in f From f: b is b in f After f: a is Initial a After f: b is b in f 

Další to, co můžete dělat s declare vestavěným, je

Vestavěné declare je pro bash jedinečné. Je silně inspirován a velmi blízký

vestavěnému ksh a bash poskytuje typeset jako synonymum declare pro kompatibilitu. (Nevím, proč to bash neříkal typeset). Existuje třetí synonymum, local. Existuje také export, které je stejné jako declare -x, opět kvůli kompatibilitě (s každým shellem ve stylu Bourne).

Komentáře

  • ano! nejdůležitější je ' a možnost '. p.s. Pokud navrhnu bash, nechám chování " deklarovat " něco udělat v jiné kondici. díky tomu je vše jednoduché.
  • Pěkná odpověď. Další otázka, který z export, local a declare je nejvíce kompatibilní s další skořápky?
  • @ 0xc0de export existuje ve všech variantách sh. local existuje pouze v bash a zsh, declare pouze v bash. typeset existuje v ksh, bash a zsh.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *