$* and $@ exhibit same behaviour -> those of $*

Bryan Drewery bryan-lists at shatow.net
Mon Dec 3 17:24:29 UTC 2012


On 12/3/2012 11:09 AM, rank1seeker at gmail.com wrote:
> I've noticed this under 9.0-RELEASE-p5
> 
> 
> #!/bin/sh
> #####################################################
> ftest_dot ()
> {
>     local i
> 
>     for i in $*
>     {
>         echo "$i"
>     }
> }
> 
> ftest_monkey ()
> {
>     local i
> 
>     for i in $@
>     {
>         echo "$i"
>     }
> }
> 

>From my understanding, used in that context, they should be the same.

      $*      Expands to the positional parameters, starting from one.  When
              the expansion occurs within a double-quoted string it
expands to
              a single field with the value of each parameter separated
by the
              first character of the IFS variable, or by a space if IFS is
              unset.

      $@      Expands to the positional parameters, starting from one.  When
              the expansion occurs within double-quotes, each positional
param‐
              eter expands as a separate argument.  If there are no
positional
              parameters, the expansion of @ generates zero arguments, even
              when @ is double-quoted.  What this basically means, for
example,
              is if $1 is “abc” and $2 is “def ghi”, then "$@" expands
to the
              two arguments:

                    "abc"   "def ghi"


Note the first sentence in both. The difference only occurs when used
inside quotes, i.e. "$@" and "$*"

Bryan


More information about the freebsd-hackers mailing list