この質問は何度も要求されましたが、どの方法も効果がありませんでした。変数から配列名を取得した配列を動的にしたいと思います。それでは配列から始めましょう。
#!/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]}