Existem vários programas que implementam o idioma de /bin/sh. No Ubuntu, o /bin/shdash é projetado para ser rápido, para usar uma pequena quantidade de memória e não suporta muito mais do que o mínimo esperado /bin/sh. No RHEL, /bin/shé o bash, que é mais lento e usa mais memória, mas tem mais recursos. Um desses recursos é o ==operador para a [sintaxe condicional. O Dash suporta [, que é um recurso sh básico, mas não possui o ==operador que é uma extensão bash (e ksh e zsh).
Você pode mudar seu sistema para o bash. No Ubuntu, /bin/shé um link simbólico para dash. Você pode transformá-lo em um link simbólico bash. As versões atuais do Debian e Ubuntu (e derivados) fazem desta uma opção de instalação do dash. Para mudar, execute
sudo dpkg-reconfigure dash
e responda "yes" para manter o traço como /bin/shou "no" para mudar para o bash.
Você pode manter o bash como /bin/sh, mas isso tornará seu sistema um pouco mais lento. É até concebível que algum script do sistema seja incompatível com o bash, embora isso seja improvável, pois o bash é principalmente um superconjunto de traços.
Para distribuições que não têm uma interface para escolher entre implementações de /bin/sh, veja como mudar para o bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Mantenha um terminal aberto e verifique se você ainda pode executar alguns shscripts depois disso. Se você errar esse comando, o sistema ficará inutilizável. (A propósito, o motivo pelo qual usei os vários comandos acima, e não o direto, sudo ln -sf bash /bin/shé que ln -sfnão é atômico. No caso reconhecidamente improvável de o seu computador travar durante esta operação, você precisa inicializar a partir da mídia de resgate para restaurá-lo. Em contraste, mvé atômico.)
Para restaurar o traço como /bin/sh:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Observe que se sh estiver /bin/bashpor padrão em sua distribuição, a mudança para o dash pode causar falha nos scripts, porque o bash possui muito mais recursos que o dash. Os scripts bash devem começar #!/bin/bashe os scripts iniciados com #!/bin/shnão devem usar recursos específicos do bash, mas as distribuições que acompanham o bash /bin/shpodem usar recursos específicos do bash em #!/bin/shscripts específicos para essa distribuição (tudo bem, desde que não haja expectativa de que os usuários pode mudar para o dash como /bin/she não há expectativas de que esses scripts funcionem em outra distribuição).
==que deveria ser=. Isso e que as expansões variáveis devem ser citadas duas vezes.