間接展開によって取得した配列内のすべての値を展開しようとしています:
> my_array=(coconut banana)
> echo "${my_array[@]}"
coconut banana
> my_array_name=my_array
> echo ${!my_array_name}
coconut
> echo "${!my_array_name[@]}"
0
正しいコマンドの入力方法がわからないため、最後のコマンドで「配列キーのリスト」を誤って使用していますか?
私は取得したい:
coconut banana
おそらく、いくつかの醜いハックに頼ることなくeval
.. 1つのサックハックの例:
> echo \${$my_array_name[@]}
${my_array[@]}
> eval echo \${$my_array_name[@]}
coconut banana
ノート
my_array
スペースを含む値を含めることができます!
編集
私が書いている関数では、my_array_name は "$1" で設定されているため、文字どおりには使用できません。
に似ています: https://unix.stackexchange.com/questions/20171/indirect-return-of-all-elements-in-an-arrayeval
しかし、スクリプトが持つ厄介な影響から保護するために使用を避ける必要があります環境はちょうどいいタイミングで「ハッキング」されました...