Bash — Определяет текущую версию ОС и сравнивает ее с арифметическими выражениями

#bash #shell

#bash #оболочка

Вопрос:

 OS_VERS=$(sw_vers -productVersion)
  if [[ ${OS_VERS} >= 10.14.6 ]]; then
    echo "Bla bla bla..."
  fi
  

Мне нужно, чтобы мой код делал что-то другое в зависимости от установленной версии ОС. Если обнаруженная версия ОС больше или равна 10.14.6, сделайте что-нибудь, в противном случае сделайте что-нибудь еще. Я использую что-то вроде этого кода, но, похоже, логика не работает.

РЕДАКТИРОВАТЬ: Это работает, если я использую > or < , но не с >= or <=

Комментарии:

1. Ну, для начала, 10.14.6 на самом деле не является числовым, поэтому вы не можете сравнить его с помощью >= . Вы могли бы разделить его на компоненты и проверить каждый из них по отдельности.

2. Может помочь GNU sort с опцией --version-sort .

3. Ты действительно не хочешь этого делать. Не тестируйте платформу, протестируйте функцию. Если в ОС есть какая-то конкретная функция, которая актуальна в версии > = 10.14.6, то протестируйте эту функцию. Вас не волнует, что версия ОС имеет определенный номер, вас волнует, что существует определенная функция.

Ответ №1:

Вы можете сделать это следующим образом:

 function ver { printf "ddd" $(echo "$1" | tr '.' ' '); }
[ $(ver 10.14.7) -ge $(ver 10.14.6) ] amp;amp; echo foo || echo bar