Bashで動的に配列を作成し、変数を配列名として使用します。

Bashで動的に配列を作成し、変数を配列名として使用します。

この質問は何度も要求されましたが、どの方法も効果がありませんでした。変数から配列名を取得した配列を動的にしたいと思います。それでは配列から始めましょう。

#!/bin/bash
i="aaa"
eval ${i}=("1")

明らかにする

./1.sh: line 3: syntax error near unexpected token `('
./1.sh: line 3: `eval ${i}=("1")'

次の結果:

$(eval ${i})=('1')
$(eval echo ${i})=('1')
$(eval "echo ${i}")=('1')

すべてを評価したくなく、配列名だけを評価したいと思います。可能であれば、evalを完全に使用することを避けたいと思います。

ベストアンサー1

eval引数として文字列が必要です。引用符なしでは使用できず、(シェルで特別な意味を持ちます。

i=aaa
eval "$i=(1 2)"  # Use a string, $i will expand in double quotes.
echo ${aaa[1]}

declare代わりに、typeset次のものを使用することもできますeval

declare -a $i='(1 2)'

それでも括弧とスペースを引用する必要があります。

これを完全に防ぐには、eval値を1つずつ割り当てるだけです。

#! /bin/bash
name=aaa
values=(1 2)
for ((i=0; i<${#values[@]}; ++i)) ; do
    read "$name[$i]" <<< "${values[i]}"
done
echo ${aaa[1]}

おすすめ記事