De man sh
-c string If the -c option is present, then commands are read from string.
If there are arguments after the string, they are assigned to the
positional parameters, starting with $0
Isso significa que seu comando deve ser assim:
$ sh -c 'echo "$0"' foo
foo
Da mesma forma:
$ sh -c 'echo "$0 $1"' foo bar
foo bar
Essa foi a primeira parte a entender; o segundo caso é simples e não precisa de explicação, eu acho.