【发布时间】:2013-03-31 14:52:00
【问题描述】:
我可以创建一个数组,然后从这个数组中删除
$ 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
【问题讨论】:
我可以创建一个数组,然后从这个数组中删除
$ 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]'.
【讨论】:
unset