[ é um comando interno do shell no bash e no zsh:
$ type [
[ is a shell builtin
Na documentação dos comandos internos do shell :
Os comandos internos estão contidos no próprio shell . Quando o nome de um comando interno é usado como a primeira palavra de um comando simples (consulte Comandos Simples ), o shell executa o comando diretamente, sem chamar outro programa. Os comandos internos são necessários para implementar funcionalidades impossíveis ou inconvenientes de serem obtidas com utilitários separados.
A documentação oficial ( $ help test) permite apenas usar =:
STRING1 = STRING2
Verdadeiro se as strings forem iguais.
Portanto, a expressão correta seria:
$ [ "a" = "a" ] && echo yes
yes
O que acontece é que o bash é um pouco menos rigoroso. O suporte ao ==operador [ parece ser uma extensão do bash e não é recomendável usá-lo:
string1 == string2
string1 = string2
Verdadeiro se as strings forem iguais. Quando usado com o comando [[, ele executa a correspondência de padrões conforme descrito acima (consulte Construções Condicionais ).
'=' deve ser usado com o comando test para conformidade com POSIX.
Se você deseja usar ==, use a [[palavra-chave:
$ [[ "a" == "a" ]] && echo yes
yes
Lembre-se de que [[é menos portátil (não é POSIX). Mas tanto o bash quanto o zsh suportam.
$PATHpesquisa. e==não é umatestsintaxe válida para a/usr/bin/[rota. Apenas=está bem.