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 a
ou b
(como +
ou index
) e faz comparação numérica se a
e se b
parecem com números inteiros decimais. expr "x$a" '<' "x$b"
trabalha em torno de ambos.
³ e também falha para alguns valores de a
ou b
como !
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 ébash
ouksh
, etc.[
é mais feio, pesado, mas funciona comoAK-47
em qualquer situação.