Я написал следующий сценарий. Он будет использован в процессе сборки позже. Моя цель - решить, будет ли это предварительный релиз или релиз. Чтобы архивировать это, я сравниваю выпуск $ с RegEx. Если мой RegEx совпадает, это предварительный релиз, если нет, то это релиз.
#/bin/bash
release="1.9.2-alpha1"
echo "$release"
if [[ "$release" =~ \d+\.\d+\.\d+[-]+.* ]];then
echo "Pre"
else
echo "Release"
fi
Но в результате я всегда получаю следующее:
~$ bash releasescript.sh
1.9.2-alpha1
Release
Версия:
Ubuntu 18.04.1 LTS
Я использовал этот редактор , чтобы проверить мой RegEx. Я застрял как минимум на 6 часов, поэтому я был бы очень признателен за помощь.
\d
и \w
не работают в регулярных выражениях POSIX , вы можете использовать [[:digit:]]
, хотя
#/bin/bash
release="1.9.2-alpha1"
echo "$release"
LANG=C # This needed only if script will be used in locales where digits not 0-9
if [[ "$release" =~ ^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+-+ ]];then
echo "Pre"
else
echo "Release"
fi
я протестировал этот скрипт, он выводит " Pre "для данного $ release
Посмотрите на свой конструктор регулярных выражений, он работает только с perl-совместимыми и регулярными выражениями javascript, в то время как вам нужен posix или расширенный posix.
Согласно @dessert :
BLOCKQUOTE>
[0-9]
является более короткой альтернативой[[:digit:]]
. Поскольку начало строки должно совпадать, следует добавить^
, в то время как.*
в конце является излишним:^[0-9]+\.[0-9]+\.[0-9]+-+
- при использовании группы это можно еще сократить до:^([0-9]+\.){2}[0-9]+-+