W skryptach bash:
tworzymy zmienną, nazywając ją:
abc=ok
lub możemy użyć declare
declare abc=ok
co za różnica?
i dlaczego bash oferuje tak wiele sposobów tworzenia zmiennej?
bash
shell-script
variable
uwielbia wiosnę
źródło
źródło
declare
czyni NAME lokalnymi, tak jak wlocal
poleceniu. Ta-g
opcja tłumi to zachowanie. Zobaczyćhelp declare
.declare
umożliwia tworzenie tablic asocjacyjnych, liczb całkowitych i zmiennych tylko do odczytu. Ponadto rozszerza swoje argumenty, więcdeclare $name=1
możliwe są takie rzeczy .Odpowiedzi:
Od
help -m declare
:Tak,
declare
jest używany do ustawiania wartości zmiennych i atrybutów .Pokażę użycie dwóch atrybutów na bardzo prostym przykładzie:
Z powyższego przykładu uważam, że powinieneś zrozumieć użycie
declare
zmiennej zamiast zmiennej normalnej! Ten rodzajdeclare
acji jest użyteczny w funkcjach, pętlach ze skryptami.Zobacz także Zmienne do wpisywania: deklaruj lub skład
źródło
abc=ok
przypisuje wartość do zmiennejabc
.declare abc
deklaruje zmienną o nazwieabc
. Oba można połączyć jakodeclare 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ładdeclare -A abc
, abyabc
tablicę asocjacyjną lubdeclare -r
dokonać zmienna tylko do odczytu. Jednak wewnątrz funkcjideclare
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żyjeszdeclare -g
, co powoduje, że zmienna nie jest lokalna; jest to przydatne w połączeniu z innymi opcjami, np. Wdeclare -gA
celu utworzenia globalnej tablicy asocjacyjnej w funkcji.) Przykład:Wynik:
Inną rzeczą, którą możesz zrobić z
declare
wbudowanym programem, jestdeclare
Wbudowane jest unikalny dla bash. Jest mocno inspirowany i bardzo zbliżony dotypeset
wbudowanego ksh , a bash stanowitypeset
synonimdeclare
kompatybilności. (Nie wiem, dlaczego bash tak go nie nazwałtypeset
). Nie ma trzeciej synonimemlocal
. Jest równieżexport
, co jest to samo, codeclare -x
dla kompatybilności (z każdą powłoką w stylu Bourne'a).źródło
export
,local
ideclare
jest najbardziej kompatybilny z innymi muszli?export
istnieje we wszystkich wariantachsh
.local
istnieje tylko w bash i zsh,declare
tylko w bash.typeset
istnieje w ksh, bash i zsh.