用于字符串比较的bash脚本

时间:2011-06-27 17:41:25

标签: bash

  

可能重复:
  Bash. How compare two strings in “version” format

所有

我需要一个好的算法,脚本比较“2.0.9”到“2.0.10”2.0.9小于2.0.10

“2.0.1”小于“2.0.9” “2.0.9”小于“2.0.92”

看图片?这是在Mac OS 10.6上。

2 个答案:

答案 0 :(得分:1)

查看sort -Vls -v源代码。

这也是我在其他程序学习版本排序之前编写的程序。

#!/usr/bin/perl

@S = <>;
print sort byglob @S;


######################################################################
#
# Sorting function which sorts numerically for numerical parts,
# alphabetically otherwise
# 
sub byglob
{
  my($A) = $a;
  my($B) = $b;
  my($c,$d,$e);

  while ($A && $B)
    {
      $A =~ s/^([0-9]+|[^0-9]+)//;
      $c = $1;
      $B =~ s/^([0-9]+|[^0-9]+)//;
      $d = $1;

      if ($c =~ /\d/ && $d =~ /\d/)
        {
          $e = $c <=> $d;
        }
      else
        {
          $e = $c cmp $d;
        }
      return $e if ($e);
    }
  return $a cmp $b;
}

答案 1 :(得分:0)

在bash中使用算术运算符<在算术表达式括号[[]]中比较它们:

x=2.0.9
y=2.0.92
[[ $x < $y ]] && echo "less"

输出

less