Somente seqüências de caracteres citadas não estão sujeitas a globbing:
$ echo ".[].aliases[]"
.[].aliases[]
Mas strings sem aspas estão sujeitas a globbing. Uma sequência não cotada que contém um *ou um ?ou (válido) [](expressão entre colchetes) será modificada pela lista de arquivos que correspondem a ela. Da mesma maneira que a *se transformará em todos os arquivos no diretório correspondente e a ?corresponderá a arquivos de apenas um caractere, a (válido) []corresponderá aos arquivos com os caracteres dentro dos colchetes. Um ponto é um caractere válido:
$ echo a[.]b
a[.]b
$ touch "a.b"
$ echo a[.]b
a.b
Para poder corresponder a ], deve ser o primeiro caractere entre colchetes:
$ touch "a]b"
$ ls a[]]b
a]b
Uma expressão de colchete vazio não faz sentido (e não é expandida):
$ touch ab
$ ls a[]b
ls: cannot access 'a[]b': No such file or directory
É por isso que isso funciona:
$ touch a]c abc afc azc a:c a?c aoc
$ ls a[]bfz:?]c
abc a:c a?c a]c afc azc
Para [a idéia é semelhante:
$ touch a[c
$ ls a[[]c
a[c
mas poderia estar em qualquer posição em uma expressão entre colchetes:
$ 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
A string que você postou .[].foo[]corresponderá a um ponto seguido por a ], a ., a f, a oou a [. É similar à:
$ echo a[].foo[]c
a[c a]c afc aoc
E corresponderá da seguinte forma:
$ touch .] .f .o .[ .a .b .z
$ echo .[].foo[]
.. .[ .] .f .o
Observe que a entrada do diretório ..não precisa ser criada, pois existe dentro de cada diretório por padrão. Mas um ponto simples .não será correspondido por um globo, pois precisa ser correspondido explicitamente (usando realmente um ponto).
Mas isso não corresponderá, ..aliasespois a expressão entre colchetes corresponderá apenas a um caractere. Para combinar vários caracteres, você precisa usar um *(qualquer coisa):
$ touch ..a ..l ..i ..aliases ..alias ..ali
$ echo .[].aliases[]
.. .[ .] .a
$ echo .[].aliases[]*
.. .[ .] .a ..a ..ali ..alias ..aliases ..i ..l