Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / builtins / test.def
1 This file is test.def, from which is created test.c.
2 It implements the builtin "test" in Bash.
3
4 Copyright (C) 1987-2010 Free Software Foundation, Inc.
5
6 This file is part of GNU Bash, the Bourne Again SHell.
7
8 Bash is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 Bash is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Bash.  If not, see <http://www.gnu.org/licenses/>.
20
21 $PRODUCES test.c
22
23 $BUILTIN test
24 $FUNCTION test_builtin
25 $SHORT_DOC test [expr]
26 Evaluate conditional expression.
27
28 Exits with a status of 0 (true) or 1 (false) depending on
29 the evaluation of EXPR.  Expressions may be unary or binary.  Unary
30 expressions are often used to examine the status of a file.  There
31 are string operators and numeric comparison operators as well.
32
33 The behavior of test depends on the number of arguments.  Read the
34 bash manual page for the complete specification.
35
36 File operators:
37
38   -a FILE        True if file exists.
39   -b FILE        True if file is block special.
40   -c FILE        True if file is character special.
41   -d FILE        True if file is a directory.
42   -e FILE        True if file exists.
43   -f FILE        True if file exists and is a regular file.
44   -g FILE        True if file is set-group-id.
45   -h FILE        True if file is a symbolic link.
46   -L FILE        True if file is a symbolic link.
47   -k FILE        True if file has its `sticky' bit set.
48   -p FILE        True if file is a named pipe.
49   -r FILE        True if file is readable by you.
50   -s FILE        True if file exists and is not empty.
51   -S FILE        True if file is a socket.
52   -t FD          True if FD is opened on a terminal.
53   -u FILE        True if the file is set-user-id.
54   -w FILE        True if the file is writable by you.
55   -x FILE        True if the file is executable by you.
56   -O FILE        True if the file is effectively owned by you.
57   -G FILE        True if the file is effectively owned by your group.
58   -N FILE        True if the file has been modified since it was last read.
59
60   FILE1 -nt FILE2  True if file1 is newer than file2 (according to
61                    modification date).
62
63   FILE1 -ot FILE2  True if file1 is older than file2.
64
65   FILE1 -ef FILE2  True if file1 is a hard link to file2.
66
67 String operators:
68
69   -z STRING      True if string is empty.
70
71   -n STRING
72      STRING      True if string is not empty.
73
74   STRING1 = STRING2
75                  True if the strings are equal.
76   STRING1 != STRING2
77                  True if the strings are not equal.
78   STRING1 < STRING2
79                  True if STRING1 sorts before STRING2 lexicographically.
80   STRING1 > STRING2
81                  True if STRING1 sorts after STRING2 lexicographically.
82
83 Other operators:
84
85   -o OPTION      True if the shell option OPTION is enabled.
86   -v VAR         True if the shell variable VAR is set
87   -R VAR         True if the shell variable VAR is set and is a name reference.
88   ! EXPR         True if expr is false.
89   EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
90   EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
91
92   arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,
93                  -lt, -le, -gt, or -ge.
94
95 Arithmetic binary operators return true if ARG1 is equal, not-equal,
96 less-than, less-than-or-equal, greater-than, or greater-than-or-equal
97 than ARG2.
98
99 Exit Status:
100 Returns success if EXPR evaluates to true; fails if EXPR evaluates to
101 false or an invalid argument is given.
102 $END
103
104 $BUILTIN [
105 $DOCNAME test_bracket
106 $FUNCTION test_builtin
107 $SHORT_DOC [ arg... ]
108 Evaluate conditional expression.
109
110 This is a synonym for the "test" builtin, but the last argument must
111 be a literal `]', to match the opening `['.
112 $END
113
114 #include <config.h>
115
116 #if defined (HAVE_UNISTD_H)
117 #  ifdef _MINIX
118 #    include <sys/types.h>
119 #  endif
120 #  include <unistd.h>
121 #endif
122
123 #include "../bashansi.h"
124 #include "../bashintl.h"
125
126 #include "../shell.h"
127 #include "../test.h"
128 #include "common.h"
129
130 extern char *this_command_name;
131
132 /* TEST/[ builtin. */
133 int
134 test_builtin (list)
135      WORD_LIST *list;
136 {
137   char **argv;
138   int argc, result;
139
140   /* We let Matthew Bradburn and Kevin Braunsdorf's code do the
141      actual test command.  So turn the list of args into an array
142      of strings, since that is what their code wants. */
143   if (list == 0)
144     {
145       if (this_command_name[0] == '[' && !this_command_name[1])
146         {
147           builtin_error (_("missing `]'"));
148           return (EX_BADUSAGE);
149         }
150
151       return (EXECUTION_FAILURE);
152     }
153
154   argv = make_builtin_argv  (list, &argc);
155   result = test_command (argc, argv);
156   free ((char *)argv);
157
158   return (result);
159 }