Arrays nullglob和数组

Arrays nullglob和数组,arrays,bash,glob,shopt,Arrays,Bash,Glob,Shopt,我可以创建一个数组,然后从该数组中删除 $ 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 Bash认为var[1]是一个glob,没有找到与之匹配的文件,并且 根据nullglob指令删除它,使脚本运行unset 而不是unset var

我可以创建一个数组,然后从该数组中删除

$ 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
Bash认为
var[1]
是一个glob,没有找到与之匹配的文件,并且 根据
nullglob
指令删除它,使脚本运行
unset
而不是
unset var[1]
——没有任何东西会被取消设置。解决这个问题的正确方法 问题是引用变量名(并始终明确指定
-v
):
unset-v'var[1]”


我花了两天时间,终于发现nullglob是罪魁祸首!感谢您使用
unset
和变量作为下标的正确方法,请使用双引号,如下所示:`unset-v“var[$subscript]”。
unset 'foo[0]'