14

だから私はこの機能を持っています

function test(){
 local output="CMD[hahahhaa]"
 if [[ "$output" =~ "/CMD\[.*?\]/" ]]; then
  echo "LOOL"
 else
  echo "$output"
 fi;

}

ただし、コマンド ラインでテストを実行すると、パターンが $output と一致する必要があるにもかかわらず、"LOOL" ではなく $output が出力されます...

私は何を間違えましたか?

4

1 に答える 1

27

引用符を使用しないでください""

if [[ "$output" =~ ^CMD\[.*?\]$ ]]; then

regex 演算子は、右側の引用符=~で囲まれていない正規表現を期待し、アンカー(入力の開始) と(入力の終了) も使用して左側の全体に一致させない限り、部分文字列の一致のみを行います。^$

引用符 ""はこの動作をオーバーライドし、代わりに単純な文字列の一致を強制します。つまり、マッチャーはこれらすべての文字\[.*?\]を文字どおりに検索し始めます。

于 2013-10-11T21:08:25.923 に答える