Pourquoi le file "grep '. * " et le file "grep. * " ne le sont-ils pas?

Comparant

grep '. * [s]' file

avec

grep. * [s] file

Pourquoi avez-vous besoin de guillemets pour que cela fonctionne correctement? Dans le second cas, grep semble essayer d'inspecter chaque file avec un point.

    Les citations (simples ou doubles) autour d'un argument inhibent l'expansion de glob.

    Votre premier exemple transmet une expression régulière en tant qu'argument à grep . Votre deuxième exemple contient un model glob que le shell lui-même développe, en passant des noms de files qui correspondent à ce model en tant qu'arguments à grep .

    Comparez aussi:

     echo '.*[s]' file 

    avec

     echo .*[s] file 

    Cela produit les arguments vus par la command.

    Dans votre premier exemple, vous transmettez exactement deux arguments à votre command grep : le model et le file.

    Dans votre deuxième exemple, votre shell traitera le premier argument et le replacea par tous les files commençant par un point et se terminant par "s". Par conséquent, votre command grep obtiendra plusieurs arguments et essaiera de find le premier nom de file (étendu) dans tous les autres noms de files développés et dans le file explicitement spécifié.