4.3. Options relatives aux caractères et expressions génériques

  1. Pour gérer ses propres options, bash intègre deux commandes : set et shopt.

    D’un point de vue pratique,

    • pour connaître l'état des options de la commande interne set : set –o

    • pour activer une option de la commande interne set : set –o option

    • pour désactiver une option de la commande interne set : set +o option

    • pour connaître l'état des options de la commande interne shopt : shopt

    • pour activer une option de la commande interne shopt : shopt -s option

    • pour désactiver une option de la commande interne shopt : shopt -u option

  2. Outre extglob, d’autres options de la commande interne shopt permettent de modifier la création de la liste des noms d’entrées. Ces options sont : dotglob, nocaseglob, nullglob, failglob. Par défaut elles sont inactives (off).

    A l’état on :

    • dotglob signifie que les noms d’entrées commençant par . (caractère point) seront également traités

    • nocaseglob signifie que les majuscules et minuscules ne seront pas différenciées

    • nullglob signifie qu’un modèle ne correspondant à aucune entrée sera remplacé par une chaîne vide et non par le modèle lui-même

    • failglob signifie qu’un modèle ne correspondant à aucune entrée provoquera une erreur.

    $ pwd
    /home/sanchis/glob
    $
    $ ls -la
    total 8
    drwxr-xr-x 2 sanchis sanchis 4096 nov.  24  2011 .
    drwxr-xr-x 5 sanchis sanchis 4096 nov.  27  2012 ..
    -rw-r--r-- 1 sanchis sanchis    0 nov.  24  2011 .sessions
    -rw-r--r-- 1 sanchis sanchis    0 nov.  24  2011 video
    -rw-r--r-- 1 sanchis sanchis    0 nov.  24  2011 viDEos
    $ 
    $ echo p*
    p*					=> comportement par défaut
    $ 
    $ shopt -s nullglob
    $ 
    $ echo p*
    					=>  chaîne vide	
    $ 
    $ shopt -s failglob
    $
    $ echo p*
    bash: Pas de correspondance : p*	=> message d’erreur
    $
    $ echo *s*
    viDEos					=> comportement par défaut
    $ 
    $ shopt -s dotglob
    $ 
    $ echo *s*
    .session viDEos			=> fichier caché .session pris en compte
    $ 
    $ echo *d*					
    Video					=> comportement par défaut
    $ 
    $ shopt -s nocaseglob
    $ 
    $ echo *d*
    video viDEos
    $
  3. A l’état on, l’option noglob de la commande interne set supprime l’interprétation des caractères et expressions génériques.

    $ ls -la
    total 8
    drwxr-xr-x 2 sanchis sanchis 4096 mars  27 20:21 .
    drwxr-xr-x 7 sanchis sanchis 4096 mai    4 16:37 ..
    -rw-r--r-- 1 sanchis sanchis    0 nov.  24  2011 .sessions
    -rw-r--r-- 1 sanchis sanchis    0 nov.  24  2011 video
    -rw-r--r-- 1 sanchis sanchis    0 nov.  24  2011 viDEos
    $
    $ shopt -u dotglob	=> le fichier caché .session ne sera pas pris en compte
    $ shopt -s extglob	=> interprétation des expressions génériques activée
    $ set +o noglob		=> interprétation des caractères génériques activée
    $
    $ echo +([[:lower:]]) *
    video video videos	
    $
    $ set –o noglob 		=> suppression de l’interprétation
    $ set -o | grep noglob
    noglob         	on
    $
    $ echo +([[:lower:]]) *
    +([[:lower:]]) *		=> aucune interprétation
    $