Está globbing um recurso do shell?

12

Eu li muitas perguntas e respostas como isso e este

Sei que curingas são expandidos pelo shell antes de executar um comando e são um recurso do shell. Também os caracteres curinga funcionam com esses comandos que podem aceitar muitos argumentos. Em find . -name *.rb , se tivermos mais de um arquivo no diretório atual, find nos dará um erro porque o find não pode aceitar vários argumentos e as maneiras de resolver isso são:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

Nós escapamos do asterisco e impedimos a expansão pelo shell, mas os curingas são uma característica do shell; quando escapamos do shell asterisco não sabemos sobre seu significado, e ele deve encontrar um arquivo chamado *.rb , então como o asterisco está sendo expandido neste caso?

    
por Sinoosh 22.09.2016 / 10:06

1 resposta

21

Sim, o shell entende * como todos os arquivos com qualquer caractere no diretório e *.rb como todos os arquivos com qualquer caractere e termina .rb , além de expandi-lo como tal.

O comando find aceita globbing.

Se você não citar o * , o shell expandirá antes , o comando find verá seu argumento, então, em vez de um glob *.rb passado para find , os nomes de todos os arquivos que correspondem ao glob no diretório serão passados para find e find tentará interpretá-los como argumentos, o que provavelmente resultará em um erro ou, pelo menos, não o que você deseja (funcionará corretamente somente se não houver arquivos correspondentes no diretório atual)

    
por Zanna 22.09.2016 / 10:18