如何进行间接变量评估

如何进行间接变量评估

我正在尝试打印一个简单的值,$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

POSIXly:

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

相关内容