-
[é 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á.