Qual é o símbolo *. * chamado?

12

Qual é o nome da

*.*

símbolo e qual é o seu significado?

    
por les 05.04.2014 / 20:04

7 respostas

20

Interpretação de *.* em sistemas Windows / DOS antigos

O significado aqui está mais relacionado ao Windows / DOS do que ao Unix / Linux. Nos antigos sistemas Windows / DOS, era um padrão 'curinga'. Os padrões de caracteres curinga foram usados para corresponder nomes de arquivos de maneira semelhante aos globs do Unix. O curinga *.* era comumente usado para corresponder a qualquer arquivo.

Assim como no Unix glob, o * corresponderá a qualquer sequência de caracteres em um nome de arquivo, e * por conta própria também corresponderá a qualquer arquivo. No entanto, o motivo pelo qual *.* corresponderá a qualquer nome de arquivo também é devido a diferenças na maneira como esses caracteres curinga funcionam. De acordo com este artigo :

Any characters other than a dot that come after an asterisk have no effect, since the asterisk moves the cursor to position 12, at which point nothing changes the parse state except for a dot, which clears the last three positions and moves the cursor.

Esse comportamento (um pouco estranho da perspectiva Unix) significa que um ponto após um * não corresponde realmente a um ponto, mas é apenas uma maneira rápida de permitir que você adicione mais caracteres ao padrão. Isso significa que adicionar outro * corresponderá a qualquer coisa nessas três últimas posições.

Isso faz um pouco mais de sentido quando você considera que a sintaxe era usada em sistemas DOS e Windows anteriores ao Windows 95, o que exigia 8.3 nomes de arquivos . Esses nomes de arquivos só podiam ter um ponto e no máximo três caracteres após o ponto. A maioria, se não todos os arquivos no sistema, teria uma extensão de três caracteres (embora tecnicamente uma extensão menor ou nenhuma fosse permitida), então acho que fazia sentido usar *.* para corresponder a qualquer arquivo (pelo menos de um Perspectiva lógica Windowsey).

Interpretação de *.* em shells Unix

Em shells Unix, como outros apontaram, isso representa uma 'expansão de nome de caminho' ou 'glob'. O * não tem nenhum salto estranho para o comportamento final e, portanto, não leva a caracteres após ele ser ignorado. O padrão *.* corresponderá a qualquer nome de arquivo contendo um ponto (exceto no início). Definitivamente, isso não corresponderá a nenhum arquivo, pois há muitos arquivos em um sistema Unix / Linux que não possuem uma extensão (ou contêm um ponto, pois isso também é permitido).

O motivo para *.* não corresponder a um ponto no início dos nomes de arquivo no Unix é porque colocar um ponto no início é como os arquivos são 'ocultos' e os arquivos ocultos são excluídos dos globs por padrão. Para combiná-los em um shell POSIX, um ponto precisa ser colocado explicitamente no início do padrão. Em bash , a opção dotglob shell pode ser definida ou a variável GLOBIGNORE pode ser definida adequadamente, mas essa é outra questão!

    
por 05.04.2014 / 22:28
11

glob no bash, Abaixo, citei o manual do bash:

bash - GNU Bourne-Again SHell

*

Matches any string, including the null string. When the globstar shell option is enabled, and * is used in a pathname expansion context, two adjacent *s used as a single pattern will match all files and zero or more directories and subdirectories. If followed by a /, two adjacent *s will match only directories and subdirectories.

Nesse caso, *.* corresponde a todos os arquivos que contêm um ponto . em seu nome.

Você pode ver mais detalhes aqui .

    
por 05.04.2014 / 20:15
8

O asterisco * é um glob no idioma da shell. Citação de Idioma de comando da Shell :

The asterisk ( '*' ) is a pattern that shall match any string, including the null string.

No entanto, ele não corresponde a nomes de arquivos que começam com . , a menos que a opção dotglob do shell esteja definida.

Quando você usa *.* , ele corresponde a qualquer coisa que:

  • não começa com .
  • contém pelo menos um .

Você também pode consultar a Expansão do nome do arquivo no manual.

    
por 05.04.2014 / 20:12
6

Muitas pessoas que vêm do Windows acham que *.* é para todos os arquivos. No Windows, é. No UNIX, são todos os arquivos que contêm pelo menos 1 ponto em seu nome. * por si só funciona muito bem no Windows (datando desde o início do DOS); no entanto, os livros antigos publicados *.* e parece ser um hábito difícil de quebrar.

    
por 05.04.2014 / 21:02
4

* é um curinga usado pelo shell para executar expansão de nome de arquivo , também conhecido como "globbing". * se expande para nada, incluindo nada (por exemplo, *.* corresponderá a file. , etc.). O outro curinga comum é ? , que corresponde a qualquer caractere único.

Não confunda a função desses curingas com o uso dos mesmos caracteres em expressões regulares (como aquelas usadas com o grep).

    
por 05.04.2014 / 20:13
3

Isso é estrela-ponto-estrela - pelo menos, no mundo do DOS (e mais tarde, é claro, do Windows). No DOS, o ponto . tem um significado mágico especial, porque os nomes dos arquivos são uma base de oito caracteres (posteriormente estendida, mas vamos continuar na velha escola) e uma extensão de três caracteres (que definiu o tipo de arquivo). No Unix, o tipo de arquivo é geralmente definido pelos dois primeiros bytes do arquivo (ou outra mágica), e a extensão é informativa, mas não tem muito significado. Exceto quando tudo isso ficou borrado.

Portanto, no Unix, não há um significado especial. O asterisco é um caractere "globbing" em shells Unix e é curinga para qualquer número de caracteres (incluindo zero). ? é outro caractere de globbing comum, correspondendo exatamente um de qualquer caractere.

*.* corresponde a qualquer nome de arquivo que contenha pelo menos um . . Não tem um nome especial ou qualquer significado mais do que *a* ou *_* . E *.? corresponderia a qualquer arquivo com um ponto e exatamente um caractere após esse ponto. Existem também alguns padrões de globbing ampliados mais complicados - veja a página man do seu shell.

O "New Hacker's Dictionary" (uma expansão do antigo "Jargon File" do MIT) observa que "star" é o nome mais comum para o símbolo * (seguido por splat ), e eu acho que ainda verdade na prática, e . é definitivamente comumente "ponto", então, embora não tenha nenhum significado especial intrínseco como um símbolo conglomerado, a sequência ainda é razoavelmente chamada estrela-ponto-estrela no Unix. (É apenas menos útil.)

    
por 07.04.2014 / 14:26
3

Aqui, existem dois símbolos, asterisco * e ponto . . As conchas normalmente só interpretam o asterisco como qualquer caractere, mas na regex isso significaria um globo guloso. Nesse caso, ele corresponderia a qualquer coisa que não termine ou comece com um ponto, mas contenha pelo menos um:

somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match
    
por 05.04.2014 / 21:33