Bash: `-su: $ *: variable non liée` avec` set -u`


8

Il s'agit d'un système FreeBSD 7.x exécutant GNU bash version 4.0.

Dans Bash, l' set -uoption peut forcer un shell à afficher une erreur s'il rencontre une variable non définie, comme ceci:

$ set -u
$ echo $THISISUNSET
-su: THISISUNSET: unbound variable
$ echo $?
1

Cependant, je rencontre également cette même erreur pour $ *:

$ echo $*
-su: $*: unbound variable
$ echo $?
1
$ echo $@
-su: $@: unbound variable

Le manuel de Bash 4.3.1 Le Set Builtin dit spécifiquement qu'il set -uignore $ * et $ @:

-u Traite les variables et paramètres non définis autres que les paramètres spéciaux '@' ou '*' comme une erreur lors de l'expansion des paramètres. Un message d'erreur sera écrit dans l'erreur standard et un shell non interactif se fermera.

Comment puis-je réparer cela?

Réponses:


11

Il s'agit d'un bogue dans les anciennes versions de bash, en particulier le niveau de patch 4.0 β2 d au niveau de patch 4.0 m. Du journal des modifications de 4.0 à 4.1 α:

n. Correction du comportement de set -upour se conformer à la dernière interprétation Posix: chaque expansion d'une variable non définie à l'exception de $ @ et $ * entraînera la fermeture du shell.

Ce comportement a été introduit dans la version 4.0β2 car le comportement précédent (et à nouveau actuel) était considéré comme bogué:

ré. Correction d'un bug qui empêchait les expansions de $ @ et $ * de quitter le shell si l'option -u était activée et qu'il n'y avait pas de paramètres de position.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.