带有for循环的无效算术运算符(错误标记为“”)

时间:2018-07-05 05:32:21

标签: bash scripting scripting-language

以下脚本

read n
for (( c=1; c<=$n; c++ ))
do
    echo "HI"
done

给出错误solution.sh: line 2: ((: c<=1: syntax error: invalid arithmetic operator (error token is "")

我正在使用BASH。 for循环有什么问题?

编辑: 我正在使用BASH hackerrank IDE,尽管此代码与该链接中的问题没有直接关系,但出现此错误。

3 个答案:

答案 0 :(得分:0)

我通过在1之后按Ctrl-E重现此错误消息。它看起来像这样:

$ ./1.sh 
1^E
./1.sh: line 3: ((: c<=1: syntax error: invalid arithmetic operator (error token is "")

因此请确保在输入之前没有按任何奇怪的组合键。

答案 1 :(得分:0)

您需要添加此行

#!/bin/bash

位于solution.sh的顶部。

(如果您的 bash 位于其他位置,请在终端上进行

which bash

确定其位置)

答案 2 :(得分:0)

@ picasso13只是一个疯狂的猜测,它引起了我(当我尝试使用从输入构造的数组进行循环时,会产生相同的神秘错误)。 hackerRank上有2个输入(第一个实际上是第二个的大小)。当我放弃第一个并确保我的迭代正在处理数字列表时,它解决了我的问题:

freq=()
for i in {1..100}; do
    freq[$i]=0
done    
read ignore
read inputs
IFS=', ' eval 'array=($inputs)'


for i in "${array[@]}"; do 
    (( freq[$i]++ )) 
done
for i in "${!freq[@]}"; do
    if [[ freq[$i] -eq 1 ]]; then
        echo $i
    fi
done

如果您将我的read ignore注释掉,则会重现该问题。