Em vez de usar strings simples, crie seu comando usando matrizes. As matrizes fornecem uma interface conveniente: Se a
for uma matriz, "${a[@]}"
(observe as aspas) se expandirá para cada elemento de a
, sem divisão adicional de campo ou globbing (portanto, espaços e coisas como curingas, devem permanecer intactas).
Exemplo:
$ a=(printf "|%s|\n" "foo bar" "*")
$ echo ${a[@]}
printf |%s|\n foo bar bin boot dev etc home lib lib64 lost+found mnt opt proc root run sbin srv sys tmp usr var
Observe como o *
foi expandido e como os espaços extras entre foo
e bar
foram perdidos. Mas com o "${a[@]}"
, eles são preservados:
$ echo "${a[@]}"
printf |%s|\n foo bar *
Isto é ideal para construir comandos. Agora você pode fazer:
$ "${a[@]}"
|foo bar|
|*|
Veja? Os argumentos foram mantidos perfeitamente.
Então, faça:
COMMAND=(/usr/bin/exiftool "$PATH_NAME")
"${COMMAND[@]}"