Только цитируемые строки не подлежат сглаживанию:
$ echo ".[].aliases[]"
.[].aliases[]
Но строки без кавычек могут быть повреждены. Строка без кавычек, содержащая *или a ?или (допустимое) [](выражение в скобках), будет изменена списком файлов, которые ей соответствуют. Аналогично тому, как a *преобразуется во все файлы в соответствующем каталоге, а a ?будет сопоставлять файлы только с одним символом, так (действительный) []будет сопоставлять файлы с символами в скобках. Точка является допустимым символом:
$ echo a[.]b
a[.]b
$ touch "a.b"
$ echo a[.]b
a.b
Чтобы иметь возможность соответствовать a, ]это должен быть первый символ в скобках:
$ 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как выражение в скобках будет соответствовать только одному символу. Чтобы сопоставить несколько символов, вам нужно использовать *(что угодно):
$ touch ..a ..l ..i ..aliases ..alias ..ali
$ echo .[].aliases[]
.. .[ .] .a
$ echo .[].aliases[]*
.. .[ .] .a ..a ..ali ..alias ..aliases ..i ..l