Citações da Especificação única do Unix versão 2, volume ”Comandos & Utilitários ", §2.13.3 :
If a filename begins with a period (
.
) the period must be explicitly matched by using a period as the first character of the pattern or immediately following a slash character. (…) It is unspecified whether an explicit period in a bracket expression matching list, such as[.abc]
can match a leading period in a filename.
Não há exceção que faria o segundo período em ..
ou a sequência vazia após o único período em .
, não correspondida pelo caractere curinga em .*
. Portanto, o padrão diz que .*
corresponde a .
e ..
, por mais irritante que seja.
A passagem acima descreve o comportamento do shell ( sh
command). A seção sobre a função de biblioteca glob
C faz referência a essa passagem.
A linguagem é exatamente a mesma na versão 3 , também conhecida como POSIX: 2001 e IEEE 1003.1-2001, que é o que a maioria dos sistemas atuais implementam.
Dash, bash e ksh93 estão em conformidade com o POSIX. Pdksh e zsh (mesmo sob emulate sh
) não.
Em ksh, você pode tornar .*
skip .
e ..
definindo FIGNORE='.?(.)'
, mas isso tem o efeito colateral de tornar *
incluir arquivos de ponto. Ou você pode definir FIGNORE='.*'
, mas .*
não corresponde a nada.
No bash, você pode tornar .*
skip .
e ..
definindo GLOBIGNORE='.:..'
, mas isso tem o efeito colateral de tornar *
incluir arquivos de ponto. Ou você pode definir GLOBIGNORE='.*'
, mas .*
não corresponde a nada.