nullglob 和数组

3
我可以创建一个数组,然后从这个数组中删除元素。
$ 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
1个回答

4
unset 'foo[0]'

Bash 认为 var[1] 是一个通配符,找不到匹配的文件,并根据 nullglob 的指示将其删除,导致您的脚本运行 unset 而不是 unset var[1] - 没有任何内容被取消设置。修复此问题的正确方法是引用变量名称(并始终明确指定 -v):unset -v 'var[1]'§ nullglob

我花了两天时间,最终发现 nullglob 是罪魁祸首!感谢您提供正确使用 unset 的方法。 - Felipe Alvarez
使用变量作为下标时,使用双引号,如:`unset -v "var[$subscript]"。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接