Ich verstehe, was du brauchst. Das wollte ich auch seit Wochen. Ich war verwirrt, ob ich Python oder Bash verwenden soll. Schließlich, als ich etwas anderes erkundete, fand ich dies Bash: Wie weise ich einem assoziativen Array einen anderen Variablennamen zu (z. B. benenne die Variable um)?
Hier habe ich gelernt, wie Sie einige Zeichenfolgen zuweisen und sie später als Befehl verwenden können. Dann habe ich mit meiner Kreativität eine Lösung für dein Problem gefunden:
#!/bin/bash
declare -A PERSONS
declare -A PERSON
PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
string=$(declare -p PERSON)
#printf "${string}\n"
PERSONS["1"]=${string}
#echo ${PERSONS["1"]}
PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
string=$(declare -p PERSON)
#printf "${string}\n"
PERSONS["2"]=${string}
#echo ${PERSONS["2"]}
for KEY in "${!PERSONS[@]}"; do
printf "$KEY - ${PERSONS["$KEY"]}\n"
eval "${PERSONS["$KEY"]}"
printf "${PERSONS["$KEY"]}\n"
for KEY in "${!PERSON[@]}"; do
printf "INSIDE $KEY - ${PERSON["$KEY"]}\n"
done
done
AUSGABE:-
1 - declare -A PERSON='([FNAME]="John" [LNAME]="Andrew" )'
declare -A PERSON='([FNAME]="John" [LNAME]="Andrew" )'
INSIDE FNAME - John
INSIDE LNAME - Andrew
2 - declare -A PERSON='([FNAME]="Elen" [LNAME]="Murray" )'
declare -A PERSON='([FNAME]="Elen" [LNAME]="Murray" )'
INSIDE FNAME - Elen
INSIDE LNAME - Murray
Das Problem besteht tatsächlich bei mehrdimensionalen Arrays in Bash und speziell bei deinem Ansatz ist, dass du die Werte des PERSON-Arrays dem Array-Element PERSONS[1] zuweist, das in eine Liste umgewandelt wird und nicht in ein assoziatives Array, wenn du es zuweist. Deshalb wird es nicht mehr als 2 Elemente eines Arrays betrachten, da du keine Informationen über die Datenstruktur des Arrays in deinem Wert behältst. Also habe ich diesen Hack gefunden, der mit nur einer Einschränkung ausreicht, dass du dies jedes Mal machen musst, wenn du Werte speichern/abrufen möchtest. Aber es wird deinen Zweck erfüllen.