Bash: `-su: $ *: variabile non associata` con` set -u`


8

Questo è un sistema FreeBSD 7.x che esegue GNU bash versione 4.0.

In Bash, l' set -uopzione può forzare una shell a stampare un errore se incontra una variabile non impostata, come questa:

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

Tuttavia, sto riscontrando anche lo stesso errore per $ *:

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

Il Manuale di Bash 4.3.1 Il Set Builtin dice specificamente che set -uignora $ * e $ @:

-u Tratta le variabili e i parametri non impostati diversi dai parametri speciali '@' o '*' come errore durante l'esecuzione dell'espansione dei parametri. Verrà scritto un messaggio di errore nell'errore standard e uscirà una shell non interattiva.

Come posso risolvere questo problema?

Risposte:


11

Questo è un bug nelle versioni precedenti di bash, in particolare 4.0 β2 patchlevel da 4.0 patchlevel m. Dal log delle modifiche da 4.0 a 4.1 α:

n. Risolto il problema di set -uconformità all'ultima interpretazione di Posix: ogni espansione di una variabile non impostata eccetto $ @ e $ * causerà la chiusura della shell.

Questo comportamento è stato introdotto in 4.0β2 perché si riteneva che il comportamento precedente (e ora di nuovo attuale) fosse errato:

d. Risolto un bug che impediva alle espansioni di $ @ e $ * di uscire dalla shell se l'opzione -u era abilitata e non c'erano parametri positivi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.