With nounset, ${#a[@]} for a scalar variable fails even though we can
correctly obtain the result (which is consistent with the expansion of
"${a[@]}") without nounset.  This is the result with the devel
version:

  $ bash -c 'a=1; echo ${#a[@]}'
  1
  $ bash -uc 'a=1; echo ${#a[@]}'
  bash: line 1: a: unbound variable

This behavior seems to be present from the very beginning
implementation of arrays in bash-2.0:

  $ bash-2.0 -c 'a=1; echo ${#a[@]}'
  1
  $ bash-2.0 -uc 'a=1; echo ${#a[@]}'
  bash-2.0: a: unbound variable

However, this behavior does not match that of other shells:

  $ ksh -c 'a=1; echo ${#a[@]}'
  1
  $ ksh -uc 'a=1; echo ${#a[@]}'
  1

  $ mksh -c 'a=1; echo ${#a[@]}'
  1
  $ mksh -uc 'a=1; echo ${#a[@]}'
  1

  $ zsh -c 'a=1; echo ${#a[@]}'
  1
  $ zsh -uc 'a=1; echo ${#a[@]}'
  1

Is this intentional?  If so, how can I understand the mental model or
the design background?  I'd be happy if the current behavior is fixed.

--
Koichi

Reply via email to