In einer Funktion deklariertes Bash-Array ist außerhalb der Funktion nicht verfügbar

In einer Funktion deklariertes Bash-Array ist außerhalb der Funktion nicht verfügbar

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 localBefehl, sofern die -gOption 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" )

verwandte Informationen