$@$*は引数全てを表示します。違いはこの2つの変数をダブルクォートで囲んだ際です。$@は複数要素に別れますが、$*は1つの文字列となります。

"$@"
"$1" "$2" "$3"

"$*"
"$1 $2 $3"

これはiftestをする時に困ります。$@で引数が0だと空文字列ではなく、何もないことになります。そういう時は、$*を使いましょう。

function asterisk_if() {
  if [ "$@" != "" ]; then
    echo "$@"
  else
    echo asterisk empty
  fi
}

参考