Bash: `-su: $*: 未绑定变量` 和 `set -u`

Bash: `-su: $*: 未绑定变量` 和 `set -u`

这是一个运行 GNU bash 4.0 版本的 FreeBSD 7.x 系统。

在 Bash 中,该set -u选项可以强制 shell 在遇到未设置的变量时打印错误,如下所示:

$ 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 -u忽略 $* 和 $@:

-u 执行参数扩展时,将除特殊参数“@”或“*”之外的未设置变量和参数视为错误。错误消息将写入标准错误,并且非交互式 shell 将退出。

我怎样才能解决这个问题?

答案1

这是旧版本 bash 中的一个错误,特别是 4.0​β2 补丁级别 d 到 4.0 补丁级别 m。来自变更日志从 4.0 到 4.1​α:

名词修复了 的行为set -u以符合最新的 Posix 解释:除 $@ 和 $* 之外的未设置变量的每次扩展都会导致 shell 退出。

此行为是在 4.0β2 中引入的,因为之前的(现在又是当前的)行为被认为是有问题的:

d.修复了在启用 -u 选项并且没有位置参数的情况下导致 $@ 和 $* 扩展无法退出 shell 的错误。

相关内容