
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
Quando usado em uma função, declare torna cada nome local, como acontece com o
local
comando, a menos que a-g
opçã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" )