J'ai lu beaucoup de questions et réponses comme celle-ci et celle-ci
Je sais que les caractères génériques sont développés par le shell avant d'exécuter une commande et qu'ils sont une fonctionnalité du shell. Les caractères génériques fonctionnent également avec les commandes qui peuvent accepter de nombreux arguments. En find . -name *.rb
si nous avons plus d'un fichier dans le répertoire courant find
nous donnera une erreur , car trouver ne peut pas accepter de multiples arguments et les moyens de résoudre ce sont:
find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Nous échappons à l'astérisque et empêchons l'expansion par le shell, mais les caractères génériques sont une caractéristique du shell; lorsque nous échappons, le shell astérisque ne connaît pas sa signification, et il devrait trouver un fichier nommé *.rb
, alors comment l'astérisque est-il développé dans ce cas?
*
est cité, alors le shell ne le développera pas, et l'argument incluant le glob est passé à la commande qui peut comprendre le glob - c'est la même chose pour toutes les commandes qui acceptent l'expression régulière qui doit toujours être citée ...find
[archive filename single argument] [list of files to extract]
") par exemple.