Você usou "${CMD}" dentro de aspas duplas, portanto, o resultado da expansão $CMD não foi executado divisão de campo (e também expansão de nome de arquivo ), a string inteira /usr/bin/find /etc -type f -exec /usr/bin/md5sum {} \; é considerado como o comando a ser executado. Não existe um comando com esse nome, então o shell reportou o erro No such file or directory .
Como você usa bash , é melhor usar uma matriz:
$ CMD=( /usr/bin/find /etc -type f -exec /usr/bin/md5sum {} \; )
$ "${CMD[@]}"
ou POSIXly, use "$@" :
$ set -- /usr/bin/find /etc -type f -exec /usr/bin/md5sum {} \;
$ "$@"
No seu primeiro caso, você pode usar $CMD sem aspas duplas, mas é não recomendado e falha facilmente . Pelo menos você precisa de set -f antes de executar $CMD .