Que signifie le point d'interrogation dans la commande de terminal?


Réponses:


15

Ceux-ci sont appelés Wildcards (motifs de globbing)

Les caractères génériques standard (également appelés modèles de globalisation) sont utilisés par divers utilitaires de ligne de commande pour travailler avec plusieurs fichiers.
Les caractères génériques standard sont utilisés par presque toutes les commandes (y compris mv, cp, rm et bien d'autres).

  • (question mark)

    cela peut représenter n'importe quel caractère. Si vous avez spécifié quelque chose sur la ligne de commande comme "hd?" GNU / Linux rechercherait hda, hdb, hdc et toutes les autres lettres / chiffres entre az, 0-9.

  • *(asterisk)

    cela peut représenter n'importe quel nombre de caractères (y compris zéro, en d'autres termes, zéro ou plusieurs caractères). Si vous spécifiez un "cd *", il utilisera "cda", "cdrom", "cdrecord" et tout ce qui commence par "cd", y compris "cd" lui-même. "m * l" pourrait par mill, mull, ml et tout ce qui commence par un m et se termine par un l.

  • [ ] (square brackets)

    spécifie une plage. Si vous avez fait m [a, o, u] m, cela peut devenir: maman, maman, maman si vous avez fait: m [ad] m, cela peut devenir tout ce qui commence et se termine par m et a n'importe quel caractère de a à d entre les deux. Par exemple, cela fonctionnerait: mam, mbm, mcm, mdm. Ce type de caractère générique spécifie une relation «ou» (vous n'avez besoin que d'une seule correspondance).

  • { } (curly brackets)

    les termes sont séparés par des virgules et chaque terme doit être le nom de quelque chose ou un caractère générique. Ce caractère générique copiera tout ce qui correspond au ou aux caractères génériques ou au (x) nom (s) exact (s) (une relation «ou», l'une ou l'autre).


Par exemple, ce serait valide:

  • cp { .doc, .pdf} ~

    Cela copiera tout ce qui se termine par .doc ou .pdf dans le répertoire personnel des utilisateurs. Notez que les espaces ne sont pas autorisés après les virgules (ou n'importe où ailleurs).

  • [!]

    Cette construction est similaire à la construction [], sauf qu'au lieu de faire correspondre les caractères à l'intérieur des crochets, elle correspondra à n'importe quel caractère, tant qu'elle n'est pas répertoriée entre les [et]. C'est un NON logique. Par exemple, rm myfile [! 9] supprimera tous mes myfiles * (c'est-à-dire. Myfiles1, myfiles2 etc.) mais ne supprimera pas un fichier avec le numéro 9 n'importe où dans son nom.

  • \ (backslash)

    est utilisé comme caractère "d'échappement", c'est-à-dire pour protéger un caractère spécial ultérieur. Ainsi, "\" recherche une barre oblique inverse. Notez que vous devrez peut-être utiliser des guillemets et des barres obliques inverses.

pour plus d'exemples: visitez cette page


3
Il convient de mentionner que cela apt-get removenécessite des noms de packages , pas des noms de fichiers, ce qui rend l'expansion des caractères génériques par le shell largement inutile. Si vous souhaitez supprimer une plage de packages, vous devez utiliser une expression régulière complète, citée de manière appropriée pour empêcher le shell d'essayer de l'interpréter comme un glob (par exemple apt-get remove 'gnome.*').

4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> FAUX. ces caractères génériques sont développés par le shell et ce que la commande reçoit est le résultat de l'expansion (c'est-à-dire les fichiers qui correspondent au modèle) au lieu du modèle. (s'il n'y a pas de fichier correspondant au modèle, ce modèle sera transmis directement à la commande, cependant)
Carlos Campderrós

17

De manière générale, dans Bash, a ?est un modèle global qui se développe en un caractère arbitraire.

Par exemple:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

Il s'apparente à a *, mais a se *développe à 0 ou plusieurs caractères, tandis que a se ?développe à exactement un caractère (arbitraire).

Dans votre cas particulier, ?la commande était apparemment une faute de frappe.


Donc c'est inutile / inutile dans mon cas, non?
Ooker

Oui. En fait, il a été supprimé de la réponse à laquelle vous avez lié lorsque vous avez posé votre question. :)
Malte Skoruppa

1
Je ne peux pas le croire: -o
Ooker

1
Même s'il s'agissait de caractères génériques corrects, cette utilisation doit être évitée sans citer. apt-get comprendre les RE, mais si un fichier appelé gnome1existe dans le répertoire courant, le shell le développera avant qu'apt-get ait la moindre chance de le voir.
Rmano

@Ooker Vous ne l'oublierez jamais maintenant!
comrademike
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.