Вот функция, которая будет сравниваться со строками версий и определять, будут ли они в последовательности.Я сделал пару предположений в сравнении.Количество «десятичных знаков» должно быть одинаковым.Я также оставил дверь широко открытой для больших ошибок, см. Мой последний контрольный пример.Считай это быстрым и грязным.Вероятно, было бы лучше написать логику для сравнения каждого десятичного значения и убедиться, что последнее десятичное число на единицу больше, чем предыдущее.Более правильная версия могла бы сравнить abc с def, сначала сравнив a == d, затем b == c, а затем f == c + 1. Однако, в зависимости от того, что вы пытаетесь сделать, быстрый и грязный можетбыть самым простым в обслуживании.
Без дополнительного обсуждения, вот быстрая и грязная версия:
function bumped() {
prev=$1
next=$2
PREV=$( sed 's/[^0-9]//g' <<<"$prev" )
NEXT=$( sed 's/[^0-9]//g' <<<"$next" )
[ $(( NEXT - PREV )) -eq 1 ]
}
function testcases() {
cat <<EOF
1.2 1.3 0
1.3 1.2 1
1.2.1 1.2.2 0
1.3 1.3.1 1
EOF
}
testcases | while
read prev next expected extra
do
bumped $prev $next
observed=$?
result="Success"
[ $observed -ne $expected ] && result="Failed"
echo "$result: bumped( $prev , $next ) = $observed ( expected: $expected )"
done
Приведенная выше программа дает следующие результаты:
Success: bumped( 1.2 , 1.3 ) = 0 ( expected: 0 )
Success: bumped( 1.3 , 1.2 ) = 1 ( expected: 1 )
Success: bumped( 1.2.1 , 1.2.2 ) = 0 ( expected: 0 )
Success: bumped( 1.3 , 1.3.1 ) = 1 ( expected: 1 )
Failed: bumped( 1.3.1.1 , 13.1.2 ) = 0 ( expected: 1 )
Очевидно, что это не оптимальное решение, но оно может привести вас туда, куда вам нужно.Если вы все время ищете что-то правильное, рассмотрите логику, рассмотренную выше.