unset foo[index]unset 'foo[index]'Arguments to unset are subject to regular glob
expansion. This is especially relevant when unsetting indices in arrays,
where [..] is considered a glob character group.
In the problematic code, having a file called food in
the current directory will result in unset foo[index]
expanding to unset food, which will silently succeed
without unsetting the element.
Quoting so that the [..] is passed literally to
unset solves the issue.
Note that you can unset element using variable for index name like this:
unset 'foo[$var]'If you know that pathname expansion is disabled you can ignore this
message. set -o noglob (and variations like invoking the
script with #!/bin/bash -f) will prevent glob expansion of
arguments to unset.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.