LINUX.ORG.RU

sh: сравнение «чисел»


0

0

Нужно в условии if [ ... ]; сравнить два "числа" вида 0.1.32 и 0.3.1. Сравнение конечно же идёт переменных, которые содержат такие "числа". Эти "числа" также могут в некоторых случаюх включать и буквы, например, 2.5.4a. Собственно, это нумерация версий ПО, которая встречается всякая разная. Может есть какой-нибудь элегантный способ? А то я уже начинаю изобретать что ни поподя.

anonymous

я  на перле такое писал:

sub version_comparator
{
  my @list1 = split("[^0-9]+", shift);
  my @list2 = split("[^0-9]+", shift);

  while (1)
  {
    my $elem1 = shift(@list1);
    my $elem2 = shift(@list2);

    if (!defined($elem1) && !defined($elem2))
    {
      return 0;
    }
    if ($elem1 < $elem2)
    {
      return -1;
    }
    if ($elem1 > $elem2)
    {
      return 1;
    }
  }
}

dilmah ★★★★★
()

В великом и ужасном PHP это делается одной функцией version_compare()
Она учитывает даже префиксы типа -RC1, Посмотри на php.net (или в исходниках) алгоритм ее работы.

Chumka ★★★
()

Идея:

versions=($(printf '%s\n' ${versions[@]} | sort -rt. $(seq 5 | sed -e 's/\(.*\)/-k \1,\1n -k \1,\1/')))

DonkeyHot ★★★★★
()
Ответ на: комментарий от Chumka

>В великом и ужасном PHP это делается одной функцией version_compare()

Скоро уже ждать создание типового сайта одной функцией на пхп?

<?php create_site($title, $text, $images); ?>

:)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.