[это другое имя для test. Все три из этих строк являются командными строками, которые запускаются testс некоторыми опциями.
В первой строке это стандартное тестирование: [ 5 -gt 4 ]то же самое, что и test 5 -gt 4.
Во втором случае выражение опущено, что означает выход false ( 0 arguments: Exit false (1)).
В третьем случае, я полагаю, вы используете GNU coreutils. В GNU testтекст справки содержит эту заметку:
NOTE: [ honors the --help and --version options, but test does not.
test treats each of those as it treats any other nonempty STRING.
Это расширение не POSIX ; Похоже, мотивация заключается в том, что testэти аргументы следует рассматривать как строки, как и любые другие. [в состоянии отличить регистр варианта от регистра строки по наличию закрывающей ]скобки.
Обратите внимание, что ваша оболочка, скорее всего, предоставит свою собственную [, и вам придется /bin/\[использовать эту версию.