Existe uma razão para citar o status de saída $? variável?

2

Eu estava vendo os guias de estilo do Google para seus scripts bash e vi que eles citam a variável de status de saída $? aqui .

if [[ "$?" -ne 0 ]]; then
    error_message
fi

Eu pensei que os valores de retorno são sempre numéricos, então há alguma razão para citá-los?

É apenas um bom hábito entrar (porque você quer citar outras variáveis especiais do shell como "$ @")?

    
por Daniel 23.12.2014 / 06:08

2 respostas

4

Recomendamos altamente

Você deve ler esta resposta maravilhosa para obter mais detalhes.

A configuração IFS contains digit pode quebrar seu código:

$ IFS=0
$ echo test
$ [ $? -eq 0 ] && echo done
bash: [: : integer expression expected

Alguns shells podem herdar IFS do ambiente ( dash , ash ), outros não ( bash , zsh , ksh ). Mas alguém pode controlar o ambiente, seu script será interrompido de qualquer maneira ( $# , $! também são afetados).

Uma observação, no seu exemplo, você usou o novo teste [[...]] , então a divisão do campo está desativada, não é necessário citar neste caso. Será importante se você usar o teste antigo [...] .

$ IFS=0
$ echo test
$ [[ $? -eq 0 ]] && echo done
done
    
por 23.12.2014 / 07:12
2

Tecnicamente, você não precisa para citar o lado esquerdo em [[ ... ]] . Mas como Stéphane Chazelas colocou nos comentários em seu responde bonita , não há nenhuma razão convincente para não citá-lo, então faça isso e durma melhor à noite. É uma boa prática recomendada, menos dúvidas e perguntas.

No estilo antigo, [ ... ] você deve citar, você não tem escolha. Em qualquer caso, você não deve mais usar o estilo antigo [ ... ] , o novo estilo [[ ... ]] é o caminho recomendado.

    
por 23.12.2014 / 07:25