了解bash * String *比较

时间:2015-07-20 09:41:17

标签: bash

我试图比较版本号。例如,如果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

2 个答案:

答案 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根本不适用于浮点值。您需要使用外部命令(例如bcawk)来比较它们。当然,如果您的版本号可以包含多于1个小数点,那么您需要使用其他方法,因为它们不再是浮点数。