This is actually not that good an approach.
The command is passed as a string and is thus subject to the vagaries of the interpreter breaking it apart into command + args etc, i.e. the programmer has to perform quoting and escaping, an error-prone undertaking.
And the target is always
sh although one may not want to pass through
sh at all, just start an arbitrary process with a fixed list of arguments.
Compare with Perl's
or with Java's