我可以创建一个数组,然后从这个数组中删除
$ foo=(a b c)
$ unset foo[0]
$ echo ${foo[*]}
b c
但是,如果设置了nullglob
,则不能从数组中删除
$ shopt -s nullglob
$ foo=(a b c)
$ unset foo[0]
$ echo ${foo[*]}
a b c
unset 'foo[0]'
Bash认为
var[1]
是一个glob,没有找到与它匹配的文件,并且nullglob
的每条指令删除它,导致脚本运行unset
而不是unset var[1]
-并且没有任何东西会被取消设置。解决这个问题的正确方法问题是引用变量名(并且总是显式指定-v
):unset -v 'var[1]'
.
教派;nullglob