O comportamento de .*
incluir .
e ..
definir no LSB ou POSIX ou em alguma outra especificação?
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 ( sh
comando). A seção na glob
funçã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.
bash
nem sempre está em conformidade com o POSIX. somente quando é chamado comosh
.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:
Você pode definir a variável
GLOBIGNORE=.:..
para quando digitar algo como isto: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).
fonte
A página de manual do Linux faz referência a POSIX.2, 3.13.
fonte
man
,man glob
ou 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
bash
e apenassh
.Para
sh
isso segue POSIX (com uma extensão menor não relevante).fonte