对于用于比较一个版本字符串是否大于另一个版本字符串的bash脚本,如果版本字符串有2个点,它将如何处理?
那么如何比2.0.1版本大于1.9.1呢?或1.8.5小于1.9.5
欢呼声
答案 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