2012-04-11 8 views
1

Aus irgendeinem Grund kann ich nicht auf die Array-Schlüssel mit dem Ausrufezeichen Syntax für den Zugriff auf:Zugriff auf bash Array-Schlüssel (mac)

declare -a sites 
sites=(["fr"]="frederick" ["an"]="annapolis") 

for i in "${!sites[@]}" 
    do 
    echo "key: $i " 
    done 

Dieses Just echo "Schlüssel: 0"

Was bin Ich mache hier falsch?

Auch möchte ich den Wert hinzufügen.

So würde das unser Put sein:

Schlüssel: fr, Wert: frederick

Antwort

1

Das Problem ist declare -a.

Wie auf der man-Seite sollte es declare -A sein.

declare [-aAfFgilrtux] [-p] [name[=value] ...] 
    ... 
    -a  Each name is an indexed array variable (see Arrays above). 
    -A  Each name is an associative array variable (see Arrays above). 

Versuchen Sie stattdessen:

declare -A sites 
sites=(["fr"]="frederick" ["an"]="annapolis") 

for i in "${!sites[@]}" 
    do 
    echo "key: $i, value: ${sites[$i]}" 
    done 
+0

das war, was ich zuerst versucht. Aber wenn ich das Skript, das Sie veröffentlicht haben, ausführen, bekomme ich diese Ausgabe: Zeile 3: deklarieren: -A: ungültige Option deklarieren: Verwendung: declare [-afFirtx] [-p] [Name [= Wert] ...] Schlüssel : 0, Wert: annapolis – jessh

+0

Dies könnte auch hilfreich sein: bash --version GNU bash, version 3.2.48 (1) – jessh

+6

Assoziative Arrays erfordern bash> = 4.0. Siehe http://tis.edu/php/chet/bash/NEWS. Und die Tatsache, dass Ihre man-Seiten für bash 3.2 nichts über assoziative Arrays sagen. ;-) – Mikel

Verwandte Themen