1
regex="\{foo"; string="{foo"; [[ $string =~ $regex ]] && echo "true"

これは、Bash 3.x および 4.x で機能する bash スクリプトです。「\」を削除すると、Bash 4.x で機能しなくなります。この動作は予期されたものですか、それともバグですか? regex(7) のマニュアル ページでは、エスケープは不要であることが示唆されています。正規表現の他のフレーバーでは、中かっこをエスケープする必要がありますか?

4

2 に答える 2

0

マニュアルには次のように書かれています(強調鉱山):

追加の二項演算子 '<code>=~' が使用可能で、'<code>==' および '<code>!=' と同じ優先順位です。 これを使用すると、演算子の右側の文字列が拡張正規表現と見なされ、それに応じて一致します。

そのため、正規表現の をエスケープ{する必要があります。

ただし、演​​算子bashの右辺で文字列を引用することにより、文字列比較を強制的に実行することができます。=~

$ regex="{foo"; string="{foo"; [[ $string =~ "$regex" ]] && echo "true"
true
于 2013-08-20T20:17:06.377 に答える