간접변수 평가를 수행하는 방법

간접변수 평가를 수행하는 방법

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

관련 정보