ループからループ変数にアクセスする

ループからループ変数にアクセスする

これは私のスクリプトです。

load_1=15231
load_2=20547
load_3=24561
load_4=22874
f4=434

   sum_1=`expr $load_1 + $f4`
   sum_2=`expr $load_2 + $f4`
   sum_3=`expr $load_3 + $f4`
   sum_4=`expr $load_4 + $f4`

   min=$sum_1
   LIST1="1 2 3 4"
   for x in $LIST1
    do
     if [ $sum_$x -lt $min ]
      then
       min=$sum_$x
       f3=$x
     fi
    done
   echo $min
   echo $f3

次のコマンドを使用してスクリプトを実行したときの出力は次のとおりですbash -x

+ load_1=15231
+ load_2=20547
+ load_3=24561
+ load_4=22874
+ f4=434
++ expr 15231 + 434
+ sum_1=15665
++ expr 20547 + 434
+ sum_2=20981
++ expr 24561 + 434
+ sum_3=24995
++ expr 22874 + 434
+ sum_4=23308
+ min=15665
+ LIST1='1 2 3 4'
+ for x in '$LIST1'
+ [[ 1 -lt 15665 ]]
+ min=1
+ f3=1
+ for x in '$LIST1'
+ [[ 2 -lt 1 ]]
+ for x in '$LIST1'
+ [[ 3 -lt 1 ]]
+ for x in '$LIST1'
+ [[ 4 -lt 1 ]]
+ echo 1
1
+ echo 1
1

ループ変数 "x"の値をテスト条件変数に置き換え、次の値sum_x$sum_xテスト条件に割り当てる必要があります。しかし、出力からわかるように、 'x'値は条件に直接適用されます。私は引用符と括弧のさまざまな組み合わせを試しましたが、何も効果がありませんでした。助けてください! !

ベストアンサー1

$sum_$xあなたの質問は次のリンクとして解釈されます。$sum_$x

~$ for x in $LIST1;  do   echo $sum_$x;  done
1
2
3
4

したがって、あなたの質問です。あなたが望むものは使用することです

~$ for x in $LIST1;  do   echo $((sum_$x));  done
15665
20981
24995
23308

おすすめ記事