Expressões regulares e globbing de nomes de arquivos são duas coisas muito diferentes.
Expressões regulares são usadas em comandos / funções para correspondência de padrões no texto. Por exemplo, no parâmetro padrão de grep ou nas linguagens de programação.
A globbing de nomes de arquivos é usada por shells para corresponder nomes de arquivos e diretórios usando curingas. Os recursos de globbing dependem do shell. O Bash, por exemplo, suporta curingas como:
-
*corresponde a 0 ou mais caracteres -
?corresponde a 1 caractere -
[...]corresponde a um caractere no conjunto especificado
Esses curingas podem ser semelhantes a expressões regulares, de fato [...] tem o mesmo significado em globbing e regex. Mas * e ? significam coisas diferentes em globbing e regex.
Em um comentário que você escreveu:
mas como a diferença do intérprete * se é um joker ou regex? por exemplo:
grep a*b a*.txt?
Fácil. Mais ou menos.
Antes de mais nada, o shell tenta interpretar os curingas, combinando-os com nomes de arquivos. Se houver arquivos começando com "a" e terminando com "b", o shell substituirá a*b pelos nomes de arquivos correspondentes. O mesmo vale para a*.txt . Se não houver nomes de arquivos correspondentes, o shell passará os argumentos para grep como eram, literalmente.
No entanto, o primeiro parâmetro de grep deve ser um padrão.
Em 99,999% dos casos de uso prático, você não quer que o primeiro parâmetro seja interpretado pelo shell. Então, provavelmente, a intenção era esta:
grep "a*b" a*.txt
Graças à citação de a*b , o shell não irá interpretá-lo usando globbing e passará diretamente para grep . Por sua vez, grep interpretará isso
como uma expressão regular (por design).
Para resumir, o shell interpreta a linha de comando seguindo sua própria linguagem globbing, que está usando curingas. Comandos, programas interpretam seus parâmetros da maneira que foram projetados por seus autores.