Respostas:
Citando a partir da especificação 2 do Single Unix, versão "Commands & Utilities", §2.13.3 :
Se um nome de arquivo começar com um ponto (
.), o período deverá ser explicitamente correspondido usando um ponto como o primeiro caractere do padrão ou imediatamente após um caractere de barra. (…) Não é especificado se um período explícito em uma lista de correspondência de expressão entre colchetes, como[.abc]um período inicial em um nome de arquivo.
Não há nenhuma 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 curinga em .*. Portanto, o padrão diz que .*corresponde .e.. , por mais irritante que seja.
A passagem acima descreve o comportamento do shell ( shcomando). A seção na globfunção da biblioteca C faz referência a esta passagem.
O idioma é exatamente o mesmo na versão 3 , também conhecida como POSIX: 2001 e IEEE 1003.1-2001, que é o que a maioria dos sistemas atuais implementa.
Dash, bash e ksh93 estão em conformidade com o POSIX. Pdksh e zsh (mesmo abaixo emulate sh) não.
No ksh, você pode .*pular .e ..definir FIGNORE='.?(.)', mas isso tem o efeito colateral de criar *arquivos de ponto de inclusão. Ou você pode definir FIGNORE='.*', mas .*não corresponde a nada.
No bash, você pode fazer .*pular .e ..definir GLOBIGNORE='.:..', mas isso tem o efeito colateral de criar *arquivos de ponto de inclusão. Ou você pode definir GLOBIGNORE='.*', mas .*não corresponde a nada.
Provavelmente você quer dizer a funcionalidade na expansão bash sobre o globignore. Por padrão, a combinação de expansão do bash. e .. mas lendo o homem:
The GLOBIGNORE shell variable may be used to restrict the set of file names matching
a pattern. If GLOBIGNORE is set, each matching file name that also matches one of
the patterns in GLOBIGNORE is removed from the list of matches. The file names ``.''
and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting
GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option,
so all other file names beginning with a ``.'' will match. To get the old behavior
of ignoring file names beginning with a ``.'', make ``.*'' one of the patterns in
GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.
Você pode definir a variável GLOBIGNORE=.:..para quando digitar algo como isto:
rm -r * .*
você está removendo apenas o diretório atual. O padrão POSIX especifica apenas isso. é o diretório atual e .. no pai do diretório atual. O significado especial de. * É interpretado por bash ou outros shells (ou programas como grep).
A página de manual do Linux faz referência a POSIX.2, 3.13.
man, man globou o homem-páginas para estar presente? Não encontrei homem aqui (para minha surpresa).
Tanto quanto eu posso dizer, o LSB 4.1 não exige bashe apenas sh.
Para sh isso segue POSIX (com uma extensão menor não relevante).
bashnem sempre está em conformidade com o POSIX. somente quando é chamado comosh.