Acho que tenho resposta para minha própria pergunta. Parece que a variável é expandida antes que sh -c seja executado. Então eu deveria ter escrito /bin/sh -c "X=1; echo \$X;"
Quando executo /bin/sh -c "X=1;echo $X;" , ele imprime uma linha vazia. O que estou fazendo de errado? Minha plataforma é macOS se isso importa ...
Acho que tenho resposta para minha própria pergunta. Parece que a variável é expandida antes que sh -c seja executado. Então eu deveria ter escrito /bin/sh -c "X=1; echo \$X;"