É útil lembrar que [
é realmente um comando, geralmente também disponível como test
. No bash, é um builtin, então você pode ver a documentação com man builtin
.
Nesse documento:
test and [ evaluate conditional expressions using a set of rules
based on the number of arguments.
0 arguments
The expression is false.
1 argument
The expression is true if and only if the argument is not
null.
2 arguments
[...]
3 arguments
[...]
As regras de dois argumentos são vários testes, e os de três argumentos são geralmente comparações. Quando você coloca um espaço ao redor do =, você obtém três argumentos. Mas quando você coloca tudo junto, você obtém o argumento um e, como você pode ver, se esse argumento não for nulo, ele retornará verdadeiro.