bashテスト - スラッシュマッチ

bashテスト - スラッシュマッチ

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を返します。これは多くの言語の正規表現表記とは異なります。

おすすめ記事