[
é 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.
$PATH
pesquisa. e==
não é umatest
sintaxe válida para a/usr/bin/[
rota. Apenas=
está bem.