Bash-Array-Erweiterung mit variabler Indirektionserweiterung

Ich versuche, alle Werte in einem Array zu erweitern, das ich durch indirekte Erweiterung erreiche:

> my_array=(coconut banana)
> echo "${my_array[@]}" 
coconut banana
> my_array_name=my_array
> echo ${!my_array_name}
coconut
> echo "${!my_array_name[@]}"
0

Ich verwende fälschlicherweise "Liste der Array-Schlüssel" im letzten Befehl, weil ich nicht weiß, wie ich den richtigen Befehl eingeben soll.

Ich hätte gern:

coconut banana

möglicherweise, ohne auf etwas Hässliches zurückzugreifeneval Hack .. Beispiel für einen Saugen Hack:

> echo \${$my_array_name[@]}
${my_array[@]}
> eval echo \${$my_array_name[@]}
coconut banana
Hinweis

my_array Kann Werte mit Leerzeichen enthalten!

BEARBEITEN

In der Funktion, die ich schreibe, wird my_array_name durch "$ 1" festgelegt, daher kann ich das nicht wörtlich verwenden.

Ähnlich zu:https://unix.stackexchange.com/questions/20171/indirect-return-of-all-elements-in-an-array aber ich muss vermeiden, zu verwendeneval zum Schutz vor den unangenehmen Effekten, die das Skript haben würde, wenn die Umgebung "gehackt" würdegenau zur richtigen Zeit...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage