Try this:
exec="ls -l \"/a b c\""
$exec
You will see something like:
ls: cannot access "/a: No such file or directory
ls: cannot access b: No such file or directory
ls: cannot access c": No such file or directory
Which shows exactly where the problem is - that is - expansion of variable is done after word splitting.
To make it work, you can use eval:
=$ eval "$exec"
ls: cannot access /a b c: No such file or directory
or even:
=$ sh -c "$exec"
Or better yet, don't make such commands to run. Not sure what is the purpose of it, but think about avoiding building full command lines in variables.