Gitブランチ名があります。
current_branch='oleg/feature/1535693040'
ブランチ名に/feature/が含まれているかどうかをテストしたいので、次のようにします。
if [ "$current_branch" != */feature/* ] ; then
echo "Current branch does not seem to be a feature branch by name, please check, and use --force to override.";
exit 1;
fi
ただし、支店名が正規表現と一致しないため、1で終了します。理由を知っている人はいますか?
ベストアンサー1
StackOverflowでこの質問に回答しました。 https://stackoverflow.com/questions/52123576/bash-test-match-forward-slashes/52123622
正解は:
[ ]
シングルブラケットですtest(1)
注文する、bashとは異なるパターンを処理します。代わりに二重括弧を使用してください。bash条件式 [[ ]]
。例:
$ current_branch='oleg/feature/1535693040'
$ [ "$current_branch" = '*/feature/*' ] && echo yes
$ [[ $current_branch = */feature/* ]] && echo yes
yes
編集する正規表現を使用してください。
$ [[ $current_branch =~ /feature/ ]] && echo yes
yes
正規表現はどこでも一致できるため、前後には必要ありません(正規表現に*
対応)。.*
注:ここでは、スラッシュは正規表現の区切り文字ではなく、文字列のどこかで一致するリテラルです。たとえば、[[ foo/bar =~ / ]]
trueを返します。これは多くの言語の正規表現表記とは異なります。