web-dev-qa-db-ja.com

「〜=」演算子を使用して、二重括弧内のテストで正規表現パターンマッチングスペースをbashします。

簡単に言うと、スペースを含むパターンと変数を照合する方法が見つかりません。

これが私が動作することを期待したものです(echo'ok 'string)

item='foobar baz'
pat=".+bar baz"
if [[ "$item" =~ "$pat" ]] ; then
    echo ok
fi

$ patの前後の引用符を追加/削除しても、違いはないようです。以下の2つのエラーが発生します。

bash: conditional binary operator expected
bash: syntax error near `~='

誰かが私がここで間違っていることを指摘するのを手伝ってくれませんか?パターンをすぐに配置する必要がありますか(引用符/二重引用符、変数参照なし)?その場合、どうすればスペースを入れることができますか? (代替ではなく、正規表現マッチングを使用)

ありがとうございました !

4
Stphane

構文エラーは自明です。つまり、~=の代わりに=~を使用しました。

正規表現パターンに関しては、$pat(および$item)を使用するだけで、シェルに組み込まれている[[で単語の分割を処理できます。

item='foobar baz'
pat=".+bar baz"
if [[ $item =~ $pat ]]; then
    echo ok
fi

$pat、つまり"$pat"を二重引用符で囲むと、正規表現トークン.+は文字どおりに扱われます。

例:

$ item='foobar baz'; pat=".+bar baz"; if [[ $item =~ $pat ]]; then echo OK; fi
OK
4
heemayl