为什么在bash for循环中出错?

时间:2015-06-11 15:25:28

标签: bash shell for-loop

我正在尝试使用for循环运行以下代码,但我收到语法错误。请帮忙。

输入格式: 输入的第一行包含一个整数N,表示整数的数量。下一行包含N个以空格分隔的整数,这些整数形成数组A.

read n
sum=0

for (( i=1; i<= "$n" ; i++ ))
do
        read val
        sum ^= $val;
done

echo $sum

以下是错误消息

solution.sh: line 4: ((: i<= 1
 : syntax error: invalid arithmetic operator (error token is "
 ")

2 个答案:

答案 0 :(得分:1)

printf "%s" "$n" | hexdump -C显示CR包含在输入中而不是脚本文件中,因此在脚本上运行dos2unix无论如何都不会有帮助。摆脱它的一个简单方法是设置IFS=$'\r' 然后,循环中的read val不适合读取空格分隔的整数,因为read一次读取整行。但是对于按位排除ORing那些 N个空格分隔的整数的任务,我们不需要显式循环 - 我们可以用所需的运算符替换所有空格并评估结果。

#!/bin/bash
IFS=$'\r'
read n
read a
((sum = ${a// /^}))
echo $sum

答案 1 :(得分:0)

这会奏效。但是你应该在里面输入一些帮助信息:

#!/bin/bash

read n
sum=0

for (( i=1; i<=n; i++ ))
do
        read val
        ((sum^=val))
done
echo $sum