Trois cas peuvent se présenter lorsque le shell doit évaluer un paramètre :
le paramètre n’est pas défini,
le paramètre est défini mais ne possède aucune valeur (valeur vide),
le paramètre possède une valeur non vide.
Lorsque l’option nounset de la commande interne set est positionnée à l’état on (commande set -o nounset), bash affiche un message d’erreur quand il doit évaluer un paramètre non défini.
$ set -o nounset => option nounset à l’état on $ $ echo $e => variable utilisateur e non définie, bash: e : variable sans liaison => message d’erreur ! $ $ set -- => paramètres de position sont réinitialisés $ echo $1 bash: $1 : variable sans liaison $ $ d= => d : variable définie mais vide $ $ echo $d => valeur null, pas d’erreur $
La présence de paramètres non définis ou définis mais vides dans une commande peut mener son exécution à l’échec. Afin de traiter ce type de problème, bash fournit plusieurs mécanismes supplémentaires de substitution de paramètres. L’un d’eux consiste à associer au paramètre une valeur ponctuelle lorsqu’il est non défini ou bien défini vide.
La syntaxe à utiliser est la suivante : ${paramètre:-chaîne}
$ set -o nounset $ $ ut1=root => ut1 définie et non vide $ ut2= => ut2 définie et vide $ $ echo Bienvenue usager $ut1 Bienvenue usager root => message correct $ $ echo Bienvenue usager $ut2 Bienvenue usager => message incomplet ! $ $ echo Bienvenue usager $1 bash: $1 : variable sans liaison => erreur ! $
Avec la syntaxe mentionnée ci-dessus, il est possible d’associer temporairement une valeur par défaut aux trois paramètres.
$ echo Bienvenue usager ${ut1:-sanchis} Bienvenue usager root => ut1 étant définie non vide, sa valeur est utilisée $ $ echo Bienvenue usager ${ut2:-sanchis} Bienvenue usager sanchis => ut2 est définie et vide, la valeur de remplacement $ => est utilisée $ echo Bienvenue usager ${1:-sanchis} Bienvenue usager sanchis => le premier paramètre de position est non défini, la $ => valeur de remplacement est utilisée $
Cette association ne dure que le temps d’exécution de la commande.
$ echo $1 bash: $1 : variable sans liaison => le paramètre est redevenu indéfini $
La commande set +o nounset positionne l’option nounset à l’état off : le shell traite les paramètres non définis comme des paramètres vides.
$ set +o nounset => option nounset à l’état off $ $ echo $e => variable e non définie => aucune erreur signalée $ $ echo $2 => aucune erreur signalée $ $ f= => f : variable définie vide $ echo $f $