
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
local
la 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" )