При использовании этой команды человечности:
${HOME}/temp/.git describe --always --tags HEAD
вывод этой команды:
v0.1.5-2-p343h3d3
Я хочу извлечь 1.5
от вывода выше и проверки, если это больше, чем 1,5 или нет.
Есть ли любое решение для этого.?
Вы могли сделать что-то как
${HOME}/temp/.git describe --always --tags HEAD | awk ' {
match ($0, /[0-9]+\.[0-9]+\.[0-9]+/,m)
if(m[0]>"0.1.5"){
print("hello")
}
}'
Это проверит первое соответствие regex результат. Просто бросив другой способ сделать это, хотя я не уверен, сколько из практического пути это для Вас.
Удачи
Номера версий на самом деле довольно жестки для сравнения, учитывая, что они часто - не стандартные математические сравнения (у этого, например, есть две десятичных точки, который составляет 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-если:
[[ $(echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
Игра вокруг с эти v0.1.4-2-p343h3d3
строка. Если Вы засунете его [до 118], то это отзовется эхом.
Теперь для приведения этот всего в чувство назад к команде:
[[ $(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'