On Thu, Apr 07, 2016 at 09:38:43AM +1000, Cameron Simpson wrote:
> > if $1 is set use that, otherwise use "$@" (all arguments, individually 
> > quoted)
> 
> No, it says ``if $1 is set, use "$@", otherwise use nothing''. See below.

I see.  So I had it exactly backwards. :)

> >It seems as though this always evaluates to $1 (since if $1 is unset,
> >$@ is also necessarily empty)... which I think is not what is needed
> >here.  Am I mistaken?  I believe just "$@" (including the quotes) is
> >what you want here.
> 
> Alas, no. And also no.
> 
> Firstly, "$@" _is_ portable; it has been around as a very special
> case for decades, since at least V7 UNIX.

For sure.  It was the ${keword+expression} syntax I was referring to.
I didn't remember coming across this syntax until I started using
HP-UX 10.0 with "the POSIX shell" so I assumed it was not portable,
but it seems that it is.  Then again, maybe I did know that once--my
memory chips have become increasingly faulty with age. ;-)

> For historic reasons, "$@" evaluates to a single "" if there were no
> arguments at all, introducing a spurious new empty argument.

Hmmm...  This is news to me, and my quick test does not bear it out:

$ cat foo.sh
#!/bin/sh

echo "$# command line args"

$ ./foo.sh "$@"
0 command line args
$ ./foo.sh ""
1 command line args

-=-=-=-

$ cat foo.c
#include <stdio.h>
int main(int argc, char **argv)
{
    printf("got %d command line args\n", argc - 1);
    return 0;
}
$ ./foo
got 0 command line args
$ ./foo "$@"
got 0 command line args
$ ./foo ""
got 1 command line args


In any event, it appears that your paranoid version at the least does
no harm.  :)

-- 
Derek D. Martin    http://www.pizzashack.org/   GPG Key ID: 0xDFBEAD02
-=-=-=-=-
This message is posted from an invalid address.  Replying to it will result in
undeliverable mail due to spam prevention.  Sorry for the inconvenience.

Attachment: pgpx1e6Z9N1Af.pgp
Description: PGP signature

Reply via email to