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]'