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