как преобразовать строку в число с плавающей запятой, а затем использовать ее в условной операции?

:> alias e="echo "
:> alias text=foo
:> e text
foo

Технически оболочка идет дальше расширения псевдонимов, но, тем не менее, я думаю, что вы имели в виду именно это.

1
24.12.2018, 09:05
2 ответа

Попробуйте это, я использую для сравнения float с bc.

VERSION=$(cat /etc/debian_version)
echo $VERSION
if [ "`echo "${VERSION} < 9.0" | bc`" -eq 1 ]; then
    echo "Debian version is less than 9"
else
    echo "Debian version is greater than 9"
fi

один вкладыш -с использованиемawk

awk  '{if ($1 < 9.0) {print "Debian version is less than 9";} else if ($1 > 9.0){ print "Debian version is greater than 9";}}' /etc/debian_version
2
27.01.2020, 23:23

В версии нет простого числа с плавающей запятой, а версия 1.10 больше, чем 1.9. Я думаю, что решение с использованием утилиты sort, которая умеет обращаться с номерами версий:

check_versions(){
    # check_version <reference> <version to check>
    if [[ $1 == $2 ]]; then
        echo 'same'
    else
        low=$(echo -e "$1\n$2" | sort --version-sort | head --lines=1)
        if [[ $low == $1 ]]; then
            echo 'greater'
        else
            echo 'lower'
        fi
    fi
}

ref='8.5'      # reference version for check

check_versions $ref '8.2' # current version is lower!
check_versions $ref '8.5' # current version is equal!
check_versions $ref '8.12' # current version is greater!

Я думаю, что это лучшее решение.

1
27.01.2020, 23:23

Теги

Похожие вопросы