0

文字列「.a」の先頭のドットに一致させたいとします

だから私は入力します

[[ ".a" =~ ^\. ]] && エコー "ハ"

[[ "a" =~ ^\. ]] && エコー "ハ"

ここで同じ結果が得られるのはなぜですか?

4

3 に答える 3

1

以降のバージョン=~間で互換性の問題がいくつかあります。Bashで使用する最も安全な方法は、REパターンをvarに入れることです。Bash3.0=~

$ pat='^\.foo'
$ [[ .foo =~ $pat ]] && echo yes || echo no
yes
$ [[ foo =~ $pat ]] && echo yes || echo no
no
$

詳細については、BashFAQページのE14を参照してください。

于 2013-03-18T06:56:26.013 に答える
1

単なるピリオドを超えた意味を持つドットをエスケープする必要があります。これは正規表現のメタ文字です。

 [[ "a" =~ ^\. ]] && echo "ha"

他の例でも同様に変更します。

bash のバージョンを確認してください - 4.0 以上が必要だと思います。

于 2013-03-17T03:18:53.880 に答える
0

おそらく、bashが「。」を処理しようとするためです。\ n\rなどの\文字として。

\&を伝えるために。2つの別々の文字として、試してみてください

[[ "a" =~ ^\\. ]] && echo ha
于 2013-03-17T06:35:36.457 に答える