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.