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
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říkazulocal
. 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
adeclare
je nejvíce kompatibilní s další skořápky? - @ 0xc0de
export
existuje ve všech variantáchsh
.local
existuje pouze v bash a zsh,declare
pouze v bash.typeset
existuje v ksh, bash a zsh.
declare
nastaví NAME jako místní, stejně jako u příkazulocal
. Možnost-g
toto chování potlačuje. Vizhelp 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 jakodeclare $name=1
.