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 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

$