次のスクリプトを書いた。後でビルドプロセスで使用されます。私の目標は、それがプレリリースかリリースかを決定することです。これをアーカイブするには、$ releaseを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
これを使用して editor で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
_
私はこのスクリプトをテストしましたが、指定された$ releaseに対して「Pre」を出力しました
正規表現ビルダーをチェックアウトしました。これは、Perix互換およびJavaScript正規表現でのみ機能しますが、POSIXまたはPOSIX拡張が必要です。
作成者 @ dessert :
_
[0-9]
_は、_[[:digit:]]
_の短い代替です。文字列の先頭が一致するため、_^
_を追加する必要がありますが、末尾の_.*
_は不要です:_^[0-9]+\.[0-9]+\.[0-9]+-+
_ –グループを使用すると、さらに短縮できます:^([0-9]+\.){2}[0-9]+-+