bash e comparação aritmética: aspas duplas ou não?

4

quando comparamos dois inteiros no bash, temos que colocar aspas duplas? No documento oficial link , posso ler que aspas duplas devem aparecer sempre ... Mas o que são as diferenças nos exemplos a seguir:

[ "$VAR" -eq "1" ]
[ $VAR -eq "1" ]
[ "$VAR" -eq 1 ]
[ $VAR -eq 1 ]

Como estou curioso, dei uma olhada nos scripts de init do Ubuntu em /etc/init.d e há muitos usos de comparação aritmética, pelo menos ["$ VAR" -eq "1"] e [$ VAR-eq 1] são usados ... mas parece que ninguém realmente "sabe" qual é a maneira oficial de fazê-lo.

Obrigado!

    
por Martin 29.11.2012 / 11:28

2 respostas

4

Você precisa citar $VAR se ele puder estar vazio / não definido (então você provavelmente deve citá-lo).

Se você não citar e estiver vazio, a instrução resultará em:

[ -eq 1 ]

que é um erro de sintaxe. Citar o 1 não ganha nada.

(Veja também expressões condicionais bash (coisas com [[ ... ]] ), mais "modernas" "versão do comando de teste que tem menos peculiaridades.)

    
por 29.11.2012 / 11:34
2

Se você quiser uma comparação aritmética, use a construção condicional aritmética (documentada aqui ):

(( VAR == 1 ))
    
por 29.11.2012 / 12:59