bash比较两个点的版本字符串?

时间:2015-06-16 17:44:21

标签: bash

对于用于比较一个版本字符串是否大于另一个版本字符串的bash脚本,如果版本字符串有2个点,它将如何处理?

那么如何比2.0.1版本大于1.9.1呢?或1.8.5小于1.9.5

欢呼声

3 个答案:

答案 0 :(得分:1)

鉴于你拥有的东西,你也可以删除这些点并将它们视为数字。像这样:

#!/bin/sh
#

v1='2.0.1'
v2='1.9.1'

nv1=`echo $v1 | sed 's/\.//g'`
nv2=`echo $v2 | sed 's/\.//g'`

if [[ nv1 -gt nv2 ]]; then
    echo "$v1 > $v2"
else
    echo "$v1 <= $v2"
fi

结果:

$ ./test.sh
2.0.1 > 1.9.1

答案 1 :(得分:0)

您可以按照以下方式拆分版本字符串,而无需昂贵的分支到cut或其他任何内容。这适用于所有Bourne派生的shell。

$ x=11.12.13
$ first=${x%%.*}          # Delete first dot and what follows.
$ last=${x##*.}           # Delete up to last dot.
$ mid=${x##$first.}       # Delete first number and dot.
$ mid=${mid%%.$last}      # Delete dot and last number.
$ echo $first $mid $last  # Voila!
11 12 13

然后用数字比较

if test $first -gt 1; then
  ...
fi

你明白了。

答案 2 :(得分:-1)

您可以使用cut命令,指定-d'。'选项(分隔符)和-f选项以选择字段。有了它,您可以将每个版本字符串分解为组件并按照您的意愿进行比较。

您也可能需要进行错误处理,例如只有1个点的字符串,依此类推。

或者,如果您的字符串特别可预测,您可以使用sed去除点并比较结果字符串。但是,这需要很多约束,所以2.10.1大于2.3.1