2.4. Paramètres non définis

Trois cas peuvent se présenter lorsque le shell doit évaluer un paramètre :

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 $ut1
root
$
$ echo $ut2

$ echo $1
bash: $1 : variable sans liaison	=> paramètre de position  1  non défini
$

Avec la syntaxe mentionnée ci-dessus, il est possible d’associer temporairement une valeur par défaut aux trois paramètres.

$ echo ${ut1:-sanchis}
root                     => ut1 étant définie non vide, sa valeur est utilisée
$
$ echo ${ut2:-sanchis}   => ut2 est définie et vide, la valeur de remplacement est utilisée
sanchis                  
$
$ echo ${1:-sanchis}
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
$