There is no difference between $*and $@, but there is a difference between "$@"and "$*".
$ cat 1.sh
mkdir "$*"
$ cat 2.sh
mkdir "$@"
$ sh 1.sh a "b c" d
$ ls -l
total 12
-rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh
-rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a b c d
We gave three arguments to the script ( a, b cand d), but in "$ *" they were all combined into one argument a b c d.
$ sh 2.sh a "b c" d
$ ls -l
total 24
-rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh
-rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a b c d
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 b c
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 d
, "$*" , "$@" , script. "$ @" - , " ". , a "b c" d (, , ) "a" "b c" "d" "a b c d" ("$*") "a" "b" "c" "d" ($@ $*).
, :
http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST