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