文字列「.a」の先頭のドットに一致させたいとします
だから私は入力します
[[ ".a" =~ ^\. ]] && エコー "ハ"
ハ
[[ "a" =~ ^\. ]] && エコー "ハ"
ハ
ここで同じ結果が得られるのはなぜですか?
以降のバージョン=~
間で互換性の問題がいくつかあります。Bashで使用する最も安全な方法は、REパターンをvarに入れることです。Bash
3.0
=~
$ pat='^\.foo'
$ [[ .foo =~ $pat ]] && echo yes || echo no
yes
$ [[ foo =~ $pat ]] && echo yes || echo no
no
$
詳細については、BashFAQページのE14を参照してください。
単なるピリオドを超えた意味を持つドットをエスケープする必要があります。これは正規表現のメタ文字です。
[[ "a" =~ ^\. ]] && echo "ha"
他の例でも同様に変更します。
bash のバージョンを確認してください - 4.0 以上が必要だと思います。
おそらく、bashが「。」を処理しようとするためです。\ n\rなどの\文字として。
\&を伝えるために。2つの別々の文字として、試してみてください
[[ "a" =~ ^\\. ]] && echo ha