比较bash脚本中的负数。不确定错误的含义

时间:2017-05-03 11:37:09

标签: bash macos negative-number

我试图比较一个立即是在界限,我不明白为什么它不起作用。尝试将变量置于“”仍为相同的错误,并使用(())与<>作为操作数。负数是-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。

非常感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:1)

你的语法很好,这是你的价值观错了。这是一个例子:

<form  class="myclass" action="submit" enctype="multipart/form-data" method="post">
    {% csrf_token %}

    <p>
                {{ form.docfile.errors }}
                {{ form.docfile }}
</p>
            <input type="submit" value="upload" id="button" class="top-menu" onclick="pythonhandler()" />

您发布的错误的值有一个Unicode短划线,如果您查看$ 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和目视检查不足以确定这一点,因为并非所有字符都是可打印的或可区分的。

答案 1 :(得分: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