Sorry that wasn’t very clear. I only included that case to demonstrate that
seemingly contradictory things are happening:
- "${_+$@}" expands each positional parameter to a separate word,
following the usual "$@" behavior
- The usual "$@" behavior is to expand to 0 words if there are no
positional params but in this case "${_+$@}" expands to an empty string
instead
- If we interpret "${_+$@}" as being equivalent to "${_+}" when there
are no params, then the two cases above seem reconcilable, but still
"${_+${_+$@}}" expanding to nothing does not make sense.
I suspect the below is not really the desired behavior?
fun() { echo $#; }
fun "$@"0
fun "${_+$@}"1
fun "${_+${_+$@}}"0
fun "${_+${_+${_+$@}}}"1
fun "${_+${_+${_+${_+$@}}}}"0
fun "${_+${_+${_+${_+${_+$@}}}}}"1
FWIW bash 4.1 and below treat all but the first case as one word.