単純な値を印刷しようとしていますが、$AR1_p1
変数は$i
評価されません。
for i in 1 2 3 4
do
AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p3=25
echo $AR1_p$i
done
動的接続と同じです。この問題を解決する方法に関する提案はありますか? 。
答え1
あなたはそれを使用することができますbash間接参照その理由は次のとおりです。
AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p4=25
for i in 1 2 3 4
do
VARNAME="AR1_p${i}"
echo "${!VARNAME}"
done
答え2
提案された説明に従って配列を使用する必要があります。
#!/bin/bash
AR1_p=(22 23 24 25)
for i in {1..4}
do
echo "${AR1_p[$i-1]}"
done
答え3
このサイクルが機能します。それ以外の場合は配列を使用してください。
$ for i in 1 2 3 4; do AR1_p1=22; AR1_p2=23; AR1_p3=24; AR1_p4=25; echo $((AR1_p$i)); done
22
23
24
25
答え4
POSIX的に:
for i in 1 2 3 4
do AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p4=25
echo "$((AR1_p$i))"
done
少し混乱しやすいかもしれません。
for i in 1 2 3 4
do echo "$((AR1_p$i=i+21))"
done
それでもPOSIXlyですが、よりスマートです。
i=0 n=21 l=4
while [ "$l" -ge "$((i+=1))" ]
do echo "$((AR1_p$i=i+n))"
done