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.