
Geben Sie im Bash-Terminal (v4.3.11) Folgendes ein:
function FUNCtst() { declare -A astr; astr=([a]="1k" [b]="2k" ); declare -p astr; };FUNCtst;declare -p astr
(dasselbe weiter unten, nur damit es hier leichter zu lesen ist)
function FUNCtst() {
declare -A astr;
astr=([a]="1k" [b]="2k" );
declare -p astr;
};
FUNCtst;
declare -p astr
gibt dies aus (außerhalb der Funktion verliert das Array seinen Wert, warum?)
declare -A astr='([a]="1k" [b]="2k" )'
bash: declare: astr: not found
Ich habe folgende Ausgabe erwartet:
declare -A astr='([a]="1k" [b]="2k" )'
declare -A astr='([a]="1k" [b]="2k" )'
wie lässt es funktionieren?
Antwort1
Von demmanpage:
Bei Verwendung in einer Funktion macht „declare“ jeden Namen lokal, wie beim
local
Befehl, sofern die-g
Option nicht verwendet wird.
Beispiel:
FUNCtst() {
declare -gA astr
astr=([a]="1k" [b]="2k" )
declare -p astr
}
FUNCtst
declare -p astr
druckt
declare -A astr=([a]="1k" [b]="2k" )
declare -A astr=([a]="1k" [b]="2k" )