The filenames
.
and..
are always ignored whenGLOBIGNORE
is set and not null.
Na maioria das vezes, não é desejável incluir .
e ..
como correspondências curinga, já que elas não representam arquivos dentro do diretório - elas são hacks para fazer a navegação no diretório funcionar. Na verdade, a origem dos arquivos de pontos é um bug em uma versão anterior do comando ls
. O autor pretendia excluir .
e ..
da listagem, mas excluiu acidentalmente todos os arquivos que começam com .
. Assim, os arquivos dot ficaram ocultos de ls
. Shells seguiram o exemplo, ocultando arquivos de pontos como ls
. No entanto, a maneira como isso foi feito foi novamente um hack: os arquivos que começam com .
são excluídos apenas se o ponto não for correspondido explicitamente no padrão. Portanto, o padrão .*
inclui .
e ..
.
Para preservar a compatibilidade com os scripts existentes, os shells modernos ainda incluem .
e ..
(exceto zsh, que nessa questão como muitos outros tem um comportamento mais seguro, mas não compatível com versões anteriores). No entanto, se você definir GLOBIGNORE
, estará usando um recurso específico do bash, o que mostra que você não está interessado em compatibilidade com versões anteriores. Portanto, as alterações de correspondência de padrões excluem .
e ..
de todas as correspondências de padrões.
A definição de GLOBIGNORE=.
exclui um arquivo que é excluído automaticamente sempre que GLOBIGNORE
é definido, por isso é equivalente a shopt -s dotglob
, exceto que .
e ..
são excluídos de todos os padrões.