List = 1 2 3 4 5
for i in $LIST
do
sum=`expr $l_$i + $b`
done
여기서 l_1
, l_2
, l_3
및 l_4
는 l_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
주어진 예를 유지하려면 두 가지 접근 방식이 있습니다.
- 사용 평가:
eval expr \${L_$i} + $b
- 참조 변수를 사용하십시오.
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을 호출하면 다음 값이 평가됩니다.나입력하다디왈그런 다음 산술 표현식에 사용할 수 있습니다.