bashで使用できる拡張正規表現演算子(?、*、+、@ 、!)を使用しようとしています。マニュアルには、パターンのリストを括弧で囲み、左角かっこの前に演算子を使用する必要があると書かれています。したがって、0個以上のaのパターンが必要な場合:
if [[ "$1" =~ *(a) ]]
then
echo $1
fi
しかし、これは機能していません。私は何が間違っているのですか?
あたりman bash
:
およびと
=~
同じ優先順位を持つ 追加の二項演算子、が使用可能です。これを使用すると、演算子の右側の文字列は拡張正規表現と見なされ、それに応じて照合されます( regex(3)のように)。文字列がパターンに一致する場合、戻り値は0であり、そうでない場合は1です。正規表現が構文的に正しくない場合、条件式の戻り値は2です。シェルオプション が有効になっている場合、アルファベット文字の場合に関係なく一致が実行されます。パターンの任意の部分を引用して、文字列として強制的に一致させることができます。正規表現内の括弧で囲まれた部分式と一致する部分文字列は、配列変数に保存されます==
!=
nocasematch
BASH_REMATCH
。インデックス0の要素はBASH_REMATCH
、正規表現全体に一致する文字列の部分です。BASH_REMATCH
with index nの要素は、 n番目の括弧で囲まれた部分式に一致する文字列の部分です。
知っておくと便利だと思うので、ここですべてを引用しました。右側では、標準のPOSIX拡張正規表現を使用します。
特に、右側の式は、左側のオペランドの部分文字列と一致する場合があります。したがって、文字列全体を一致させるには、^
と$
アンカーを使用します。
if [[ "$1" =~ ^a*$ ]]
then
echo $1
fi