もしそうなら、なぜそれがうまくいき、一致を印刷するのですか?
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
違いは何ですか?これは同じ正規表現です。
答え1
内部に一重引用符を使用しないでください[[
。
if [[ "$SOME_VAR" =~ ^test\/version[0-9]+([.][0-9]+)+$ ]]; then
echo "Match!"
fi
GNU bashマニュアルから: https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs
注意:
パターンのすべての部分を引用して、引用された部分を文字列に一致させることができます。。
マニュアルでは、この変数を最初に使用することをお勧めします。
シェル変数に正規表現を格納することは、シェル固有の文字を引用するときに問題を回避する便利な方法であることがよくあります。場合によっては、引用符を使用せずに正規表現を文字通り指定したり、シェルの引用符の削除に注意しながら、正規表現で使用されている引用符を追跡することは困難です。シェル変数を使用してパターンを保存すると、これらの問題を軽減できます。
また、見ることができますシェル変数に正規表現を格納してシェル固有の文字を引用する問題を回避するには?