[ é outro nome para test . Todas essas três linhas são linhas de comando que executam test com algumas opções.
Na primeira linha, este é um teste padrão: [ 5 -gt 4 ] é o mesmo que test 5 -gt 4 .
No segundo, a expressão é omitida, o que significa sair do arquivo falso ( 0 arguments: Exit false (1) ).
Para o terceiro caso você está, eu acho, usando o GNU coreutils. No GNU test , o texto de ajuda contém esta nota:
NOTE: [ honors the --help and --version options, but test does not. test treats each of those as it treats any other nonempty STRING.
Isso é uma extensão não-POSIX ; a motivação parece ser que test é necessário para tratar esses argumentos como strings como qualquer outro. [ é capaz de distinguir o caso de opção do caso de cadeia de caracteres pela presença do colchete ] de fechamento.
Observe que seu shell provavelmente fornecerá seu próprio [ e, portanto, você terá que usar /bin/\[ para usar essa versão.