Ekspansja tablic bashowych za pomocą zmiennej rozbudowy kierunku
Próbuję rozwinąć wszystkie wartości w tablicy, do której dochodzę poprzez rozszerzanie pośrednie:
> my_array=(coconut banana)
> echo "${my_array[@]}"
coconut banana
> my_array_name=my_array
> echo ${!my_array_name}
coconut
> echo "${!my_array_name[@]}"
0
Błędnie używam „Lista kluczy tablicy” w ostatnim poleceniu, ponieważ nie wiem, jak wpisać właściwą komendę?
Chciałbym dostać:
coconut banana
być może bez uciekania się do jakiegoś brzydkiegoeval
hack .. Przykład jednego włamania:
> echo \${$my_array_name[@]}
${my_array[@]}
> eval echo \${$my_array_name[@]}
coconut banana
Uwagamy_array
może zawierać wartości ze spacjami!
W funkcji, którą piszę, moja_nazwa_array jest ustawiana przez „$ 1”, więc nie mogę jej użyć dosłownie.
Podobny do:https://unix.stackexchange.com/questions/20171/indirect-return-of-all-elements-in-an-array ale muszę unikać używaniaeval
aby chronić się przed paskudnymi skutkami, jakie miałby skrypt, gdyby środowisko zostało „zhakowane”tylko w odpowiednim czasie...