Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH将Linux版本与数字进行比较?_Bash_Compare - Fatal编程技术网

BASH将Linux版本与数字进行比较?

BASH将Linux版本与数字进行比较?,bash,compare,Bash,Compare,我正在尝试找出如何将当前openSuSE版本号与预设值进行比较 我已经在$version\u ID中安装了当前版本的操作系统 我现在正在研究如何将其与“42.3”进行比较。因此,如果该值不大于或等于quit if [ ! "$VERSION_ID" -ge 42.3 ]; then echo "Sorry Bye"; fi 我得到: [:42.3:需要整数表达式,但我不知道如何修复该问题 有什么建议吗 谢谢您可以使用计算器: 版本号不是浮点值;它们是-分隔的整数序列。42.27比4

我正在尝试找出如何将当前openSuSE版本号与预设值进行比较

我已经在$version\u ID中安装了当前版本的操作系统

我现在正在研究如何将其与“42.3”进行比较。因此,如果该值不大于或等于quit

if [ ! "$VERSION_ID" -ge 42.3 ]; then
    echo "Sorry Bye";
fi  
我得到: [:42.3:需要整数表达式,但我不知道如何修复该问题

有什么建议吗 谢谢

您可以使用计算器:


版本号不是浮点值;它们是-分隔的整数序列。42.27比42.3新,42.2.9可能是有效的版本号

将版本号拆分为整数组件,并按词汇数字进行比较:

target=(42 3)
IFS=. read -a v_id <<< "$VERSION_ID"

for ((i=0; i <${#v_id[@]}; i++)); do
  if (( ${v_id[i]} == ${target[i]} )); then
    continue
  fi

  if (( ${v_id[i]} < ${target[i]} )); then
    echo "version < target"
  elif (( ${v_id[i]} > ${target[i]} )); then
    echo "version > target"
  fi
  break
done

一般来说,版本号不是浮点值;它们是。-分隔的整数序列。例如,42.10几乎可以肯定是比42.9更新的版本。@chepner很好,这个dupe可以解决XY问题的Y部分;@Michael O。感谢这似乎做了我需要的事情:稍微更改42.3及以上是允许的:如果[echo$VERSION\u ID'顺便说一句,您可以在算术上下文中对数组使用v\u ID[i]和target[i]。我通常更喜欢算术表达式中的${…},作为对未定义变量的防范,变量本身将默认为0,但扩展中的空字符串会产生语法错误。这也很好。
target=(42 3)
IFS=. read -a v_id <<< "$VERSION_ID"

for ((i=0; i <${#v_id[@]}; i++)); do
  if (( ${v_id[i]} == ${target[i]} )); then
    continue
  fi

  if (( ${v_id[i]} < ${target[i]} )); then
    echo "version < target"
  elif (( ${v_id[i]} > ${target[i]} )); then
    echo "version > target"
  fi
  break
done