Bash: `-su: $ *: variable independiente` con` set -u`

8

Este es un sistema FreeBSD 7.x que ejecuta GNU bash versión 4.0.

En Bash, la set -uopción puede forzar a un shell a imprimir un error si encuentra una variable no establecida, como esta:

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

Sin embargo, también encuentro este mismo error para $ *:

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

The Bash Manual 4.3.1 El Set Builtin dice específicamente que set -uignora $ * y $ @:

-u Trate las variables y parámetros no establecidos que no sean los parámetros especiales '@' o '*' como un error al realizar la expansión de parámetros. Se escribirá un mensaje de error en el error estándar y se cerrará un shell no interactivo.

¿Cómo puedo arreglar esto?

Stefan Lasiewski
fuente

Respuestas:

11

Este es un error en versiones anteriores de bash, específicamente 4.0 β2 patchlevel d a 4.0 patchlevel m. Del registro de cambios de 4.0 a 4.1 α:

norte. Se corrigió el comportamiento de set -uajustarse a la última interpretación de Posix: cada expansión de una variable no establecida, excepto $ @ y $ * hará que el shell se cierre.

Este comportamiento se introdujo en 4.0β2 porque se pensaba que el comportamiento anterior (y ahora nuevamente actual) era defectuoso:

re. Se corrigió un error que causaba que las expansiones de $ @ y $ * no salieran del shell si la opción -u estaba habilitada y no había parámetros positivos.

Gilles 'SO- deja de ser malvado'
fuente