Variable definition in 'sh -c'
sh -c 'TMP=??; echo $TMP;'
When using double quotes the parameter expansion occurs when the command line is built i.e. the shell does not see
TMP=??; echo $TMP;
as its parameter but
TMP=??; echo ;
if $TMP
is empty in the calling shell environment.
sh -c 'TMP=??; echo "$TMP"'
With double quotes around the sh -c
code, the $TMP
is expanded by the interactive shell before the sh -c
code executes. With single quotes, $TMP
will be expanded inside the sh
shell. (I've also properly quoted the $TMP
variable expansion for echo
).
Single quotes protects a string from variable expansions.
If you do not intend the ??
to be treated as a filename globbing pattern inside the sh -c
script, then use
sh -c 'TMP="??"; echo "$TMP"'