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[@]}"