bash if语句在控制台中给出语法错误,但工作正常
使用bash if语句检查两个不同数组中的两个数字是否相等。似乎在语句的计算结果应该为false(即两个数字不相等)的情况下,console会显示语法错误 有关守则: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 程序仍在运行,并给出了所需的结果,但
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")