比较 bash 脚本中的负数。不确定错误是什么意思

Comparing a negative number in bash script. Unsure what error means

我正在尝试比较立即数是否在范围内,但我不明白为什么它不起作用。尝试将变量放入“”仍然是相同的错误,并且还使用 (()) 和 <> 作为操作数。负数是 -9,我收到的错误是:

./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。

如有任何帮助,我们将不胜感激。 谢谢

正如每个人所说,这对我也有效(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

你的语法没问题,错误的是你的价值观。这是一个例子:

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

您发布的错误中的值有一个 Unicode 破折号,如果您查看 set -x 输出,这应该会立即显而易见。

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