Tu n'as pas compris ce qui se passe quand tu fais "script.sh *.sav". Le "*.sav" est interprete par ton shell, qui fait un "filename expansion". Donc il remplace *.sav par la liste de tous les fichiers qui matchent ce pattern, puis il lance script.sh avec en argument cette liste. script.sh ne voit jamais "*.sav".
C'est un peu pareil que les gens qui font "ls *". Ca revient a lancer ls avec en argument la liste des fichiers du repertoire courant, ce qui est idiot. Autant faire "echo *".
Quand tu fais "script.sh \*.sav", tu echappes les "*". Ca empeche le shell de l'interpreter. Donc dans ce cas il appelle script.sh avec en agument "*.sav". Tu peux aussi faire ./script.sh "*.nav" ou ./script.sh '*.nav'.