3. Casamento de Padrões no Shell

Você provavelmente já utiliza o casamento de padrões sem mesmo conhecê-lo. Quando especifica um arquivo no Windows®, ou quando procura por um arquivo, você utiliza o caractere * para espedificar uma string variável. Por exemplo, *.txt "casa" com todos os arquivos cujos nomes terminem em .txt. Também utilizamo-nos dele várias vezes na última seção. Entretanto, existem muitos outros casamentos de padrão além do *.

Quando você digita um comando como ls *.txt e pressiona Enter, a tarefa de encontrar quais arquivos casam com o padrão *.txt não é feita pelo comando ls, mas sim pelo próprio shell. Aqui se faz necessária uma pequena explicação de como a linha de comando é interpretada pelo shell. Quando você digita:

$ ls *.txt
readme.txt  recipes.txt

a linha de comando é inicialmente dividida em palavras (ls e *.txt nesse exemplo). Quando o shell encontra um * em uma palavra, ele irá interpretar a palavra inteira como um casamento de padrões e irá substituir ela pelos nomes de todos os arquivos que casem com aquele padrão. Então, o comando, exatamente antes de ser executado pelo shell se tornou ls readme.txt recipe.txt, que retorna o resultado esperado. Outros caracteres fazem com que o shell também reaja dessa maneira:

Alguns padrões e seus significados:



[14] Cuidado! Enquanto que isso é verdade para a maioria das linguagens, pode não ser verdade para a sua própria configuração de linguagem (localização). Isso depende da ordem de combinação. Em algumas configurações de linguagens, [a-z] irá casar a, A, b, B, (...), z. E lembre-se do fato que algumas linguagens também tem caracteres acentuados ...