루프 내의 루프 변수에 액세스

루프 내의 루프 변수에 액세스
List = 1 2 3 4 5
for i in $LIST
do
sum=`expr $l_$i + $b`
done

여기서 l_1, l_2, l_3l_4l_5특정 값을 갖는 변수입니다. 루프 변수를 사용하여 for 루프에서 이러한 값에 액세스하려고 하면 i표현식에서 i 값이 대체됩니다. 즉, 명령문이 (1 + $b)대신 실행됩니다 ($l_1 + $b). 다양한 $기호 조합을 시도 하고 괄호도 사용해 보았지만 아무것도 작동하지 않는 것 같습니다. 도와주세요! !

답변1

l_i 또는 목록을 문자열로 사용하지 말고 대신 배열을 사용하십시오.

#! /bin/bash
b=11
l=(12 24 46 68 92)
for i in "${l[@]}" ; do
     ((sum=i+b))
     echo $sum
done

답변2

주어진 예를 유지하려면 두 가지 접근 방식이 있습니다.

  1. 사용 평가:eval expr \${L_$i} + $b
  2. 참조 변수를 사용하십시오.REF=L_$i; expr ${!REF} + $b;

언급한 대로 choroba는 bash대소문자를 구분하므로 변수 이름에 주의하세요.

답변3

l_1=10 l_2=20 l_3=30 l_4=40 l_5=50
b=100
for i  in    1 2 3 4 5
do     echo "$((sum=l_$i+b))"
done

값은 $sum현재 셸에 설정되어 있으며 일반적인 방법으로 확장하거나 수정할 수 있습니다. 이런 일이 발생하면 expr각 반복마다 상위 셸을 호출/포크하는 데 필요한 하위 셸/파이프라인 오버헤드가 필요하지 않습니다 .

산출:

110
120
130
140
150

또는 정말로 사용하고 싶다면 expr:

for i  in  1 2 3 4 5
do     sum=`expr "$((l_$i))" + "$b"`
       echo "$sum"
done

산출:

110
120
130
140
150

답변4

저는 bash 전문가는 아니지만 제 생각은 이렇습니다.

#!/bin/bash
 b=1
 l_1=1
 l_2=2
 l_3=3
 for i in '$l_'{1,2,3}
 do
   eval dvar="${i}"
   sum=$(($dvar + $b))
 done

이것for 루프의 변수는 "$l_1", "$l_2" 등으로 초기화됩니다. 그런 다음 eval을 호출하면 다음 값이 평가됩니다.입력하다디왈그런 다음 산술 표현식에 사용할 수 있습니다.

관련 정보