Я понимаю, что вам нужно. Я тоже хотел то же самое в течение нескольких недель.
Я был смущен, использовать ли Python или Bash.
Наконец, исследуя что-то еще, я нашел это
Bash: как назначить ассоциативный массив другому имени переменной (например, переименовать переменную)?
Здесь я узнал, как назначить некоторую строку и использовать ее позже в качестве команды.
Затем с помощью моего творчества я нашел решение вашей проблемы, как показано ниже: -
#!/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
ВЫВОД: -
1 - объявить -A ЧЕЛОВЕКА = '([FNAME] = "Джон" [LNAME] = "Андрей")'
Declare -A PERSON = '([FNAME] = "Джон" [LNAME] = "Andrew")'
ВНУТРЕННЕЕ ИМЯ - Джон
INSIDE LNAME - Эндрю
2 - объявить -A ЧЕЛОВЕКА = '([FNAME] = "Elen" [LNAME] = "Murray")'
Declare -A PERSON = '([FNAME] = "Elen" [LNAME] = "Murray")'
INSIDE FNAME - Elen
INSIDE LNAME - Мюррей
Проблема на самом деле с многомерными массивами в bash, особенно в вашем подходе, заключается в том, что вы присваиваете значения массива PERSON элементу массива PERSONS [1], который преобразуется в список, а не в ассоциированный массив при его назначении.
И поэтому он больше не будет воспринимать его как 2 элемента массива, поскольку вы не сохраняете информацию о структуре данных массива в своем значении.
Итак, я нашел этот взлом достаточным с одним ограничением, которое вам придется делать каждый раз, когда вы хотите сохранить / получить значения. Но это решит твою цель.