List = 1 2 3 4 5
for i in $LIST
do
sum=`expr $l_$i + $b`
done
ここで、、、およびはl_1
特定l_2
のl_3
値を持つ変数です。ループ変数を使用してforループからこれらの値にアクセスしようとすると、式はi値を置き換えます。つまり、ステートメントが代わりに実行されます。さまざまな記号の組み合わせを試してみて、括弧も試してみましたが、何も機能しないようです。助けてください! !l_4
l_5
i
(1 + $b)
($l_1 + $b)
$
答え1
l_iまたはリストを文字列として使用せず、代わりに配列を使用してください。
#! /bin/bash
b=11
l=(12 24 46 68 92)
for i in "${l[@]}" ; do
((sum=i+b))
echo $sum
done
答え2
与えられた例を維持するには、2つのアプローチがあります。
- 使用評価:
eval expr \${L_$i} + $b
- 参照変数を使用してください。
REF=L_$i; expr ${!REF} + $b;
前述のように、 chorobはbash
大文字と小文字を区別しますので、変数名に注意してください。
答え3
l_1=10 l_2=20 l_3=30 l_4=40 l_5=50
b=100
for i in 1 2 3 4 5
do echo "$((sum=l_$i+b))"
done
値は$sum
現在シェルに設定されており、通常の方法で拡張または変更できます。これが発生した場合、expr
各反復ごとに親シェルを呼び出す/フォークするために必要なサブシェル/パイプラインオーバーヘッドは必要ありません。
出力:
110
120
130
140
150
または本当に使用したい場合expr
:
for i in 1 2 3 4 5
do sum=`expr "$((l_$i))" + "$b"`
echo "$sum"
done
出力:
110
120
130
140
150
答え4
私はbashの専門家ではありませんが、私の考えはこんな感じです。
#!/bin/bash
b=1
l_1=1
l_2=2
l_3=3
for i in '$l_'{1,2,3}
do
eval dvar="${i}"
sum=$(($dvar + $b))
done
これ私forループの変数は、「$l_1」、「$l_2」などで初期化されます。その後、evalを呼び出すと、次の値が評価されます。私入力するディワルその後、算術式に使用できます。