Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[shell] traquer les variables non initialisées

2 réponses
Avatar
Manuel Pégourié-Gonnard
Bonjour,

Ayant subi récemment les conséquences assez désatreuses d'une erreur
dans le nom d'une variable dans un script shell, je me demande s'il y a
des moyens de traquer ce genre d'erreurs en shell. Par exemple, que
l'évaluation d'une variable non initialisée (sauf dans des contextes
particuliers comme test -z "$variable") provoque une erreur, comme c'est
possible dans d'autres langages.

Bon, en fait, je m'attends à ce que la réponse à cette question soit
négative et qu'on ne puisse pas faire ça en shell.

Du coup, ma question suivante est : y a-t-il des méthodes, dans
l'écriture et/ou le test de ses scripts shells, qui permettent de
minimiser la probabilité de telles erreurs ?

Merci d'avance pour vos conseils !

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/

2 réponses

Avatar
Cyrille Lefevre
Manuel Pégourié-Gonnard a écrit :
Bonjour,

Ayant subi récemment les conséquences assez désatreuses d'une err eur
dans le nom d'une variable dans un script shell, je me demande s'il y a
des moyens de traquer ce genre d'erreurs en shell. Par exemple, que
l'évaluation d'une variable non initialisée (sauf dans des contexte s
particuliers comme test -z "$variable") provoque une erreur, comme c'es t
possible dans d'autres langages.

Bon, en fait, je m'attends à ce que la réponse à cette question s oit
négative et qu'on ne puisse pas faire ça en shell.

Du coup, ma question suivante est : y a-t-il des méthodes, dans
l'écriture et/ou le test de ses scripts shells, qui permettent de
minimiser la probabilité de telles erreurs ?

Merci d'avance pour vos conseils !





Bonjour,

set -u est ton ami :

-u nounset Referencing of an unset param-
eter is treated as an error,
unless one of the -, + or =
modifiers is used.

ce qui fait que [[ -z $UNSET_VAR ]] provoque une erreur.
pour palier à ce pb, tu peux utiliser [[ -z ${UNSET_VAR-} ]] ou
le modificateur - entre ${} remplace $UNSET_VAR par une valeur
vide si la variable n'est pas initialisé et ne déclenche pas
d'erreur du à set -u. alternative, [[ ${VAR_SET+set} = set ]]
permet de déterminer si une variable existe qq soit sa valeur.

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Manuel Pégourié-Gonnard
Cyrille Lefevre scripsit :

set -u est ton ami :



Magnifique ! Je ne sais pas comment j'ai pu le manquer, il est en plein
milieu de la page de man, maintenant que je l'ai trouvé je ne vois que lui.

ce qui fait que [[ -z $UNSET_VAR ]] provoque une erreur.
pour palier à ce pb, tu peux utiliser [[ -z ${UNSET_VAR-} ]] ou
le modificateur - entre ${} remplace $UNSET_VAR par une valeur
vide si la variable n'est pas initialisé et ne déclenche pas
d'erreur du à set -u. alternative, [[ ${VAR_SET+set} = set ]]
permet de déterminer si une variable existe qq soit sa valeur.



Merci pour ces éclaircissements supplémentaire, bien utiles.

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/