Diferenças de comportamento
Algumas diferenças no Bash 4.3.11:
Recomendação : use sempre [].
Existem equivalentes POSIX para cada [[ ]]construção que eu já vi.
Se você usa [[ ]]você:
- perder portabilidade
- forçar o leitor a aprender os meandros de outra extensão do bash.
[é apenas um comando regular com um nome estranho, sem semântica especial envolvida.
¹ Inspirado na [[...]]construção equivalente no shell Korn
² mas falha em alguns valores de aou b(como +ou index) e faz comparação numérica se ae se bparecem com números inteiros decimais. expr "x$a" '<' "x$b"trabalha em torno de ambos.
³ e também falha para alguns valores de aou bcomo !ou (.
Bas no bash 3.2 e superior e a compatibilidade fornecida com o bash 3.1 não está ativada (como com BASH_COMPAT=3.1)
⁵ embora o agrupamento (aqui com o {...;}grupo de comandos em vez de (...)executar um subshell desnecessário) não seja necessário, pois os operadores ||e &&shell (em oposição aos operadores ||e && [[...]]ou -o/ -a [operadores) têm igual precedência. Então [ a = a ] || [ a = b ] && [ a = b ]seria equivalente.
[[isso, o código é bom e claro, mas lembre-se daquele dia em que você portará seu scriptworks no sistema com o shell padrão que não ébashouksh, etc.[é mais feio, pesado, mas funciona comoAK-47em qualquer situação.