$SHELL предоставляет оболочку по умолчанию. $0 дает вам текущую оболочку.
Например: у меня есть bash как моя оболочка по умолчанию, которую я использую для своего приложения Terminal. Но для моего приложения iTerm2 я использую эту команду при открытии окна: /bin/ksh.
Итак, мой $0 дает мне /bin/ksh на iTerm2. $SHELL дает мне /bin/bash на iTerm2. $0, $SHELL дает мне /bin/bash на терминале