Предположим, я хочу сравнить gcc
версию, чтобы увидеть, установлена ли в системе минимальная версия или нет.
Чтобы проверить gcc
версию, я выполнил следующее
gcc --version | head -n1 | cut -d" " -f4
Выход был
4.8.5
Итак, я написал простое if
утверждение, чтобы проверить эту версию с некоторым другим значением
if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
echo "Less than 5.0.0"
else
echo "Greater than 5.0.0"
fi
Но это выдает ошибку:
[: integer expression expected: 4.8.5
Я понял свою ошибку, что я использовал строки для сравнения и -lt
требует целое число. Итак, есть ли другой способ сравнить версии?
shell-script
test
version
numeric-data
Абхиманью Сахара
источник
источник
gcc -dumpversion
Ответы:
Я не знаю, красиво ли это, но это работает для всех версий формата, которые я знаю.
( Примечание: лучшая версия от пользователя 'wildcard': https://unix.stackexchange.com/users/135943/wildcard , удалено дополнительное условие)
источник
printf "$requiredver\n$currentver"
наprintf '%s\n' "$requiredver" "$currentver"
.-V
является расширением GNU,sort(1)
таким образом, это решение непереносимо.sort -n
работает почти так же, как в случае цифровых версий.Здесь я даю решение для сравнения версий ядра Unix. И это должно работать для других, таких как gcc. Я забочусь только о первых двух номерах версии, но вы можете добавить еще один слой логики. Это один лайнер, и я написал его в несколько строк для понимания.
Вы можете изменить это и использовать его для проверки версии gcc.
источник
Раньше мы много проверяли версии в make-файле GNU. Мы выложились через средства makefile. Мы должны были обнаружить старые Binutils и глючные компиляторы и обойти их на лету.
Шаблон, который мы использовали, был:
источник
Укороченная версия:
источник
printf '%s\n'
достаточно хорош;printf
будет повторять строку формата по мере необходимости.printf
повторяет строку формата, но я (отсутствие!) Синтаксис для этого IMHO неясен; поэтому я использую это только когда требуется = когда количество аргументов велико или переменно.Кредит идет на @Shellman
источник