2016-12-02 5 views
1

Wie kann ich auf den letzten Schlüssel des assoziativen Arrays in bash zugreifen? In diesem Beispiel muss ich "lot" in der Variablen $ last haben. Ich habe einen Weg gefunden, der hier beschrieben wird: How to get the keys and values of an associative array indirectly in Bash?. Aber es funktioniert nicht wie im Beispiel unten erwartet funktionieren und diese Fehler zurück:Wie bekomme ich den letzten Schlüssel eines assoziativen Arrays (Dictionary)

./test.sh: line 9: keys2: ${!$addict[@]}: must use subscript when assigning associative array 

Hier sind die Inhalte dieser test.sh:

declare -A addict=(
    ["foo"]="bar" 
    ["few"]="baz" 
    ["lot"]="pot" 
) 

index_last=$((${#addict[@]} - 1)) 
eval 'declare -A keys2=(${!$addict[@]})' 
last="${keys2[$index_last]}" 

echo "$keys2" 
echo "$index_last" 
echo "$last" 
+6

Die Schlüssel sind ungeordnet, daher macht das Konzept eines "letzten Schlüssels" keinen Sinn. Related: http://stackoverflow.com/q/29161323/2088135 –

+2

Warum verwenden Sie Eval? – 123

Antwort

1

Während Tom Fenech ist absolut richtig sagen die Tasten sind ungeordnet, so das Konzept eines „letzten Schlüssel“ nicht wirklich Sinn machen, können Sie den Fehler, indem Sie die Zeile mit eval zu

vermeiden
keys2=(${!addict[@]}) 

und sehen Sie, was Sie bekommen. Es kann auch erleuchtend sein, auf declare -p addict zu schauen.

Verwandte Themen