A sintaxe para repetir os parâmetros posicionais é for arg do sozinho. "$*" é a concatenação dos parâmetros posicionais com o primeiro caractere de $IFS , então você estaria fazendo um loop apenas sobre um elemento.
Além disso, se você quiser criar uma lista de argumentos para o comando find , será necessário um array, não uma string. E não se esqueça de citar suas variáveis!
Então:
findTarget=()
or=()
for arg
do
[ "$arg" = "$lastArg" ] && break
findTarget+=("${or[@]}" -name "$arg")
or=(-o)
done
find . \( "${findTarget[@]}" \)
Note que quando você invoca seu script, você precisa citar os padrões *.c ..., caso contrário eles seriam expandidos pelo shell antes de serem passados para o script.
trouver.bash '*.c' '*.f90' someString
Se o seu shell interativo for zsh , você poderá definir um alias para seu comando em que o globbing esteja desativado com:
alias trouver.bash='noglob trouver.bash'
Dessa forma, você pode fazer:
trouver.bash *.c *.f90 someString
sem o shell expandindo os *.c *.f90 globs.