Pourquoi l’interpréteur de shell interprète-t-il des caractères entre guillemets simples?

J’utilise shell bash

$cat test a --b $grep '--b' test grep: option `--b' is ambiguous Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. $grep "--b" test grep: option `--b' is ambiguous Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. $grep '\-\-b' test a --b 

Le livre de script shell classique au chapitre 7 “Evaluation des entrées et des sorties, des fichiers et des commandes” de la section 7.7 indique que

“Les guillemets simples obligent le shell à tout traiter entre les guillemets littéralement”.

Alors pourquoi les guillemets simples ne fonctionnent-ils pas plus haut?

La coquille les traite littéralement. Mais le shell n’est pas responsable de la manière dont l’ application les traite. C’est à l’application de décider comment elle veut gérer le --b passé en argument.

La plupart des utilitaires gnu ignorent --options after -- , vous pouvez donc plutôt faire un grep -- --b test . Et comme vous étiquetez votre question linux , il y a des chances que vous ayez gnu grep.