Por que o sh exibe um erro quando o bash não?

3

Por que o script a seguir exibe uma mensagem "operador inesperado" e falha quando executado com SH, mas não com BASH.

!/bin/sh
if [ $UID -ne 0 ]
then
        echo "You must be root."
        exit 1
else
        echo "Open sesame."
        exit 0
fi
    
por filmoreha 05.02.2013 / 01:26

1 resposta

6

Nem todos os shells definem uma variável UID . Este é apenas um recurso bash e zsh. Em outros shells, a variável UID não está definida, portanto, seu comando de teste se expande para [ -ne 0 ] , que é um erro de sintaxe.

Uma forma portátil de obter o ID do usuário é com o utilitário id .

if [ "$(id -u)" -ne 0 ]; then …
    
por 05.02.2013 / 01:44