web-dev-qa-db-ja.com

`。[]。foo []`はbashで何をしますか?なぜ `..`と一致するのですか?

以下を見てください。

$ echo .[].aliases[]
..
$ echo .[].foo[]
..
$ echo .[].[]
..
$ echo .[].xyz[]
..
$ echo .xyz[].xyz[]
.xyz[].xyz[]
$ echo .xyz[].[]
.xyz[].[]

どうやらこれは何かをぼかしているようですが、結果がどのように組み合わされるのかわかりません。私の理解から、[]は空の文字クラスです。次の場合は直感的です

  • 空の文字列のみに一致しました。この場合、このディレクトリでは何も一致せず、..aliases(最初の例)のようなものにも一致するので、bashは完全に再現されると思います。
  • またはまったく何もない;この場合、bashも文字列全体を再現することを期待しています。

これは、GNU bash、バージョン4.4.23(1)-releaseの場合です。

16
Jonas Schäfer

[はセットを開始します。セットは]で終了します。ただし、]をセットの一部として使用する方法があります。これは、]を最初の文字として指定することです。空のセットは意味をなさないので、これはあいまいではありません。

したがって、例は基本的にすべてドットであり、その後にドットを含むセットが続くため、2つのドットに一致します。

後の例ではファイルが見つからないため、そのまま返されます。

25
RalfFriedl