Поскольку Bash 4.3, declare
имеет флаг -n
для определения ссылок (это слабо эквивалентно ссылкам в C ++). Этот флаг значительно упрощает вашу проблему:
fullname() {
declare -nl pointer="$1"
for i in "${!pointer[@]}"
do
echo "${pointer[$i]} $i"
done
}
Будет безопасно, если у вас есть пробелы или смешные символы в ключах вашего хэша (в отличие от принятого ответа).