sh -c 'TMP=??; echo $TMP;'
Ao usar aspas duplas, a expansão do parâmetro ocorre quando a linha de comando é construída, ou seja, o shell não vê
TMP=??; echo $TMP;
como seu parâmetro, mas
TMP=??; echo ;
se $TMP
estiver vazio no ambiente do shell de chamada.