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按照您想要的时间间隔将其移走。如果您像我上面那样使用标准 shell$@数组,那么您将始终使用前两个位置$1$2。如果您使用某种扩展数组,那么您将使用${array[0]}and${array[1]}${array[1]}and ,${array[2]}具体取决于您的 shell。

另外,通过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

建议是否可以进一步简化。

相关内容