Nenhuma das APIs POSIX C usa a variável de ambiente SHELL explicitamente. O system e popen deve chamar um programa chamado sh . Alguns utilitários (por exemplo, ex , mailx ,…) deve usar $SHELL , mas sempre para executar o código fornecido pelo usuário; make ignora explicitamente $SHELL .
A seção sobre variáveis de ambiente permite utilitários , mas não APIs C (“interfaces de sistema”) para ter um comportamento diferente se $SHELL não estiver em conformidade com POSIX sh.
Na prática, SHELL é definido como o shell de login do usuário, que pode ou não ser compatível com POSIX. Zsh e peixes são alternativas populares. Eu tenho usado o zsh por uma década em várias variantes do Unix, e não me lembro de nenhum utilitário do sistema ter falhado. Vi o código ocasionalmente escrito chamando $SHELL em vez de sh para executar scripts sh. Isso é muito raro e não precisa impedi-lo de configurar SHELL para o que você quiser.
Em suma, sim, SHELL é seu shell interativo favorito, e os aplicativos não recebem garantia de qual sintaxe aceita ou até mesmo se aceita uma opção -c .