Você precisa usar:
"$@"
para expansão correta dos parâmetros em todos os casos. Esse comportamento é o mesmo no bash e no ksh.
Na maioria das vezes, $ * ou $ @ darão o que você deseja. No entanto, eles expandem parâmetros com espaços nele. "$ *" fornece todos os parâmetros reduzidos para um. "$ @" fornece o que foi realmente passado para o script wrapper.
Veja por si mesmo (novamente, em bash ou ksh):
[tla ~]$ touch file1 file2 space\ file
[tla ~]$ ( test() { ls $*; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1 file2
[tla ~]$ ( test() { ls $@; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1 file2
[tla ~]$ ( test() { ls "$*"; }; test file1 file2 space\ file )
ls: cannot access file1 file2 space file: No such file or directory
[tla ~]$ ( test() { ls "$@"; }; test file1 file2 space\ file )
file1 file2 space file