On 23/03/2018 05:37, Herbert Xu wrote:
You're right.  The proper fix to this is to ensure that nulonly
is not set in varvalue for $*.  It should only be set for $@ when
it's inside double quotes.

In fact there is another bug while we're playing with $@/$*.
When IFS is set to a non-whitespace character such as :, $*
outside quotes won't remove empty fields as it should.

That's not limited to empty fields:

  set -- , ,
  set -- $@
  echo $#

This should print 2, not 3. (bash gets this wrong too.)

This patch fixes both problems.

Also the above. But it breaks a traditional ash extension:

  unset IFS
  set -- A1 B2 C3
  echo ${@%2 C3}

This used to print A1 B, but prints A1 B2 C3 with your patch.

  echo ${@%2}

This used to print A1 B2 C3, but prints A1 B with your patch.

This extension was already pretty much broken within quoted expansions: "${@%2}" would already expand to A1 B. Your patch extends that to the non-quoted case.

I do not know if you want to keep this extension in.

Harald van Dijk
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to