では、なぜ次のように機能するのか、つまり一致を出力するのはなぜですか。
THE_REGEX='^test\/version[0-9]+([.][0-9]+)+$'
if [[ "$SOME_VAR" =~ $THE_REGEX ]]; then
echo "Match!"
fi
しかし、以下はそうではありません:
if [[ "$SOME_VAR" =~ '^test\/version[0-9]+([.][0-9]+)+$' ]]; then
echo "Match!"
fi
違いはなんですか?同じ正規表現です
[[
内では一重引用符を使用しないでください:
if [[ "$SOME_VAR" =~ ^test\/version[0-9]+([.][0-9]+)+$ ]]; then
echo "Match!"
fi
GNU bash manual: https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs から
特に注意してください:
パターンの任意の部分を引用符で囲んで、引用符で囲まれた部分を文字列として一致させることができます。
マニュアルは変数を使用することを推奨するようです:
シェル変数に正規表現を格納することは、多くの場合、シェルに特有の文字の引用に関する問題を回避するのに役立つ方法です。引用符を使用せずに文字どおりに正規表現を指定したり、シェルの引用の削除に注意しながら正規表現で使用されている引用を追跡したりするのは難しい場合があります。シェル変数を使用してパターンを格納すると、これらの問題が減少します。