你的比较版本函数中,使用了字典序排序的方式来对版本号进行比较。这种方法在处理带有下划线分隔符的版本号时可能会导致错误结果。例如,在你的示例中,”2_2_1_1”与”24_08”被按照字典序进行排序,结果为”24_08 2_2_1_1”。
正确比较版本号的一种方法是将每个版本号分割成数字,并逐个进行比较。可以尝试以下修改:
compare_versions() {
version1=$1
version2=$2
IFS='_' read -ra v1 <<< "$version1"
IFS='_' read -ra v2 <<< "$version2"
for i in "${!v1[@]}"; do
if [[ ${v1[i]} -lt ${v2[i]} ]]; then
echo "Version $version1 is older than $version2"
return
elif [[ ${v1[i]} -gt ${v2[i]} ]]; then
echo "Version $version1 is newer than $version2"
return
fi
done
echo "Version $version1 is equal to $version2"
}
这个修改会将每个版本号拆分成一个数组,并逐个比较数组中的元素。请注意,此代码假定两个版本号具有相同数量的子版本(用下划线分隔)。如果不是这种情况,请根据实际情况进行调整。
希望能解决你的问题!
内容由零声教学AI助手提供,问题来源于学员提问