abc=okprzypisuje wartość do zmiennej abc. declare abcdeklaruje 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 declarenie jest konieczne, chyba że chcesz przekazać opcje, na przykład declare -A abc, aby abctablicę asocjacyjną lub declare -rdokonać zmienna tylko do odczytu. Jednak wewnątrz funkcji declarerobi 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 -gAcelu 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 declarewbudowanym programem, jest
declareWbudowane jest unikalny dla bash. Jest mocno inspirowany i bardzo zbliżony do typesetwbudowanego ksh , a bash stanowi typesetsynonim declarekompatybilnoś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 -xdla kompatybilności (z każdą powłoką w stylu Bourne'a).
declareczyni NAME lokalnymi, tak jak wlocalpoleceniu. Ta-gopcja tłumi to zachowanie. Zobaczyćhelp declare.