Por que “grep '. * [s]' file 'funciona e“ grep. * [s] file ”não funciona?

3

Comparando

grep '.*[s]' file

com

grep .*[s] file

Por que você precisa de aspas para que isso funcione corretamente? No segundo caso, o grep parece tentar inspecionar cada arquivo com um ponto.

    
por John H. K. 25.01.2015 / 12:02

2 respostas

4

Citações (simples ou duplas) em torno de um argumento inibem a expansão glob.

Seu primeiro exemplo passa uma Expressão Regular como um argumento para grep . Seu segundo exemplo contém um padrão glob que o próprio shell se expande, passando nomes de arquivos que se encaixam nesse padrão como argumentos para grep .

    
por 25.01.2015 / 12:06
3

Compare também:

echo '.*[s]' file

com

echo .*[s] file

Isto produz os argumentos conforme visto pelo comando.

No seu primeiro exemplo, você passa o comando grep exatamente dois argumentos: o padrão e o arquivo.

No seu segundo exemplo, seu shell irá lidar com o primeiro argumento e o substituirá por todos os arquivos que começam com um ponto e terminam em "s". Portanto, seu comando grep receberá vários argumentos e tentará encontrar o primeiro nome de arquivo (expandido) em todos os outros nomes de arquivos expandidos e o arquivo explicitamente especificado.

    
por 25.01.2015 / 12:20