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


8

这是运行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 Builtin专门说set -u忽略$ *和$ @:

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

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

Answers:


11

这是旧版bash中的一个错误,特别是4.0β2补丁程序级别d到4.0补丁程序级别m。从4.0到4.1 的变更日志

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

此行为是在4.0β2中引入的,因为以前的(现在又是当前的)行为被认为是错误的:

d。修复了以下错误:如果启用了-u选项并且没有任何位置参数,则导致$ @和$ *扩展无法退出外壳。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.