Qual é o nome para o
*.*
símbolo e qual é o seu significado?
*.*
sistemas Windows / DOS antigosO significado aqui está mais relacionado ao Windows / DOS do que ao Unix / Linux. Nos sistemas Windows / DOS antigos, era um padrão 'curinga'. Os padrões curinga foram usados para combinar nomes de arquivos de maneira semelhante aos globs do Unix. O *.*
curinga era comumente usado para corresponder a qualquer arquivo.
Assim como ocorre com um glob Unix, *
ele corresponderá a qualquer sequência de caracteres em um nome de arquivo, por *
si só também corresponderá a qualquer arquivo. No entanto, o motivo pelo qual *.*
também corresponderá a qualquer nome de arquivo é devido a diferenças na maneira como esses curingas funcionam. De acordo com este artigo :
Qualquer caractere que não seja um ponto que vem após um asterisco não tem efeito, pois o asterisco move o cursor para a posição 12; nesse ponto, nada altera o estado de análise, exceto um ponto, que limpa as três últimas posições e move o cursor.
Esse comportamento (um pouco estranho da perspectiva do Unix) significa que um ponto após a *
na verdade não corresponde a um ponto, mas é apenas uma maneira imprudente 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 foi usada no DOS e nos sistemas Windows antigos anteriores ao Windows 95, que exigiam nomes de arquivos 8.3 . Esses nomes de arquivos só podem ter um ponto e no máximo três caracteres após o ponto. A maioria, se nem todos os arquivos no sistema tivessem uma extensão de três caracteres (mesmo que tecnicamente uma extensão mais curta ou nenhuma fosse permitida), então, de alguma forma, acho que fazia sentido usar *.*
para corresponder a qualquer arquivo (pelo menos da perspectiva lógica do Windowsey distorcida) )
*.*
shells em UnixNos shells do Unix, como outros já apontaram, isso representa uma 'expansão de nome de caminho' ou 'glob'. O *
comportamento não tem nenhum salto estranho para o final e, portanto, não leva os caracteres a serem ignorados. *.*
O padrão corresponderá a qualquer nome de arquivo que contenha 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 têm extensão (ou contêm um ponto, pois isso também é permitido).
A razão para *.*
não combinar um ponto no início dos nomes de arquivos 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 explicitamente colocado no início do padrão. bash
Na dotglob
opção de shell pode ser definido ou a GLOBIGNORE
variável pode ser definida de forma adequada, mas isso é outra questão!
*7.*
, obtenha todos os arquivos cujo último caractere antes da extensão seja7
e*sa*
, com , recebo todos os arquivos que contêm a substringsa
em qualquer lugar do arquivo e assim por diante. (Assim, o artigo que você cita é intitulado Como fez wildcards trabalhar no MS-DOS ? (Ênfase acrescentada por mim).)Está
glob
no bash, Abaixo citei o manual do bash:Nesse caso,
*.*
corresponda a qualquer arquivo que contenha um ponto.
em seu nome.Você pode ver mais detalhes aqui .
fonte
O asterisco
*
é umaglob
linguagem shell. Citando a partir da linguagem de comando do Shell :No entanto, ele não corresponde aos nomes de arquivos que começam com a
.
menos que a opção shelldotglob
esteja definida.Quando você usa
*.*
, corresponde a qualquer coisa que:.
.
Você também pode consultar a Expansão do nome do arquivo no manual.
fonte
Muitas pessoas vindas 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 (desde o início do DOS); no entanto, os livros antigos publicaram*.*
e parece ser um hábito difícil de romper.fonte
*
é um curinga usado pelo shell para executar a expansão do nome do arquivo , também conhecido como "globbing".*
expande para qualquer coisa, incluindo nada (por exemplo,*.*
corresponderáfile.
etc.). O outro curinga comum é o?
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 grep).
fonte
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 de arquivos têm uma base de oito caracteres (posteriormente estendidos, mas vamos continuar à moda antiga) 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 ficar embaçado.Portanto, no Unix, não há significado especial. O asterisco é um caractere "globbing" nos shells do Unix e é um curinga para qualquer número de caracteres (incluindo zero).
?
é outro personagem globbing comum, correspondendo exatamente a qualquer personagem.*.*
corresponde a qualquer nome de arquivo que contenha pelo menos um.
. Ele não tem um nome especial ou qualquer significado além de*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 estendidos mais complicados - consulte a página de manual do seu shell.O "New Hacker's Dictionary" (uma expansão do antigo "Jargon File" do MIT) observa que "estrela" é o nome mais comum para o
*
símbolo (seguido porsplat
), e acho que isso ainda é verdade na prática e.
é definitivamente comum " ponto ", portanto, embora não tenha nenhum significado especial intrínseco como símbolo conglomerado, a sequência ainda é razoavelmente chamada estrela-ponto-estrela no Unix. (É apenas menos útil.)fonte
Aqui existem 2 símbolos, asterisco
*
e ponto.
. As conchas normalmente apenas interpretam o asterisco como qualquer caractere, mas, em regex, isso significaria um globo ganancioso. Nesse caso, seria compatível com qualquer coisa que não termine ou comece com um ponto, mas contenha pelo menos um:fonte
onlydotatend.
caso é uma partida, com certeza?touch 'onlydotatend.' && echo *.*
não retorná-lobash
edash
. Qual shell você está usando?zsh
configuração de baunilha e funciona lá também. Eu não entendo comoonlydotatend.
não pode ser uma correspondência, existe uma opção de configuração que faz isso?