我正在尝试比较构建数字和回声哪个更大。这是我写的剧本
New_Cycle_Num='c4.10'
Old_Cycle_Num='c4.9'
if [ "$New_Cycle_Num" == "$Old_Cycle_Num" ];
then echo 'both are equal'
elif [ "$New_Cycle_Num" "<" "$Old_Cycle_Num" ]];
then echo 'New_Cycle_Num is less than Old_Cycle_Num'
else echo 'New_Cycle_Num is greater than Old_Cycle_Num'
fi
我的脚本给我的输出是"New_Cycle_Num小于 Old_Cycle_Num"而不是最后一个语句。 为什么 C4.10 与小于 C4.9 相比? 有什么帮助来纠正这个问题吗?非常感谢!!
你会得到你得到的结果,因为通过词法比较,比较第 4 个字符,"1"出现在字典中的"9"之前(在相同的意义上,"foobar"会出现在"食物"之前,即使"foobar"更长)。
像ls
和sort
这样的工具有一个"版本排序"选项,这在这里很有用,尽管有些尴尬:
New_Cycle_Num='c4.10'
Old_Cycle_Num='c4.9'
if [[ $New_Cycle_Num == $Old_Cycle_Num ]]; then
echo 'equal'
else
before=$(printf "%sn" "$New_Cycle_Num" "$Old_Cycle_Num")
sorted=$(sort -V <<<"$before")
if [[ $before == $sorted ]]; then
echo 'New_Cycle_Num is less than Old_Cycle_Num'
else
echo 'New_Cycle_Num is greater than Old_Cycle_Num'
fi
fi
New_Cycle_Num is greater than Old_Cycle_Num
我想不出一个很好的选择。可能有
echo -e "c4.10nc4.9" |
perl -MSort::Versions -E '
$a=<>; $b=<>; chomp($a, $b); $c=versioncmp($a,$b);
say "$a is ". ($c==0 ? "equal to" : $c < 0 ? "less than" : "greater than") . " $b"
'
c4.10 is greater than c4.9
但是您必须从CPAN安装Sort::Versions。