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

2

no bash (v4.3.11) terminal digite:

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

(a mesma coisa abaixo, só para ser mais fácil de ler aqui)

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

irá mostrar isso (fora da função a matriz perde seu valor, por quê?)

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

Eu estava esperando isso:

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

como fazer funcionar?

    
por Aquarius Power 12.06.2014 / 09:16

1 resposta

6

Na página de manual :

When used in a function, declare makes each name local, as with the local command, unless the ‘-g’ option is used.

Exemplo:

$ function 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" )'
    
por 12.06.2014 / 09:23