abc=ok
przypisuje wartość do zmiennej abc
. declare abc
deklaruje zmienną o nazwie abc
. Oba można połączyć jako declare abc=ok
.
W bash, podobnie jak inne muszli, String i array zmienne nie muszą być zadeklarowane, więc declare
nie jest konieczne, chyba że chcesz przekazać opcje, na przykład declare -A abc
, aby abc
tablicę asocjacyjną lub declare -r
dokonać zmienna tylko do odczytu. Jednak wewnątrz funkcji declare
robi różnicę: powoduje, że zmienna jest lokalna dla funkcji, co oznacza, że wartość zmiennej poza funkcją (jeśli istnieje) jest zachowana. (O ile nie użyjesz declare -g
, co powoduje, że zmienna nie jest lokalna; jest to przydatne w połączeniu z innymi opcjami, np. W declare -gA
celu utworzenia globalnej tablicy asocjacyjnej w funkcji.) Przykład:
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"
Wynik:
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
Inną rzeczą, którą możesz zrobić z declare
wbudowanym programem, jest
declare
Wbudowane jest unikalny dla bash. Jest mocno inspirowany i bardzo zbliżony do typeset
wbudowanego ksh , a bash stanowi typeset
synonim declare
kompatybilności. (Nie wiem, dlaczego bash tak go nie nazwał typeset
). Nie ma trzeciej synonimem local
. Jest również export
, co jest to samo, co declare -x
dla kompatybilności (z każdą powłoką w stylu Bourne'a).
declare
czyni NAME lokalnymi, tak jak wlocal
poleceniu. Ta-g
opcja tłumi to zachowanie. Zobaczyćhelp declare
.