Bash lui-même ne reconnaît pas les expressions rationnelles. Dans les scripts, les commandes et utilitaires, tels que sed et awk, interprètent les ER.
Bash effectue bien l'expansion de noms de fichiers. [96] Ce processus est aussi connu sous le nom de « globbing » (NdT : remplacement) mais sans utiliser les ER standards. À la place, le remplacement reconnaît et étend les jokers. Le remplacement interprète les caractères jokers standards [97] -- * et ?, les listes de caractères entre crochets et certains autres caractères spéciaux (tels que ^ pour inverser le sens d'une correspondance). Néanmoins, il existe d'importantes limitations sur les caractères jokers dans le remplacement. Les chaînes contenant * ne restitueront pas les noms de fichiers commençant par un point, comme par exemple .bashrc. [98] De même, le ? a un sens différent dans le cadre du remplacement et comme partie d'une ER.
bash$ ls -l total 2 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l t?.sh -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh bash$ ls -l [ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 bash$ ls -l [a-c]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 bash$ ls -l [^ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l {b*,c*,*est*} -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt
Bash réalise une expansion du nom de fichier sur des arguments sans guillemets. La commande echo le démontre.
bash$ echo * a.1 b.1 c.1 t2.sh test1.txt bash$ echo t* t2.sh test1.txt bash$ echo t?.sh t2.sh
Il est possible de modifier la façon dont Bash interprète les caractères spéciaux lors du remplacement. Une commande set -f désactive le remplacement, et les options nocaseglob et nullglob de shopt modifient le comportement du remplacement.
Voir aussi l'Exemple 11.4, « Opérer sur des fichiers à l'aide d'une boucle for ».
[96] L'expansion de noms de fichiers interprète les caractères spéciaux afin d'étendre aux noms de fichiers qui concordent avec le patron donné. Par exemple, exemple.??? pourrait être étendu à exemple.001 et/ou exemple.txt.
[97] Un caractère joker, comme au poker, représente (presque) indifféremment n'importe quel autre caractère.
[98] L'expansion de noms de fichiers peut faire des correspondances avec les fichiers commençant par un point, mais seulement si le modèle inclut spécifiquement le point comme caractère littéral.
~/[.]bashrc # N'étendra pas en ~/.bashrc ~/?bashrc # Là non plus. # Les caractères jokers et autres métacaractères ne s'étendront # PAS en un point lors d'un remplacement. ~/.[b]ashrc # Sera étendu en ~./bashrc ~/.ba?hrc # Ici ausi. ~/.bashr* # De même. # Activer l'option "dotglob" désactive ceci. # Merci, S.C.