【发布时间】:2011-03-31 11:22:18
【问题描述】:
版本格式 - X.X.X.X.
其中 X - 数字。
比较两个版本的最佳方法是什么?
我使用以下代码:
compareVersions()
{
VER_1=$1
VER_2=$2
print -R "$VER_1"| IFS=. read v1_1 v1_2 v1_3 v1_4
print -R "$VER_2"| IFS=. read v2_1 v2_2 v2_3 v2_4
RESULT="0"
if [[ "${v1_1}" -lt "${v2_1}" ]]
then
RESULT="-1"
elif [[ "${v1_1}" -gt "${v2_1}" ]]
then
RESULT="1"
elif [[ "${v1_2}" -lt "${v2_2}" ]]
then
RESULT="-1"
elif [[ "${v1_2}" -gt "${v2_2}" ]]
then
RESULT="1"
elif [[ "${v1_3}" -lt "${v2_3}" ]]
then
RESULT="-1"
elif [[ "${v1_3}" -gt "${v2_3}" ]]
then
RESULT="1"
elif [[ "${v1_4}" -lt "${v2_4}" ]]
then
RESULT="-1"
elif [[ "${v1_4}" -gt "${v2_4}" ]]
then
RESULT="1"
fi
echo "$RESULT"
}
但我不喜欢它 - 它非常简单。
也许有很多正确的方法来比较版本?
【问题讨论】:
-
你确定不是 ksh 而不是 Bash? Bash 没有
print命令,你不能通过管道输入它的read。 -
是的 - 这是 ksh。我修复了标签。
-
“你不能通过管道读取它”——当然可以。
printf "abc\n" | { read x; printf "got $x\n"; }