The man page for Bash says, regarding the -c option:
-c stringIf the-coption is present, then comma
martin is right about the interpolation: you need to use single quotes. But note that if you're trying to pass arguments to a command that is being executed within the string, you need to forward them on explicitly. For example, if you have a script foo.sh like:
#!/bin/bash
echo 0:$0
echo 1:$1
echo 2:$2
Then you should call it like this:
$ bash -c './foo.sh ${1+"$@"}' foo "bar baz"
0:./foo.sh
1:bar baz
2:
Or more generally bash -c '${0} ${1+"$@"}'
Not like this:
$ bash -c ./foo.sh foo "bar baz"
0:./foo.sh
1:
2:
Nor like this:
$ bash -c './foo.sh $@' foo "bar baz"
0:./foo.sh
1:bar
2:baz
This means you can pass in arguments to sub-processes without embedding them in the command string, and without worrying about escaping them.