Built-in test
Last updated
Last updated
The [
built-in takes a series of arguments to perform one or more tests and return an exit status of zero (success) or non-zero (failure). Multiple expressions are separated by one or more -a
(AND) or -o
(OR) operators and can be grouped using parentheses (parentheses must be escaped or quoted to prevent interpolation).
Tests are separated into unary, binary, and string operators depending on number of operands.
Unary operators requiring a single operand include:
Binary operators requiring two operands include:
When given an argument with no operator or when an operator is given zero operands, it is treated as a string and the exit status is zero (success) if the string is non-empty and non-zero (failure) otherwise.
The behavior of being given only string
is the same as if given -n string
. Combined with the unary NOT operator, ! string
is the same as -z string
.
Given the alphabet soup of unary operators, it is suggested that the readability of code is improved by using string
and ! string
instead of -n string
and -z string
, respectively.
Operator(s)
Description
! expression
True if expression is false
-[bcdefghkprsuwxGLOS] file
Various checks against a single file/directory
-[nz] string
Test if a string is empty (-z) or non-empty (-n)
-t file_descriptor
True if file descriptor is open and to a terminal
Operator(s)
Description
file1 { -nt, -ot, -ef } file2
Various checks involving two files/directories
string1 { =, !=, <, > } string2
Various checks involving two strings
number1 { -eq, -ne, -gt, -ge, -lt, -le } number2
Various checks involving two numbers