[
is another name for test
. All three of those lines are command lines that run test
with some options.
In the first line, this is standard testing: [ 5 -gt 4 ]
is the same as test 5 -gt 4
.
In the second, the expression is omitted, which means to exit false (0 arguments: Exit false (1)
).
For the third case you are, I guess, using GNU coreutils. In GNU test
the help text contains this note:
NOTE: [ honors the --help and --version options, but test does not.
test treats each of those as it treats any other nonempty STRING.
This is a non-POSIX extension; the motivation seems to be that test
is required to treat those arguments as strings like any other. [
is able to distinguish the option case from the string case by the presence of the closing ]
bracket.
Note that your shell will likely provide its own [
, and so you'll have to /bin/\[
to use this version.