| TEST(1) | General Commands Manual | TEST(1) | 
test, [ —
| test | expression | 
| [ | expression ] | 
test utility evaluates
  expression and, if it evaluates to true, returns a zero
  (true) exit status; otherwise it returns 1 (false). If
  expression is not given, test
  also returns 1 (false).
All operators and flags are separate arguments to the
    test utility.
The following primaries are used to construct expression:
-b
    file-c
    file-d
    file-e
    file-f
    file-g
    file-h
    file-k
    file-n
    string-p
    file-r
    file-s
    file-t
    file_descriptor-u
    file-w
    file-x
    file-z
    string-L
    file-h
      instead.-O
    file-G
    file-S
    file-nt
    file2-ot
    file2-ef
    file2=
    s2!=
    s2<
    s2>
    s2-eq
    n2-ne
    n2-gt
    n2-ge
    n2-lt
    n2-le
    n2These primaries can be combined with the following operators:
!
    expression-a
    expression2-o
    expression2(
    expression )The -a operator has higher precedence than
    the -o operator.
Note that all file tests with the exception of
    -h and -L follow symbolic
    links and thus evaluate the test for the file pointed at.
test utility exits with one of the following values:
test utility implements a superset of the
  IEEE Std 1003.2 (“POSIX.2”)
  specification.
test utility appeared in
  Version 7 AT&T UNIX.
test grammar is inherently ambiguous. In order to
  assure a degree of consistency, the cases described in IEEE
  Std 1003.2 (“POSIX.2”) section 4.62.4, are evaluated
  consistently according to the rules specified in the standards document. All
  other cases are subject to the ambiguity in the command semantics.
This means that test should not be used
    with more than 4 operands (where the terminating ]
    in the case of the [ command does not count as an
    operand,) and that the obsolete -a and
    -o options should not be used. Instead invoke
    test multiple times connected by the
    “&&” and “||” operators from
    sh(1). When those operators are
    not used, there is no need for the parentheses as grouping symbols, so those
    should also be avoided. Using
    sh(1)'s !
    command instead of the equivalent operator from test
    can also protect the script from future test enhancements.
Most expressions with 3 or less operands will evaluate as
    expected, though be aware that with 3 operands, if the second is a known
    binary operator, that is always evaluated, regardless of what the other
    operands might suggest had been intended. If, and only if, the middle
    operand is not a defined binary operator is the first operand examined to
    see if it is ! in which case the remaining operands
    are evaluated as a two operand test, and the result inverted. The only other
    defined three operand case is the meaningless degenerate case where
    parentheses (1st and 3rd operands) surround a one operand expression.
With 4 operands there are just two defined cases, the first where
    the first operand is ! in which case the result of
    the three operand test on the remaining operands is inverted, and the second
    is similar to the 3 operand case, the degenerate case of parentheses
    surrounding an (in this case) 2 operand test expression.
| October 17, 2017 | NetBSD 10.0 |