A matriz Bash declarada em uma função não está disponível fora da função

A matriz Bash declarada em uma função não está disponível fora da função

no terminal bash (v4.3.11) digite isto:

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

(a mesma coisa abaixo, só para facilitar a leitura aqui)

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

irá gerar isso (fora da função o array perde seu valor, por quê?)

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

Eu esperava que produzisse isto:

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

Como fazer dar certo?

Responder1

Depágina de manual:

Quando usado em uma função, declare torna cada nome local, como acontece com o localcomando, a menos que a -gopção seja usada.

Exemplo:

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

estampas

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

informação relacionada