변수 세트에 대한 For 루프

변수 세트에 대한 For 루프

로 잘못 표현된 변수 집합에 대해 for 루프를 실행하고 싶습니다 {A,B}. 다음으로 내 스크립트는 다음과 같습니다.

#!/bin/sh
for {A,B} in {1,2}  {3,4} {5,6} {7,8}
do
echo A=$A B=$B
C=$(($A+$B))
echo Sum,C = $C
done

어떻게 수정할 수 있나요?

답변1

나는 사용할 것이다

while read A B
do echo A=$A B=$B
    C=$(( $A + $B ))
    echo Sum,C = $C
done<<EOF
1 2
3 4
5 6
7 8
EOF

더 복잡한 작업에는 dc가 좋습니다(역방향 표기법이 개선되었습니다!)

C=$(echo "$A $B +pq"|dc)

답변2

set   1 2 3 4 5 6 7 8
while [ "$#" -gt 0 ]
do    C="$(($1+$2))"
      shift 2
done

for이런 방식으로 두 작업을 동시에 할당하는 것은 허용되지 않습니다. 따라서 배열을 가져와 shift원하는 간격으로 이동하십시오. 위에서 했던 것처럼 표준 쉘 배열을 사용하는 경우 $@항상 처음 두 개의 위치 $1합계를 사용하게 됩니다 $2. 일종의 확장 배열을 사용하는 경우 쉘에 따라 ${array[0]}and ${array[1]}또는 ${array[1]}and 중 하나를 사용하게 됩니다.${array[2]}

또한 for루프를 사용하면 일종의 구분 기호를 각 인수에 인코딩할 수 있습니다.

for x in 1+2 3+4 5+6 7+8
do  C="$(($x))"
done

...실제로 여기서는 꽤 잘 작동하지만 일반적으로 깔끔하게 수행되지는 않습니다.

답변3

내가 할 수 있는 가능한 해결 방법은 다음과 같습니다(배열 아이디어를 제공한 @mikeserv에게 감사드립니다).

array=('1 2' '3 4' '5 6' '7 8')

for x in "${array[@]}"
do

A=`echo $x | awk '{print $1}'`
B=`echo $x | awk '{print $2}'`
echo A=$A B=$B

C=$(($A+$B))
echo Sum,C = $C

done

이것이 더 단순화될 수 있는지 제안하십시오.

관련 정보