Re: Question on $@ vs $@$@

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



    Date:        Wed, 14 Aug 2024 11:04:08 +0200
    From:        Marc Chantreux <mc@xxxxxxxxxx>
    Message-ID:  <ZrxzCOnZv-HffFuB@prometheus>

  | I'm really currious: do you see another one ?

The case he was asking about is when $# is 0 (no positional params set)
and whether "$@$@" should result in "" (1 arg) or nothing (0 args).

Upon rereading POSIX, while I am sure that the intent would be to
make that unspecified, just as "$@$X" is, when X is unset or null,
but I'm not convinced that the wording actually does.

As was quoted from POSIX (this time from the new standard, though I
believe this is unchanged, it remains XCU 2.5.2 (the '@' expansion descr)):

    however, if the expansion is embedded within a word which contains one
    or more other parts that expand to a quoted null string, these null
    string(s) shall still produce an empty field,

which I am not sure actually applies in the relevant case, as neither $@
expansion produced a quoted null string, they both produce nothing (when
there are no parameters, which is the only time this is relevant).

So, I am not sure that this exception is relevant, and if it isn't, then
the exception to the exception

    except that if the other parts are all within the same double-quotes
    as the '@', it is unspecified whether the result is zero fields
    or one empty field.

cannot apply either.   That would mean that perhaps "$@$@" might be
specified to produce nothing.   However, as ksh93 makes "" from this
expansion, and so probably ksh88 might have done as well (I don't have
a ksh88 to test it) and as the standard was originally based upon ksh88
if a clarification were added, it would probably be to change the
wording (somehow) so the "$@$@" case is also explicitly unspecified.

kre






[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux