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