Isso está correto; o 'read'
será executado e o resultado será interpolado na string enviada para echo
.
Você está fazendo isso da maneira mais difícil, com todas essas interpolações e tal.
if [[ $? -ne 0 ]]; then
echo -n 'command failed. ^C or "q" to abort.'
read c
[[ "$c" == q ]] && exit
fi