3

bashで使用できる拡張正規表現演算子(?、*、+、@ 、!)を使用しようとしています。マニュアルには、パターンのリストを括弧で囲み、左角かっこの前に演算子を使用する必要があると書かれています。したがって、0個以上のaのパターンが必要な場合:

if [[ "$1" =~ *(a) ]]
then
   echo $1
fi

しかし、これは機能していません。私は何が間違っているのですか?

4

1 に答える 1

9

あたりman bash

およびと=~同じ優先順位を持つ 追加の二項演算子、が使用可能です。これを使用すると、演算子の右側の文字列は拡張正規表現と見なされ、それに応じて照合されます( regex(3)のように)。文字列がパターンに一致する場合、戻り値は0であり、そうでない場合は1です。正規表現が構文的に正しくない場合、条件式の戻り値は2です。シェルオプション が有効になっている場合、アルファベット文字の場合に関係なく一致が実行されます。パターンの任意の部分を引用して、文字列として強制的に一致させることができます。正規表現内の括弧で囲まれた部分式と一致する部分文字列は、配列変数に保存されます==!=nocasematchBASH_REMATCH。インデックス0の要素はBASH_REMATCH、正規表現全体に一致する文字列の部分です。BASH_REMATCHwith index nの要素は、 n番目の括弧で囲まれた部分式に一致する文字列の部分です。

知っておくと便利だと思うので、ここですべてを引用しました。右側では、標準のPOSIX拡張正規表現を使用します。

特に、右側の式は、左側のオペランドの部分文字列と一致する場合があります。したがって、文字列全体を一致させるには、^$アンカーを使用します。

if [[ "$1" =~ ^a*$ ]]
then
    echo $1
fi
于 2012-09-27T05:25:03.690 に答える