2

我正在将依赖项检查写入程序,并且我要求特定程序至少是特定版本。

这是我到目前为止..

gtkdialog_v=`gtkdialog --version | sed -e "s| |\n|g" -e "/^$/d" | grep "[0-9]\."`
if [ "$gtkdialog_v" -lt "0.8.3" ]; then echo "gtkdialog must be version 0.8.3 or higher"; exit; fi

“-lt”是问题,如果我插入“=”那么它会按预期工作,如果我使用“<”它会出现与“-lt”相同的错误

我的错误

[: 0.8.3: integer expression expected

我在这里想念什么?

4

3 回答 3

2

您可以使用自然排序来执行此操作:

#!/bin/sh
min=0.8.3
ver=0.8.2

if shuf -e $min{,} $ver | sort -V | awk '{getline b;exit$0==b?0:1}'
then
  echo 'good'
else
  echo 'gtkdialog must be version 0.8.3 or higher'
  exit
fi
于 2013-04-15T07:34:04.070 回答
1

-lt只能应用于整数表达式。但是您正在使用它来比较字符串表达式。bash 不支持浮点运算。

而是比较字符串:

if [[ "$gtkdialog_v" < "0.8.3" ]];

请注意,这将进行 ASCII 比较(不是整数比较)。例如,

if [[ "0.12.3" < "0.8.3" ]]; then
  echo yes
fi

将打印“是”,这不是预期的。

于 2013-04-15T07:20:21.837 回答
0

-lt需要一个整数表达式,而不是包含浮点格式值的字符串。所以它出错了。我认为您可以稍微调整一下并删除.So0.8.3变成083,然后您可以使用0.8.5 => 085. 但如果版本 seq 是直截了当的,这将起作用。或者另一种方法是剪掉它们并开始比较每个字段

于 2013-04-15T07:25:59.313 回答