A tarefa do comando [ é avaliar expressões de teste. Ele retorna com um status de saída 0 (que significa verdadeiro ) quando a expressão é resolvida para true e outra coisa (o que significa false ) caso contrário.
Não é que não faça nada, é apenas que o resultado é encontrado no status de saída. Em um shell, você pode descobrir sobre o status de saída do último comando em $? para shells semelhantes a Bourne ou $status na maioria dos outros shells (fish / rc / es / csh / tcsh ...).
$ [ a = a ]
$ echo "$?"
0
$ [ a = b ]
$ echo "$?"
1
Em outros idiomas, como perl , o status de saída é retornado, por exemplo, no valor de retorno de system() :
$ perl -le 'print system("[", "a", "=", "a", "]")'
0
Observe que todos os shells modernos semelhantes a Bourne (e fish ) possuem um comando [ integrado. Aquele em /bin normalmente seria executado apenas quando você usa outro shell ou quando você faz coisas como env [ foo = bar ] ou find . -exec [ -f {} ] \; -print ou o comando perl acima ...
O comando [ também é conhecido pelo nome test . Quando chamado como test , não requer um argumento ] de fechamento.
Embora o seu sistema possa não ter uma página man para [ , ele provavelmente tem um para test . Mas, novamente, observe que isso documentaria a implementação /bin/[ ou /bin/test . Para saber sobre o [ embutido em seu shell, você deve ler a documentação do seu shell.
Para mais informações sobre o histórico desse utilitário e a diferença com a expressão de teste [[...]] ksh, convém dar uma olhada neste outro questionário Q & A aqui .