Além do "$*", o bash tem a variável interna $@ que também acessa todos os argumentos. Porém, a diferença entre $* e $@ esta na forma de armazenamento dos argumentos, pois enquanto a variável $* acessa todos os argumentos (separados pela caracter separador contido na variável interna $IFS, que normalmente é um espaço) como se fossem uma única string ou palavra (word), a variável $@ acessa os argumentos como se fossem diversas strings separadas (words).
Vejam o script de teste abaixo:
#!/bin/bash
echo "Com *:"
for arg in "$*"; do echo "<$arg>"; done
echo
echo "Com @:"
for arg in "$@"; do echo "<$arg>"; done
Agora vejam a diferença entre $* e $@.
$ /tmp/test.sh 1 2 "3 4"
Com *:
<1 2 3 4>
Com @:
<1>
<2>
<3 4>