引用符で囲まれた文字列のみがグロビングの対象ではありません。
$ echo ".[].aliases[]"
.[].aliases[]
ただし、引用符で囲まれていない文字列はグロビングの対象となります。含まれている引用符で囲まれていない文字列*
または?
または(有効)[]
(ブラケット表現は)それと一致するファイルのリストによって変更されます。a *
が一致するディレクトリ内のすべてのファイルに変換され、?
1文字のみのファイルと一致するのと同じ方法で、(有効な)[]
は括弧内の文字を含むファイルと一致します。ドットは有効な文字です:
$ echo a[.]b
a[.]b
$ touch "a.b"
$ echo a[.]b
a.b
を一致させる]
には、かっこ内の最初の文字にする必要があります。
$ touch "a]b"
$ ls a[]]b
a]b
空のブラケット式は意味がありません(展開されません)。
$ touch ab
$ ls a[]b
ls: cannot access 'a[]b': No such file or directory
これがこれが機能する理由です:
$ touch a]c abc afc azc a:c a?c aoc
$ ls a[]bfz:?]c
abc a:c a?c a]c afc azc
以下のため[
のアイデアと似ています。
$ touch a[c
$ ls a[[]c
a[c
ただし、ブラケット式の任意の位置に配置できます。
$ ls a[]bf[z:?]c
abc a:c a?c a[c a]c afc azc
$ ls a[]bfz:?[]c
abc a:c a?c a[c a]c afc azc
投稿した文字列は.[].foo[]
、ドットに続いてa ]
、a .
、a f
、a o
またはaのいずれかに一致します[
。次のようなものです。
$ echo a[].foo[]c
a[c a]c afc aoc
そして、次のように一致します。
$ touch .] .f .o .[ .a .b .z
$ echo .[].foo[]
.. .[ .] .f .o
..
デフォルトですべてのディレクトリ内に存在するため、ディレクトリエントリを作成する必要はありません。ただし、単純なドット.
は(実際にはドットを使用して)明示的に一致させる必要があるため、グロブとは一致しません。
しかし..aliases
、ブラケット式は1文字のみに一致するため、これは一致しません。複数の文字を一致させるには、*
(何でも)を使用する必要があります:
$ touch ..a ..l ..i ..aliases ..alias ..ali
$ echo .[].aliases[]
.. .[ .] .a
$ echo .[].aliases[]*
.. .[ .] .a ..a ..ali ..alias ..aliases ..i ..l