La matriz Bash declarada en una función no está disponible fuera de la función

La matriz Bash declarada en una función no está disponible fuera de la función

En la terminal bash (v4.3.11), escriba esto:

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

(lo mismo a continuación, solo para que sea más fácil de leer aquí)

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

generará esto (fuera de la función, la matriz pierde su valor, ¿por qué?)

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

Esperaba que apareciera esto:

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

¿Cómo hacer que funcione?

Respuesta1

Desde elpágina de manual:

Cuando se usa en una función, declarar hace que cada nombre sea local, como ocurre con el comando, a menos que se use localla opción.-g

Ejemplo:

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

huellas dactilares

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

información relacionada