O Bash não trata os caracteres [ou ](por si só) de maneira diferente de uma letra do alfabeto.
Nesse caso, o bash vê uma "palavra" [e procura um comando com esse nome. Se você procurar no seu sistema de arquivos, provavelmente descobrirá que /bin/[(ou /usr/bin/[) existe como um arquivo executável. Por acaso, o bash também fornece uma versão integrada (por uma questão de eficiência), mas isso é apenas um detalhe da implementação.
O [comando (como em, o executável com esse nome), tem uma regra que deve ser o último parâmetro que você passa para ele, ]ou então gera um erro. Isso pode ser em parte porque é esteticamente agradável, mas também serve para protegê-lo contra comandos truncados acidentalmente, o que é bom.
O fato de não serem especiais é por que você não pode omitir o espaço em branco antes e depois do [or ].
Exceções :
- Quando
[e ]ocorrer no formato correto dentro da mesma palavra, por exemplo [a-z], isso é especial e as regras de glashing do bash se aplicam.
- O
[[comando é especial e pode fazer muitas coisas [não (e os parâmetros internos [[ .. ]]são processados de maneira diferente, assim como algumas quebras de linha). O correspondente ]]também é especial, pois é uma palavra reservada ao shell que não pode ser um nome de comando e finaliza o processamento especial que segue a [[palavra - chave.
[é (também) um comando auto-sustentado: -rwxr-xr-x 1 raiz raiz 39552 3 de dezembro 18:14 / usr / bin / [Embora seja possível que exista também um "paralelo" embutido, como existe para por exemplokill. Em alguns sistemas, otestcomando é um link simbólico[ou vice-versa. AFAIK,]não significa nada por si só, mas é aceito para "fechar" um[- mas é mais por uma razão "estética".