以下のコードは「yes」をエコーするはずですが、そうではありません。何らかの理由で、一重引用符と一致しません。なぜでしょうか?
str="{templateUrl: '}"
regexp="templateUrl:[\s]*'"
if [[ $str =~ $regexp ]]; then
echo "yes"
else
echo "no"
fi
ベストアンサー1
交換する:
regexp="templateUrl:[\s]*'"
と:
regexp="templateUrl:[[:space:]]*'"
によればman bash
、=~
演算子は で定義されている「拡張正規表現」をサポートしますman 3 regex
。man 3 regex
は、POSIX 標準をサポートし、 を参照することを述べていますman 7 regex
。POSIX 標準では、[:space:]
空白の文字クラスとして がサポートされています。
のGNUbash
マニュアルサポートされている文字クラスを次のように文書化します。
'[' と ']' 内では、構文 [: を使用して文字クラスを指定できます。クラス:]、 どこクラスPOSIX 標準で定義されている次のクラスのいずれかです。
alnum アルファ ascii 空白 cntrl 数字 グラフ 下 印刷
句読点 スペース 上 単語 xdigit
\s
GNU ドキュメントで私が見つけた に関する唯一の言及は、正規表現ではなく、bash
などのプロンプトでの無関係な使用に関するものでした。PS1
の意味*
[[:space:]]
一致するちょうど1つ空白文字。[[:space:]]*
一致する0以上空白文字。
space
との違いblank
POSIX正規表現2 種類の空白文字クラスを提供します:[[:space:]]
および[[:blank:]]
:
[[:blank:]]
はスペースとタブを意味します。これは次のようになります:[ \t]
。[[:space:]]
には、スペースとタブに加えて、改行、ラインフィード、フォームフィード、垂直タブが含まれます。これは、 と似ています:[ \t\n\r\f\v]
。
文字クラスを使用する主な利点は、Unicode フォントに対して安全であることです。