bash treats an empty array as if it were an unset variable, which seems
very illogical as empty is quite distinct from unset:

$ myarray=()
$ [[ -v myarray ]] && echo set || echo unset
unset
$ set | grep ^myarray=  # yet, it's set:
myarray=()
$ set -u
$ for i in "${x[@]}"; do :; done
bash: x[@]: unbound variable

Note also that the "unbound variable" error is inconsistent with the
behaviour of "$@"; I would have thought that, logically, "$@" and
"${x[@]}" should behave the same way, since arrays are implemented as a
logical extension of the positional parameters concept.

zsh and ksh93 can distinguish between empty and unset arrays.

Thanks,

- Martijn

Reply via email to