-
[
é um comando (basicamente uma variante do comandotest
).[[
é embutido em muitos shells. - Quando você escreve
foo*
dentro de[...]
expansão de nome de arquivo ( aka globbing) ocorre; enquanto dentro de[[...]]
correspondência de padrões ocorre. -
[[
é mais poderoso e capaz que[
, mas não deve ser usado se a portabilidade for uma preocupação. -
[
e[[
não fazem parte da sintaxeif
, você pode usá-los como em[ "$exit" = 'yes' ] && exit
. - Dentro de
[...]
você deve preferir=
em vez de==
. Até onde sei, o segundo é aceito em muitos shells, mas não é compatível com POSIX.
A propósito, eu recomendo que você cite duas vezes suas variáveis, mesmo que você realmente saiba como divisão de palavras se comportará.