test and “[”
The test command (built into the shell) will evaluate simple Boolean expressions involving numbers and strings, setting its exit status to 0 (true) or 1 (false):
$ test 10 -lt 5 Is 10 less than 5? $ echo $? 1 No, it isn't $ test -n "hello" Does the string "hello" have nonzero length? $ echo $? 0 Yes, it does
A list of common test arguments are found in Table 1-12, for checking properties of integers, strings, and files.
test has an unusual alias, “[” (left square bracket), as a shorthand for use with conditionals and loops. If you use this shorthand, you must supply a final argument of “]” (right square bracket) to signify the end of the test. The following tests are identical to those before:
$ [ 10 -lt 5 ] $ echo $? 1 $ [ -n "hello" ] $ echo $? 0
Remember that “[” is a command like any other, so it is followed by individual arguments separated by whitespace. So if you mistakenly forget some whitespace:
$ [ 5 -lt 4] No space between 4 and ]
bash: [: missing ']'then test thinks the final argument is the string “4]” and complains that the final bracket is missing.
File tests | |
| File |
| File |
| File |
| File |
| File |
| File |
| File |
| File |
| File |
String tests ... |