При использовании этой команды ubuntu:
${HOME}/temp/.git describe --always --tags HEAD
вывод этой команды:
v0.1.5-2-p343h3d3
Я хочу извлечь 1.5 из выведенного выше и проверить, если это больше 1,5 или нет. Есть ли какое-либо решение для этого ??
Номера версий на самом деле довольно сложно сравнивать, учитывая, что они часто не являются стандартными математическими сравнениями (например, у этого есть две десятичные точки, которые заставляют bc забрасывать).
Поэтому я перехожу к менее известный вариант в sort, который можно использовать для сортировки строк версии. Рассмотрим следующее:
$ echo -e "v0.1.5\nv0.1.6-2-p343h3d3" | sort -V
v0.1.5
v0.1.6-2-p343h3d3
oli@bert:~$ echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V
v0.1.4-2-p343h3d3
v0.1.5
В основном это означает, что мы можем сортировать версии так, чтобы последние находились на последней строке. Все, что нам нужно сделать, это сравнение строк с последней строкой внутри if или shortcutted-if:
[[ $(echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
Воспроизведение со строкой v0.1.4-2-p343h3d3. Если вы вставите его на 0.1.6, он выйдет из себя.
Теперь, чтобы вернуть все это к вашей команде:
[[ $(echo -e "v0.1.5\n$(${HOME}/temp/.git describe --always --tags HEAD)" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
Или вы можете сломать его читаемость:
THRESHOLD="v0.1.5"
VERSION=$(${HOME}/temp/.git describe --always --tags HEAD)
if [[ $(echo -e "$THRESHOLD\n$VERSION" | sort -V | tail -1) != "$THRESHOLD" ]]; then
echo GREATER
fi
Вы можете использовать следующую команду для exit с статусом 0, если извлеченная версия больше 1,5
${HOME}/temp/.git describe --always --tags HEAD | perl -ne '/v\d+\.(\d+\.\d+)/;exit(1) if $1 <= 1.5'