Hi,

I have bumped into a rather strange issue:

$ set -- ''; printf "=%s=\n" "$@" x
==
=x=
$ set -- ''; printf "=%s=\n" "${@:1}" x
=x=

Notice how in the second version the empty positional parameter is no longer displayed. Also compare with this version:

$ set -- '' ''; printf "=%s=\n" "${@:1}" x
=x=
==
==

Now both empty arguments appear nornally. Also this check verifies that this is not a `printf' issue:

$ set -- ''; set -- "${@:1}"; echo "$#"
0

It seems that the issue has something to do with expanding a slice with a single empty element:

$ set -- '' ''; printf "=%s=\n" "${@:1:1}" x
=x=

The same issue also happens with arrays:

$ A=('' ''); printf "=%s=\n" "${A[@]:0}" x
==
==
=x=
$ A=('' ''); printf "=%s=\n" "${A[@]:0:1}" x
=x=
$ A=('' ''); printf "=%s=\n" "${A[@]:1}" x
=x=

I encountered this on bash-4.2.037, as provided by the Mageia 3 Linux distribution, but according to a contact on IRC, this issue also affects the latest patch (4.2.045).

I would be happy to provide any information that you may need.


Best regards,

Theodoros V. Kalamatianos

Reply via email to