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
Hinweismy_array
Kann Werte mit Leerzeichen enthalten!
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...