Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/ksh93/data/testops.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1982-2012 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* David Korn <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
22
/*
23
* tables for the test builin [[...]] and [...]
24
*/
25
26
#include <ast.h>
27
28
#include "defs.h"
29
#include "test.h"
30
31
/*
32
* This is the list of binary test and [[...]] operators
33
*/
34
35
const Shtable_t shtab_testops[] =
36
{
37
"!=", TEST_SNE,
38
"-a", TEST_AND,
39
"-ef", TEST_EF,
40
"-eq", TEST_EQ,
41
"-ge", TEST_GE,
42
"-gt", TEST_GT,
43
"-le", TEST_LE,
44
"-lt", TEST_LT,
45
"-ne", TEST_NE,
46
"-nt", TEST_NT,
47
"-o", TEST_OR,
48
"-ot", TEST_OT,
49
"=", TEST_SEQ,
50
"==", TEST_SEQ,
51
"=~", TEST_REP,
52
"<", TEST_SLT,
53
">", TEST_SGT,
54
"]]", TEST_END,
55
"", 0
56
};
57
58
const char sh_opttest[] =
59
"[-1c?\n@(#)$Id: test (AT&T Research) 2003-03-18 $\n]"
60
USAGE_LICENSE
61
"[+NAME?test - evaluate expression]"
62
"[+DESCRIPTION?\btest\b evaluates expressions and indicates its "
63
"results based on the exit status. Option parsing is not "
64
"performed so that all arguments, including \b--\b are processed "
65
" as operands. The evaluation of the "
66
"expression depends on the number of operands as follows:]{"
67
"[+0?Evaluates to false.]"
68
"[+1?True if argument is not an empty string.]"
69
"[+2?If first operand is \b!\b, the result is True if the second "
70
"operand an empty string. Otherwise, it is evaluated "
71
"as one of the unary expressions defined below. If the "
72
"unary operator is invalid and the second argument is \b--\b,"
73
"then the first argument is processed as an option argument.]"
74
"[+3?If first operand is \b!\b, the result is True if the second "
75
"and third operand evaluated as a unary expression is False. "
76
"Otherwise, the three operands are evaluaged as one of the "
77
"binary expressions listed below.]"
78
"[+4?If first operand is \b!\b, the result is True if the next "
79
"three operands are a valid binary expression that is False.]"
80
"}"
81
"[If any \afile\a is of the form \b/dev/fd/\b\an\a, then file descriptor "
82
"\an\a is checked.]"
83
"[+?Unary expressions can be one of the following:]{"
84
"[+-a \afile\a?True if \afile\a exists, obsolete.]"
85
"[+-b \afile\a?True if \afile\a exists and is a block special file.]"
86
"[+-c \afile\a?True if \afile\a exists and is a character special "
87
"file.]"
88
"[+-d \afile\a?True if \afile\a exists and is a directory.]"
89
"[+-e \afile\a?True if \afile\a exists.]"
90
"[+-f \afile\a?True if \afile\a exists and is a regular file.]"
91
"[+-g \afile\a?True if \afile\a exists and has its set-group-id bit "
92
"set.]"
93
"[+-h \afile\a?True if \afile\a exists and is a symbolic link.]"
94
"[+-k \afile\a?True if \afile\a exists and has its sticky bit on.]"
95
#if SHOPT_TEST_L
96
"[+-l \afile\a?True if \afile\a exists and is a symbolic link.]"
97
#endif
98
"[+-n \astring\a?True if length of \astring\a is non-zero.]"
99
"[+-o \aoption\a?True if the shell option \aoption\a is enabled.]"
100
"[+-p \afile\a?True if \afile\a exists and is a pipe or fifo.]"
101
"[+-r \afile\a?True if \afile\a exists and is readable.]"
102
"[+-s \afile\a?True if \afile\a exists and has size > 0.]"
103
"[+-t \afildes\a?True if file descriptor number \afildes\a is "
104
"open and is associated with a terminal device.]"
105
"[+-u \afile\a?True if \afile\a exists and has its set-user-id bit "
106
"set.]"
107
"[+-v \avarname\a?True if \avarname\a is a valid variable name that is set.]"
108
"[+-w \afile\a?True if \afile\a exists and is writable.]"
109
"[+-x \afile\a?True if \afile\a exists and is executable. For a "
110
"directory it means that it can be searched.]"
111
"[+-z \astring\a?True if \astring\a is a zero length string.]"
112
"[+-G \afile\a?True if \afile\a exists and group is the effective "
113
"group id of the current process.]"
114
"[+-L \afile\a?True if \afile\a exists and is a symbolic link.]"
115
"[+-N \afile\a?True if \afile\a exists and has been modified since "
116
"it was last read.]"
117
"[+-O \afile\a?True if \afile\a exists and owner is the effective "
118
"user id of the current process.]"
119
"[+-R \avarname\a?True if \avarname\a is a name reference.]"
120
"[+-S \afile\a?True if \afile\a exists and is a socket.]"
121
#if SHOPT_FS_3D
122
"[+-V \afile\a?True if \afile\a exists and is a version "
123
"directory.]"
124
#endif /* SHOPT_FS_3D */
125
"}"
126
"[+?Binary expressions can be one of the following:]{"
127
"[+\astring1\a = \astring2\a?True if \astring1\a is equal to "
128
"\astring2\a.]"
129
"[+\astring1\a == \astring2\a?True if \astring1\a is equal to "
130
"\astring2\a.]"
131
"[+\astring1\a != \astring2\a?True if \astring1\a is not equal to "
132
"\astring2\a.]"
133
"[+\anum1\a -eq \anum2\a?True if numerical value of \anum1\a is "
134
"equal to \anum2\a.]"
135
"[+\anum1\a -ne \anum2\a?True if numerical value of \anum1\a is not "
136
"equal to \anum2\a.]"
137
"[+\anum1\a -lt \anum2\a?True if numerical value of \anum1\a is less "
138
"than \anum2\a.]"
139
"[+\anum1\a -le \anum2\a?True if numerical value of \anum1\a is less "
140
"than or equal to \anum2\a.]"
141
"[+\anum1\a -gt \anum2\a?True if numerical value of \anum1\a is "
142
"greater than \anum2\a.]"
143
"[+\anum1\a -ge \anum2\a?True if numerical value of \anum1\a is "
144
"greater than or equal to \anum2\a.]"
145
"[+\afile1\a -nt \afile2\a?True if \afile1\a is newer than \afile2\a "
146
"or \afile2\a does not exist.]"
147
"[+\afile1\a -ot \afile2\a?True if \afile1\a is older than \afile2\a "
148
"or \afile2\a does not exist.]"
149
"[+\afile1\a -ef \afile2\a?True if \afile1\a is another name for "
150
"\afile2\a. This will be true if \afile1\a is a hard link "
151
"or a symbolic link to \afile2\a.]"
152
"}"
153
"\n"
154
"\n[expression]\n"
155
"\n"
156
"[+EXIT STATUS?]{"
157
"[+0?Indicates that the specified expression is True.]"
158
"[+1?Indicates that the specified expression is False.]"
159
"[+>1?An error occurred.]"
160
"}"
161
162
"[+SEE ALSO?\blet\b(1), \bexpr\b(1)]"
163
;
164
165
const char test_opchars[] = "HLNRSVOGCaeohrwxdcbfugkv"
166
#if SHOPT_TEST_L
167
"l"
168
#endif
169
"psnzt";
170
const char e_argument[] = "argument expected";
171
const char e_missing[] = "%s missing";
172
const char e_badop[] = "%s: unknown operator";
173
const char e_tstbegin[] = "[[ ! ";
174
const char e_tstend[] = " ]]\n";
175
176