whats the difference between $* and $@

Hi,

whats the difference between $* and $@ in command line arguments to a shell scripts

$* = all the arguments are double quoted. If a script receives 2 arguments, $* is equivalent to $1 $2

$@ All the arguments are individually double quoted,If a script receives 2 arguments, $@ is equivalent to $1 $2

in both cases

cat scr

for i in $@
do
echo "@ $i"
done
for j in $*
do
echo "* $j"
done

./scr a b c "d e"
@ a
@ b
@ c
@ d
@ e

  • a
  • b
  • c
  • d
  • e

can we see some diff through this kind of script ???

Look into man sh under the section 'Special Parameters'

       *      Expands  to the positional parameters, starting from one.  When
              the expansion occurs within double quotes, it expands to a sin-
              gle  word  with  the  value  of each parameter separated by the
              first character of the IFS special variable.  That is, "$*"  is
              equivalent  to  "$1c$2c...",  where c is the first character of
              the value of the IFS variable.  If IFS is unset, the parameters
              are  separated  by  spaces.  If IFS is null, the parameters are
              joined without intervening separators.
       @      Expands to the positional parameters, starting from one.   When
              the  expansion  occurs  within  double  quotes,  each parameter
              expands to a separate word.  That is,  "$@"  is  equivalent  to
              "$1"  "$2"  ...   When there are no positional parameters, "$@"
              and $@ expand to nothing (i.e., they are removed).