Bash: `-su: $ *: несвязанная переменная` с` set -u`

8

Это система FreeBSD 7.x под управлением GNU bash версии 4.0.

В Bash set -uопция может заставить оболочку вывести ошибку, если она встретит неустановленную переменную, например:

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

Тем не менее, я также сталкиваюсь с этой же ошибкой для $ *:

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

Руководство по Bash 4.3.1. В Set Builtin специально сказано, что set -uигнорируются $ * и $ @:

-u Обрабатывать неустановленные переменные и параметры, кроме специальных параметров '@' или '*', как ошибку при выполнении расширения параметров. Сообщение об ошибке будет записано в стандартную ошибку, и неинтерактивная оболочка завершится.

Как я могу это исправить?

Стефан Ласевский
источник

Ответы:

11

Это ошибка в более старых версиях bash, в частности с 4.0 β2 уровня патча d до 4.0 уровня патча m. Из журнала изменений с 4,0 до 4,1:

п. Исправлено поведение set -uв соответствии с последней интерпретацией Posix: каждое расширение неустановленной переменной, кроме $ @ и $ *, приводит к закрытию оболочки.

Это поведение было введено в 4.0β2, потому что предыдущее (и теперь снова текущее) поведение считалось ошибочным:

д. Исправлена ​​ошибка, из-за которой расширения $ @ и $ * не выходили из оболочки, если была включена опция -u и не было положительных параметров.

Жиль "ТАК - перестань быть злым"
источник