以下のコードは私の問題を示しています。最初は過度に単純化したようです。
#!/bin/bash
dogLover=1
catLover=2
for ii in dog cat
do
petLover=${ii}Lover
echo (evaluate $petLover)
done
犬や猫ではなく、1と2の値を返すコードが欲しいです。おそらくこれは簡単ですが、オンラインで行う方法がわからないようです。
私にとって本当に必要なのは、matlabの「eval」コマンドに対応するbashです。
答え1
Bourne または POSIX シェルで逆参照するには、次のようにします。
dogLover=1
ii=dog
eval "petLover=\${${ii}Lover}"
echo "$petLover"
答え2
StephaneChazelasが言ったことは正確で、evalを使うことができますが、eval
一般的に多くの人はevalを遠ざけようとしています。
これには「間接拡張」を使用できます。他の変数の名前を含む変数があるときに使用されます。これを使用するには、変数の前に中!
かっこを付けます。
たとえば、
# var=foobar
# varname=var
# echo "${!varname}"
foobar
これの欠点は、POSIXではないことです。これは、すべてのシェルで利用できるという保証がないことを意味します。ただし、お客様の質問にタグが含まれているため、bash
これは許可される場合があります。
答え3
forループでは、変数の代わりに「dog」テキストと「cat」テキストを使用します。
使用
for ii in $dog $cat ; do
これは次のように拡張されます。
for ii in 1 2 ; do