Массив Bash, объявленный в функции, недоступен за пределами функции

Массив Bash, объявленный в функции, недоступен за пределами функции

в терминале bash (v4.3.11) введите следующее:

function FUNCtst() { declare -A astr; astr=([a]="1k" [b]="2k" ); declare -p astr; };FUNCtst;declare -p astr

(то же самое ниже, просто чтобы было легче читать)

function FUNCtst() { 
  declare -A astr; 
  astr=([a]="1k" [b]="2k" ); 
  declare -p astr; 
};
FUNCtst;
declare -p astr

выведет это (вне функции массив теряет свое значение, почему?)

declare -A astr='([a]="1k" [b]="2k" )'
bash: declare: astr: not found

Я ожидал увидеть следующее:

declare -A astr='([a]="1k" [b]="2k" )'
declare -A astr='([a]="1k" [b]="2k" )'

как заставить это работать?

решение1

Изстраница руководства:

При использовании в функции, declare делает каждое имя локальным, как в localкоманде, если не -gиспользуется соответствующая опция.

Пример:

FUNCtst() { 
    declare -gA astr
    astr=([a]="1k" [b]="2k" )
    declare -p astr
}
FUNCtst
declare -p astr

отпечатки

declare -A astr=([a]="1k" [b]="2k" )
declare -A astr=([a]="1k" [b]="2k" )

Связанный контент