问题
I can create an array, then delete from this array
$ foo=(a b c)
$ unset foo[0]
$ echo ${foo[*]}
b c
However if nullglob is set then I cannot delete from the array
$ shopt -s nullglob
$ foo=(a b c)
$ unset foo[0]
$ echo ${foo[*]}
a b c
回答1:
unset 'foo[0]'
Bash thinks the
var[1]is a glob, doesn't find a file that matches it, and per instruction ofnullglobremoves it, causing your script to rununsetinstead ofunset var[1]- and nothing gets unset. The correct way to fix this issue is to quote the variable name (and always specify-vexplicitly):unset -v 'var[1]'.
§ nullglob
来源:https://stackoverflow.com/questions/15897473/nullglob-and-arrays