bash if语句在控制台中给出语法错误,但工作正常

bash if语句在控制台中给出语法错误,但工作正常,bash,shell,if-statement,Bash,Shell,If Statement,使用bash if语句检查两个不同数组中的两个数字是否相等。似乎在语句的计算结果应该为false(即两个数字不相等)的情况下,console会显示语法错误 有关守则: for((i=0;i<=passes256Size;i+=1));do if((${passes212[$i]}==${passes256[$i]})); then passesBoth[$i]=${passes256[$i]} fi done 程序仍在运行,并给出了所需的结果,但

使用bash if语句检查两个不同数组中的两个数字是否相等。似乎在语句的计算结果应该为false(即两个数字不相等)的情况下,console会显示语法错误

有关守则:

for((i=0;i<=passes256Size;i+=1));do
    if((${passes212[$i]}==${passes256[$i]})); then
        passesBoth[$i]=${passes256[$i]}     
    fi
done

程序仍在运行,并给出了所需的结果,但是我在运行时遇到了这两个错误。有没有办法解决这个问题?

您正在尝试使用bash的算术上下文测试两个数字是否相等。让我们简化并观察错误消息:

$ ((2==)) && echo yes
bash: ((: 2==: syntax error: operand expected (error token is "==")
$ ((==2)) && echo yes
bash: ((: ==2: syntax error: operand expected (error token is "==2")
以上内容与您观察到的错误消息非常吻合

当然,以下各项工作与预期相符:

$ ((2==2)) && echo yes
yes
根据您观察到的消息,似乎
${passes212[$i]}
${passes256[$i]}
的值为空

让我们再试一次,但使用带或不带赋值的变量:

$ x=2; y=""; (($x==$y)) && echo yes
bash: ((: 2==: syntax error: operand expected (error token is "==")
$ x=""; y=2; (($x==$y)) && echo yes
bash: ((: ==2: syntax error: operand expected (error token is "==2")
如果变量的值为空,则当根本不存在变量时,我们会收到与上面相同的错误消息。这似乎证实了我们的诊断


解决方案是确保两个数组都有赋值。

尝试:
if(${passes212[$i]}==${passes256[$i]}))
。注意空格。尝试使用空格时,我仍然会得到相同的错误,但是错误现在包括==周围的额外间距。这是我的问题,数组的大小不同,当特定元素与空元素匹配时,它会显示错误。非常感谢。
$ x=2; y=""; (($x==$y)) && echo yes
bash: ((: 2==: syntax error: operand expected (error token is "==")
$ x=""; y=2; (($x==$y)) && echo yes
bash: ((: ==2: syntax error: operand expected (error token is "==2")