[英]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.