Je lis beaucoup de questions et réponses comme this et celui-ci
Je sais que les shell sont développés par le shell avant d’exécuter une commande et qu’ils sont une fonctionnalité du shell. De plus, les caractères génériques fonctionnent avec les commandes pouvant accepter de nombreux arguments. Dans find . -name *.rb
si nous avons plus d'un fichier dans le répertoire en cours, find
nous donnera une erreur car find ne peut pas accepter plusieurs arguments et voici comment résoudre ce problème:
find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Nous échappons à l'astérisque et empêchons le développement par Shell, mais les caractères génériques sont une caractéristique de Shell; Lorsque nous échappons à l'astérisque, Shell ne connaît pas sa signification et devrait trouver un fichier nommé *.rb
. Comment l'astérisque est-il développé dans ce cas?
Oui, le shell comprend *
comme tous les fichiers contenant des caractères dans le répertoire et *.rb
comme tous les fichiers contenant des caractères et se terminant par .rb
, et le développe en tant que tel.
La commande find
accepte elle-même la suppression.
Si vous ne citez pas le *
, alors le shell le développera avant la commande find
voit son argument, donc au lieu d'un glob *.rb
passé à find
, les noms de tous les fichiers correspondant au glob du répertoire seront passés à find
, et find
essaiera de les interpréter en tant qu'arguments, ce qui entraînera probablement une erreur, ou le moins pas ce que vous voulez (cela ne fonctionnera correctement que s'il n'y a pas de fichiers correspondants dans le répertoire actuel)