Это работает так, как и ожидалось, вы просто пропустили определение еще одного уровня косвенности для доступа к значению,
declare -A first=()
first[hello]=world
first[foo]=bar
alias=first
echo "${!alias[foo]}"
Приведенный выше результат, очевидно, будет пустым, так как другой ответ указывает на то, что ссылка на ключ массива еще не создана. Теперь определите item
, чтобы ввести второй уровень косвенной ссылки, чтобы указать на фактическое значение key
.
item=${alias}[foo]
echo "${!item}"
foo
Теперь наведите пункт на следующую клавишу hello
item=${alias}[hello]
echo "${!item}"
world
Или более подробный пример: запустить цикл над ключами ассоциативного массива
# Loop over the keys of the array, 'item' would contain 'hello', 'foo'
for item in "${!first[@]}"; do
# Create a second-level indirect reference to point to the key value
# "$item" contains the key name
iref=${alias}["$item"]
# Access the value from the reference created
echo "${!iref}"
done