簡體   English   中英

比較bash中的兩個十進制數字

[英]comparing two decimal numbers in bash

我需要在bash腳本中比較兩個數字。 我收到整數錯誤。 還有其他可用的方法嗎?

我們的版本的格式為YYYY.M或YYYY.MM。

因此,我需要比較一下2014.7(2014年7月)比2014.10(2014年10月)更早的版本。

 #!/bin/bash

 NEWVER="2014.10";                      # 2014.10
 CURVER=$(head -n 1 /release.ver);      # 2014.7

 if [ $NEWVER > $CURVER ]; then
   echo "this version is new";
 fi

復雜的是,七月的格式為2014.7而不是2014.07 因此,浮點算法將不起作用。 一種解決方案是分離年份和月份信息並分別進行比較:

NEWVER="2014.10"
CURVER=2014.7
IFS=. read major1 minor1 <<<"$NEWVER"
IFS=. read major2 minor2 <<<"$CURVER"
[[ $major1 -gt $major2 || ($major1 -eq $major2 && $minor1 -gt $minor2) ]] && echo newer

另類

另外,我們可以修復月份格式,然后進行浮點比較:

fix() { echo "$1" | sed 's/\.\([0-9]\)$/.0\1/'; }
NEWVER=$(fix "$NEWVER")
CURVER=$(fix "$CURVER")
(( $(echo "$NEWVER > $CURVER" | bc -l) )) && echo newer

我知道的唯一具有版本比較操作的標准實用程序是Gnu sort ,它使用選項-V版本比較實現為擴展。 (這並不意味着沒有其他任何內容;只是我想不到任何其他內容)。 使用Gnu sort ,可以進行以下操作:

key=$CURVER$'\n'$NEWVER
if [[ $key = $(sort -V <<<"$key") ]]; then
  # NEWVER is newer or the same
else
  # NEWVER is older
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM