配列への間接参照を行うためのクリーンな方法 (eval コマンドなし) を探しています。ここに私が欲しいもののより正確な説明があります:
function valueof {
echo "indirection1 \$$1=${!1}"
eval "echo indirection2 \\\$$1=\${$1[@]}" # Untill this step its fine.
# My final objective is to do this (but eval is not a very sexy solution) :
for i in $(eval "echo \${$1[@]}") ; do
echo $i
done
# Here is the "problem", ie. "bad substitution"
echo "indirection3 \$$1=${!1[@]}"
# "1[@]" is evaluated first i guess?
}
次の値の calls を使用:
a=("a" "aa" "aaa")
b=("b" "bb" "bbb")
valueof a
valueof b
私が持っている出力は次のとおりです。
indirection1 $a=a
indirection2 $a=a aa aaa
a
aa
aaa
indirection1 $b=b
indirection2 $b=b bb bbb
b
bb
bbb
stderr について:
prog.sh: line 10: indirection3 $1=${!1[@]}: bad substitution
prog.sh: line 10: indirection3 $1=${!1[@]}: bad substitution
この質問に対する回答/コメントをありがとう:)