間接変数の評価を行う方法

間接変数の評価を行う方法

単純な値を印刷しようとしていますが、$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

関連情報