0

我知道这是一个愚蠢的错误,但我可以找到解决方案。
我必须比较apache版本。如果 apache 版本大于 2.4.3,我必须在安装 apache 之前在系统中安装 apr。
但由于某种原因,我在比较中遇到了算术错误。
基本上,我得到了 apache 版本,我必须将它与 2.4.3 进行比较
这是测试脚本:

#!/bin/ksh

version="2.4.4"
echo "$version"

#if [ '2.4.3' == "$version" ] || [ '2.4.3' < "$version" ]
if [ '2.4.3' -gt '$version' ]

then
        print "Mayor or equal"
else
        print "Error"
fi

这是输出:

2.4.4
./test9.sh[9]: [: 2.4.3: arithmetic syntax error
Error

我想知道为什么我不能进行比较?
谢谢

4

3 回答 3

2

因为 2.4.3 不是数字,所以不能使用 NUMERIC 比较。

这些是字符串,像这样比较版本并不是一个好主意。例如:

  1.2.3 >= 1.0.0 
  but
  1.2.3 < 1.10.3

看到问题了吗?

于 2013-10-09T14:44:25.043 回答
1
if [[ '2.4.3' > "$version" ]]
then
    echo  "Mayor or equal"
else
    echo "Error"
fi
于 2013-10-09T16:21:23.600 回答
-1

在这种情况下,您可以删除小数,但这不是通用解决方案。它适用于您给定的示例,不适用于版本 1.10.5 甚至 2.10 ...

 [ 244 -gt ${version//./} ] && echo True

如果您想要一些非常强大(而且很长)的东西,您可以使用评论中链接的解决方案。

于 2013-10-09T14:54:34.570 回答