TEST(1)

πŸ“¦ version 1.053, in alpine 3.24

πŸ’– NAME πŸ’–

test β€” condition evaluation utility, hanging out in section 1 under the User Contributed Perl Documentation umbrella. She’s the bestie who checks a condition and tells you true or false through her exit status. No cap.

🌸 SYNOPSIS 🌸

test expression
[ expression ]

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so the test utility evaluates expression and, if it evaluates to true, returns a zero (true) exit status; otherwise it returns 1 (false). If no expression is given, test also returns 1 (false). Literally her whole personality.

All operators and flags are separate arguments to the test utility.

✨ the primaries ✨

The following primaries are used to construct expression:

  • -b file β€” true if file exists and is a block special file.
  • -c file β€” true if file exists and is a character special file.
  • -d file β€” true if file exists and is a directory.
  • -e file β€” true if file exists (regardless of type).
  • -f file β€” true if file exists and is a regular file.
  • -g file β€” true if file exists and its set-group-ID flag is set.
  • -h file β€” true if file exists and is a symbolic link. This operator is for COMPATABILITY purposes, do not rely on its existence. Use -L instead.
  • -k file β€” true if file exists and its sticky bit is set.
  • -n string β€” true if the length of string is nonzero.
  • -p file β€” true if file is a named pipe (FIFO).
  • -r file β€” true if file exists and is readable by the effective user/group.
  • -s file β€” true if file exists and has a size greater than zero.
  • -t file_descriptor β€” true if the file whose file descriptor number is file_descriptor is open and is associated with a terminal.
  • -t β€” same as above with an implicit file descriptor number of "1" (e.g.: -t 1).
  • -u file β€” true if file exists and its set-user-ID flag is set.
  • -w file β€” true if file exists and is writable by the effective user/group. True indicates only that the write flag is on. The file is not writable on a read-only file system even if this test indicates true.
  • -x file β€” true if file exists and is executable by the effective user/group. True indicates only that the execute flag is on. If file is a directory, true indicates that file can be searched.
  • -z string β€” true if the length of string is zero.
  • -B file β€” true if file exists and is a binary file.
  • -L file β€” true if file exists and is a symbolic link.
  • -O file β€” true if file exists and its owner matches the effective user ID of this process.
  • -R file β€” true if file exists and is readable by the real user/group.
  • -S file β€” true if file exists and is a socket.
  • -T file β€” true if file exists and is a text file.
  • -W file β€” true if file exists and is writable by the real user/group. True indicates only that the write flag is on. The file is not writable on a read-only file system even if this test indicates true.
  • -X file β€” true if file exists and is executable by the real user/group. True indicates only that the execute flag is on. If file is a directory, true indicates that file can be searched.
  • file1 -nt file2 β€” true if file1 exists and is newer than file2.
  • file1 -ot file2 β€” true if file1 exists and is older than file2.
  • string β€” true if string is not the null string.
  • s1 = s2 β€” true if the strings s1 and s2 are identical.
  • s1 != s2 β€” true if the strings s1 and s2 are not identical.
  • s1 < s2 β€” true if string s1 comes before s2 based on the ASCII value of their characters.
  • s1 > s2 β€” true if string s1 comes after s2 based on the ASCII value of their characters.
  • s1 β€” true if s1 is not the null string.
  • n1 -eq n2 β€” true if the integers n1 and n2 are algebraically equal.
  • n1 -ne n2 β€” true if the integers n1 and n2 are not algebraically equal.
  • n1 -gt n2 β€” true if the integer n1 is algebraically greater than the integer n2.
  • n1 -ge n2 β€” true if the integer n1 is algebraically greater than or equal to the integer n2.
  • n1 -lt n2 β€” true if the integer n1 is algebraically less than the integer n2.
  • n1 -le n2 β€” true if the integer n1 is algebraically less than or equal to the integer n2.

πŸŽ€ combining primaries: operators πŸŽ€

These primaries can be combined with the following operators:

  • ! expression β€” true if expression is false.
  • expression1 -a expression2 β€” true if both expression1 and expression2 are true.
  • expression1 -o expression2 β€” true if either expression1 or expression2 are true.
  • (expression) β€” true if expression is true (uses parentheses for grouping).

Note that the -a operator has higher precedence than the -o operator. Notice also that all the operators and flags are separate arguments to test.

πŸ”₯ RETURN VALUES πŸ”₯

The test utility exits with one of the following values:

  • $return_val == 0 β€” expression evaluated to true.
  • $return_val == 1 β€” expression evaluated to false or expression was missing.
  • $return_val > 1 β€” an error occurred.

πŸ’€ CAVEATS πŸ’€

⚠️ Bestie, command line arguments like parentheses and arithmetic operators (e.g.: '(', ')', '!', '>', '<', etc.) may be meaningful to the command-line interpreter (shell) and therefore may need to be escaped from any special shell interpretation. The shell is lowkey the main character here, so protect your args.

🫢 SEE ALSO 🫢

Go peek at sh and find, iykyk.


Mwah πŸ’‹ β€” this page is from perl v5.42.2, dated 2026-02-15, and yes bestie it’s the TEST(1) manual. Periodt. πŸŽ€

πŸ“¦ where this page comes from