
в терминале 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" )