Bashは動的配列名を使用できません(しかし理解しています)。

Bashは動的配列名を使用できません(しかし理解しています)。

Bashでスクリプトを作成していて、ループ内で配列を宣言する必要があるため、次のようにします。

variable=suffix
declare -a prefix_$variable='(item1 item2)'

これは "prefix_$variable" を使用できるようにする必要がありますが、使用できないため失敗します。

しかし、宣言はうまくいきます。宣言後にecho ${prefix_sufix[@]}アイテムをエコーするからです。唯一の問題は、配列名を直接作成する必要があることです。

この例を見てください。

mint@ubuntu ~ $ variable=suffix
mint@ubuntu ~ $ declare -a prefix_$variable='(item1 item2)'
mint@ubuntu ~ $ echo ${prefix_suffix[@]}
item1 item2
mint@ubuntu ~ $ echo ${prefix_$variable[@]}
bash: ${prefix_$variable[@]}: bad substitution
mint@ubuntu ~ $ prefix_$variable[2]='none'
bash: prefix_suffix[2]=none: command not found

エラーメッセージに「prefix_suffix」と書かれているため、変数名を理解していますが、正しく実行されていないことが明らかにわかるので、これは意味がありません。

どうなりますか?この問題をどのように解決できますか?

結果に何の変更もなく最後の部分を、、、、"prefix_${variable}"[2]='none'prefix_${variable}[2]='none'書き直してみました。$(prefix_$variable[2]='none')

ベストアンサー1

解決策はnamerefを使用することです。

$ variable=suffix
$ declare -n shortname=prefix_$variable
$ declare -a prefix_$variable='(item1 item2)'
$ echo ${prefix_suffix[@]}
item1 item2
$ echo "${shortname[@]}"
item1 item2
$ shortname[2]='none'
$ echo ${prefix_suffix[@]}
item1 item2 none

おすすめ記事