Bash: '-su: $ *: variável não vinculada' com 'set -u'

8

Este é um sistema FreeBSD 7.x rodando o GNU bash versão 4.0.

No Bash, a opção set -u pode forçar um shell a imprimir um erro se encontrar uma variável não definida, como esta:

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

No entanto, também estou encontrando o mesmo erro para $ *:

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

O Manual do Bash 4.3.1 O Set Builtin diz especificamente que set -u ignora $ * e $ @:

-u Treat unset variables and parameters other than the special parameters ‘@’ or ‘*’ as an error when performing parameter expansion. An error message will be written to the standard error, and a non-interactive shell will exit.

Como posso corrigir isso?

    
por Stefan Lasiewski 13.07.2011 / 02:01

1 resposta

11

Este é um bug em versões mais antigas do bash, especificamente 4.0 β2 patchlevel d para 4.0 patchlevel m. A partir do changelog de 4.0 para 4.1 α:

n. Fixed the behavior of set -u to conform to the latest Posix interpretation: every expansion of an unset variable except $@ and $* will cause the shell to exit.

Esse comportamento foi introduzido no 4.0β2 porque o comportamento anterior (e agora novamente atual) foi considerado como bugs:

d. Fixed a bug that caused expansions of $@ and $* to not exit the shell if the -u option was enabled and there were no posititional parameters.

    
por 13.07.2011 / 02:26

Tags