bashのif句で正規表現を使用する

bashのif句で正規表現を使用する

ifブロックを見てください。

#!/bin/bash

str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
    echo "matched"
else
    echo "not matched"
    exit 1
fi

exit 0

その後、「一致」を印刷する必要がありますが、そうではありません。私はどこで間違っていますか?

ベストアンサー1

正規表現の一致から引用符を削除する必要があります。

if [[ ${str} =~ m\.m ]]; then

Bashのマニュアルページから:

[...] == と != と同じ優先順位で追加の二項演算子 =~ を使用できます。使用すると、演算子の右側の文字列は拡張正規表現として扱われ、それに応じて一致します(regex(3)と同様)。文字列がパターンと一致する場合、戻り値は 0 で、そうでなければ戻り値は 1 です。正規表現の構文が正しくない場合、条件式の戻り値は 2 です。シェルオプションnocasematchが有効になっていると、アルファベット文字の大文字と小文字に関係なく一致が実行されます。 パターンの一部を引用して、強制的に文字列に一致させることができます。

したがって、引用符の場合、古代の文字列マッチングを使用しています。

パターンにスペースが必要な場合はスペースをエスケープします。

str="m   m"
if [[ ${str} =~ m\ +m ]]; then

おすすめ記事