我试图比较版本号。例如,如果10.9小于10.11。
有人可以解释为什么这不打印“是”'
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><a href="#1" class="test1">1</a></li>
<li><a href="#2" class="test2">2</a></li>
<li><a href="#3" class="test3">3</a></li>
</ul>
<div class="test">
<div class="test1">test1</div>
<div class="test2">test2</div>
<div class="test3">test3</div>
</div>
我需要做些什么来使这项工作正确,9应该小于10?
此外,如果我有&#34; 10.9&#34;在变量$ VERSION中,如何与&#34; 10.11&#34;进行比较,因为这也无法打印&#39;是&#39;
if [[ "9" < "10" ]]; then echo yes; fi
答案 0 :(得分:2)
在这种情况下,这将返回正确的答案
if [[ "8" < "9" ]]; then echo yes; fi
但是对于你的具体情况&#34; 10&#34;小于&#34; 9&#34;因为1小于9。 字符串比较的工作方式与数字不同,因此顺序类似于
1
10
20
21
3
...
您可以将字符串转换为数字,并使用-lt
(小于)运算符作为数值。 Bash值是无类型的,因此,这将起作用
if [ "9" -lt "10" ]; then echo yes; fi
可以找到一些Bash引用here
请注意&#34; 10.9&#34;我没有使用浮动。您可以使用awk比较。
if [ -n "10.1" -a -n "10.2" ]; then echo yes; fi
答案 1 :(得分:1)
由于<
是字符串比较运算符,"9"
按字典顺序更大而不是"10"
。 bash
只能比较整数(使用-lt
,在这种情况下[ "9" -lt "10 ]
将为真。(注意bash
没有单独的字符串和整数类型,只有字符串,含义"9"
和9
是完全相同的字符串。它是决定行为的运算符,而不是操作数。)
bash
根本不适用于浮点值。您需要使用外部命令(例如bc
或awk
)来比较它们。当然,如果您的版本号可以包含多于1个小数点,那么您需要使用其他方法,因为它们不再是浮点数。