Мне нужно выполнить одни и те же операции с несколькими разными ассоциативными массивами в bash. Таким образом, я хотел бы использовать функции, чтобы избежать дублирования кода. Однако у меня возникают проблемы с доступом к данным внутри функции. Вот минималистичный пример:
#!/bin/bash
# this function works fine
function setValue() {
# $1 array name
# $2 array index
# $3 new value
declare -g $1[$2]=$3
}
# this function doesn't
function echoValue() {
# $1 array name
# $2 array index
echo ${$1[$2]}
}
declare -A arr1=( [v1]=12 [v2]=31 )
setValue arr1 v1 55
echoValue arr1 v2
Я пробовал ${$1[$2]}, ${!1[!2]} и все другие возможные комбинации, но ни одна из них не работает. Как я могу получить доступ к этим значениям с ОБА именем массива и индексом, которые являются динамическими, а не жестко закодированными? Буду признателен за любой совет здесь.
echo ${$1[$2]}
наlocal x="$1[@]"; echo "${!x[$2]}"
. См.: Как использовать переменную как часть имени массива - person Cyrus   schedule 15.08.2018nm=$1; echo ${!nm[$2]}
,nm=$1; echo ${!nm[!2]}
иnm=$1; idx=$2 echo ${!nm[!idx]}
, которые больше не выдают ошибку, а возвращают пустую переменную.nm=$1; echo ${$nm[$2]}
по-прежнему делает неудачную замену - person Hanno   schedule 15.08.2018