2017-05-03 57 views
0

我想比较一个立即在界限,我不明白为什么它不工作。已尝试将变量放在“”仍然相同的错误中,并将(())与<>用作操作数。负数为-9和我收到的错误是:比较bash脚本中的负数。不确定什么错误的意思

./valsplit.sh: line 89: [[: −9: syntax error: invalid arithmetic operator (error token is "??9") 

这是我的脚本:

checkImmediate(){ 
lowerBound=-32768 
upperBound=32767 
if [[ $immediate -lt $lowerBound || $immediate -gt $upperBound ]]; then 
    hasErrors=1 
    errors+=("Out of bounds immediate. Immediates range between −32768 and 32767.") 
fi 
} 

我使用OSX。

任何帮助将不胜感激。 谢谢

+0

奇怪的是,在我的机器上,我没有得到相同的代码错误。我立即设置= -9,我也在使用OS X – PMonti

+0

尝试将变量放在引号中。所以“$立即”和“$ lowerBound”等 –

+0

印度-9,上面提到:) PMonti感谢您抽出时间 –

回答

1

你的语法是好的,这是你的价值观是错误的。这里有一个例子:

$ var='1 –9' # this is a Unicode dash 
$ [[ $var -lt 5 ]] 
-bash: [[: 1 –9: syntax error: invalid arithmetic operator (error token is "–9") 

值从您发布的错误都有一个统一划线,如果你看一下set -x输出,这应该是显而易见。

确保您的所有变量都是不含特殊字符的整数。 (请注意,echo和视觉检查不足以确定这一点,因为并非所有的字符都是可打印或可区分的)。

+0

你先生是绝对的英雄!很棒的地方,谢谢! –

0

正如大家所说,这对我来说也是如此(GNU bash,版本3.2.57(1)-release(x86_64-apple-darwin16),MacOS Sierra 10.12.4)。

试试这个

if [ $immediate -lt $lowerBound -o $immediate -gt $upperBound ]; then 
    command 
fi 
+0

谢谢@theofanis。使用-o也更清洁!在其他机器上工作,这是最奇怪的部分。很高兴它不是语法问题,但。再次感谢 –

+0

如果解决了您的问题,请将答案标记为已接受。 – Theofanis