Both $@ and $* represent all the arguments in a function but have different behaviors.
$@ expands into separate parameters while $* expands as a whole string and is reparsed.
for example:
Code:
a() {
b() { echo $#; }
# this does 'b "1" "2" "3" "4"'
b "$@"
# this does 'b "1 2 3 4"
b "$*"
}
a 1 2 3 4
will print