¿Por qué "grep". * "file" work y "grep. * file" no?

Comparando

file grep '. * [s]'

con

file grep. * [s]

¿Por qué necesita comillas para que esto funcione correctamente? En el segundo caso, grep parece tratar de inspeccionar cada file con un punto.

Las comillas (ya sean simples o dobles) alnetworkingedor de un argumento inhiben la expansión global.

Su primer ejemplo pasa una expresión regular como argumento para grep . Su segundo ejemplo contiene un patrón glob que el mismo shell expande, pasando nombres de file que se ajustan a ese patrón como arguments para grep .

Compare también:

 echo '.*[s]' file 

con

 echo .*[s] file 

Esto produce los arguments como se ve por el command.

En su primer ejemplo, pasa su command grep exactamente dos arguments: el patrón y el file.

En su segundo ejemplo, su shell manejará el primer argumento y lo replaceá con todos los files que comiencen con un punto y terminen en "s". Por lo tanto, su command grep obtendrá múltiples arguments e intentará encontrar el primer nombre de file (expandido) en todos los otros nombres de file expandidos y en el file explícitamente especificado.