간단한 값을 인쇄하려고 하는데 $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