2013-06-13 3 views
2

У меня есть несколько различных ассоциативные массивы в качестве переменных:Можете ли вы назначить ассоциативные массивы переменным в bash?

declare -A FIRST=([hello]=world [foo]=bar) 
declare -A SECOND=([bonjour]=monde [fu]=ba) 

То, что я хотел бы быть в состоянии сделать, это взять третью переменную и присвоить его одному или другому, что-то вроде:

usethisarray=$FIRST 

или, может быть,

declare -a usethisarray=$FIRST 

Но ни один из тех, кто действительно работает. Могу ли я получить уровень косвенности, чтобы указать на ассоциативный массив, в котором я нуждаюсь?

+0

В этом случае чувствительность кусается? '-a' против' -A'? –

+0

Извините, я набрал его здесь неправильно. Я использовал -A в реальном скрипте, но он не работает ... –

ответ

3

bash имеет variable indirection, но это вид боли:

$ declare -A FIRST=([hello]=world [foo]=bar) 
$ alias=FIRST 
$ echo "${!alias[foo]}" 

$ item=${alias}[foo] 
$ echo ${!item} 
bar 
+0

Вот и все, что я искал , И ты прав, это боль от боли. Вздох... –

0

Я думаю, что это то, что вы имеете в виду:

[боб в ~] ARRAY = (один два три)

[боб в ~] эхо $ {ARRAY [*]} один два три

[боб в ~] эхо $ ARRAY [] один []

[боб в ~] эхо $ {ARRAY [2]} три

[боб в ~] ARRAY [3] = четыре

[боб в ~] Эхо $ {ARRAY [*]} один два три четыре

Ссылка ниже:

См ссылки для получения дополнительной информации: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html

+0

Извините и попробуйте эту ссылку. Больше того, что вы просили. http://stackoverflow.com/questions/6660010/bash-how-to-assign-an-associative-array-to-another-variable-name-eg-rename-t –

+0

Текст не совсем то, что я искал поскольку это просто стандартная манипуляция с массивами. Другая ссылка stackoverflow немного ближе, поскольку она говорит о переименовании ассоциированного массива. Мне нужен способ косвенно ссылаться на правильный ассоциированный массив (мой скрипт имеет несколько разных). Я хочу иметь возможность установить переменную для ссылки/копирования правильного, когда это необходимо. –

+0

У этого есть пример в прямой ссылке на массивы: http://stackoverflow.com/questions/11180714/how-to-iterate-over-an-array-using-indirect-reference –

1

Я думаю, что это единственный способ:

#!/bin/bash 
declare -A FIRST=([hello]=world [foo]=bar) 
declare -A SECOND=([bonjour]=monde [fu]=ba) 
declare -A usethisarray 
for key in ${!FIRST[@]}; do 
    usethisarray["$key"]="${FIRST["$key"]}" 
done 
echo ${usethisarray[hello]} 
echo ${usethisarray[foo]} 
Смежные вопросы