De nos jours, on trouve également une routine de bibliothèque nommée glob(3) qui effectue le même travail en étant invoquée par un programme utilisateur.
Les règles de développement sont les suivantes (POSIX.2, 3.13).
Un « ? » (non inclus dans des crochets) correspond à n'importe quel caractère.
Un « * » (non inclus dans des crochets) correspond à n'importe quelle chaîne, y compris la chaîne vide.
Classes de caractères
Une expression du type « [...] », dans laquelle le premier caractère après le « [ » n'est pas un « ! » est mise en correspondance avec un seul des caractères contenus entre les crochets. L'ensemble des caractères cités ne peut pas être vide, ainsi, le crochet fermant « ] » peut être présent dans l'ensemble, à la condition qu'il soit en première place. Par conséquent, la chaîne « [][!] » peut être mise en correspondance avec l'un des trois caractères « [ », « ] » et « ! ».
Intervalles
Il existe une convention particulière, suivant laquelle deux caractères séparés par un tiret « - » indiquent un intervalle. Ainsi, « [A-Fa-f0-9] » équivaut à « [ABCDEFabcdef0123456789] ». Pour inclure un tiret au sens littéral, il suffit de l'utiliser en premier ou en dernier entre les crochets. Ainsi, « []-] » correspond uniquement aux caractères « ] » et « - », et « [--0] » correspond aux trois caractères « - », « . » et « 0 », puisqu'il ne peut y avoir de correspondance avec « / ».
Négation
Une expression « [!...] » correspond à n'importe quel caractère qui ne puisse pas être mis en correspondance avec la chaîne obtenue en supprimant le « ! » initial (ainsi, « [!]a-] » correspond à tout caractère sauf « ] », « a » et « - »).
On peut désactiver le comportement spécial des caractères « ? », « * » et « [ » en les faisant précéder par une barre oblique inverse « \ », ou, dans le cas d'une ligne de commande shell, en les encadrant par des guillemets. Entre crochets, ces caractères ne prennent que leur signification littérale. Ainsi, « [[?*\] » correspond aux quatre caractères « [ », « ? », « * » et « \ ».
Si un nom de fichier commence par un « . », ce caractère doit être mis en correspondance explicitement (ainsi, rm * ne supprimera pas .profile, et tar c * n'archivera pas tous les fichiers ; tar c .serait préférable).
xv -wait 0 *.gif *.jpg
alors qu'il n'y a peut-être aucun fichier *.gif présent (et on ne peut pas considérer cela comme une erreur). Toutefois, POSIX réclame qu'un motif soit laissé inchangé s'il est syntaxiquement incorrect, ou si la liste des noms de fichiers correspondants est vide. On peut forcer bash à adopter le comportement classique en utilisant cette commande :
shopt -s nullglob
(Des problèmes similaires se produisent ailleurs. Par exemple, de vieux scripts avec
rm `find . -name "*~"`
devraient être remplacés par des nouveaux scripts contenant
rm -f fichier-non-existant `find . -name "*~"`
pour éviter les messages d'erreurs si rm est invoqué avec une liste vide d'arguments).
Maintenant que les expressions rationnelles disposent de composants entre crochets où la négation est indiquée par un « ha », POSIX a précisé que le motif générique « [ha...] » a un effet indéfini.
(iii) Les intervalles X-Y comprenant tous les caractères se trouvant entre X et Y (inclus) dans l'ordre de l'alphabet décrit par la catégorie LC_COLLATE de la localisation en cours.
(iv) Des classes de caractères comme
[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
Ainsi, on peut écrire « [[:lower:]] » à la place de « [a-z] », et que le comportement soit aussi valable au Danemark, où il existe 3 lettres postérieures au « z ». Ces classes de caractères sont définies par la catégorie LC_CTYPE des paramètres régionaux actuels.
(v) Les symboles groupant plusieurs lettres comme « [.ch.] » ou « [.a-acute.] », dans lesquels les chaînes entre « [. » et « .] » sont un élément de classement (collating element) défini dans la localisation en cours. Il peut également s'agir de multicaractères.
(vi) Des classes d'équivalence comme « [=a=] », où la chaîne entre « [= » et « =] » est un élément de classement définissant une classe d'équivalence dans la localisation en cours. Par exemple, « [[=a=]] » peut être équivalent à « [aáàäâ] », c'est-à-dire « [a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]] ».
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à