Imported from ../bash-2.0.tar.gz.
[platform/upstream/bash.git] / tests / glob-test
1 #
2 # test the shell globbing
3 #
4 expect()
5 {
6         echo expect "$@"
7 }
8
9 TESTDIR=/tmp/glob-test
10 mkdir $TESTDIR
11 builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
12 rm -rf *
13
14 touch a b c d abc abd abe bb bcd ca cb dd de
15 mkdir bdir
16
17 # see if `regular' globbing works right
18 expect '<a> <abc> <abd> <abe> <X*>'
19 recho a* X*
20
21 expect '<a> <abc> <abd> <abe>'
22 recho \a*
23
24 # see if null glob expansion works
25 shopt -s nullglob
26
27 expect '<a> <abc> <abd> <abe>'
28 recho a* X*
29
30 shopt -u nullglob
31
32 # see if the code that expands directories only works
33 expect '<bdir/>'
34 recho b*/
35
36 # Test quoted and unquoted globbing characters
37 expect '<*>'
38 recho \*
39
40 expect '<a*>'
41 recho 'a*'
42
43 expect '<a*>'
44 recho a\*
45
46 expect '<c> <ca> <cb> <a*> <*q*>'
47 recho c* a\* *q*
48
49 expect '<**>'
50 recho "*"*
51
52 expect '<**>'
53 recho \**
54
55 expect '<\.\./*/>'
56 recho "\.\./*/"
57
58 expect '<s/\..*//>'
59 recho 's/\..*//'
60
61 # Pattern from Larry Wall's Configure that caused bash to blow up
62 expect '</^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/>'
63 recho "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/"
64
65 # Make sure character classes work properly
66
67 expect '<abc> <abd> <abe> <bb> <cb>'
68 recho [a-c]b*
69
70 expect '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>'
71 recho [a-y]*[^c]
72
73 expect '<abd> <abe>'
74 recho a*[^c]
75
76 touch a-b aXb
77 expect '<a-b> <aXb>'
78 recho a[X-]b
79
80 touch .x .y
81 expect '<d> <dd> <de>'
82 recho [^a-c]*
83
84 # Make sure that filenames with embedded globbing characters are handled
85 # properly
86 mkdir a\*b
87 > a\*b/ooo
88
89 expect '<a*b/ooo>'
90 recho a\*b/*
91
92 expect '<a*b/ooo>'
93 recho a\*?/*
94
95 expect '<no match>'
96 cmd='echo !7'
97 case "$cmd" in
98 *\\!*) echo match ;;
99 *) echo no match ;;
100 esac
101
102 expect '<not there>'
103 file='r.*'
104 case $file in
105 *.\*) echo not there ;;
106 *) echo there ;;
107 esac
108
109 # examples from the Posix.2 spec (d11.2, p. 243)
110 expect '<abc>'
111 recho a[b]c
112
113 expect '<abc>'
114 recho a["b"]c
115
116 expect '<abc>'
117 recho a[\b]c
118
119 expect '<abc>'
120 recho a?c
121
122 expect '<match>'
123 case abc in
124 a"b"c)  echo match
125         ;;
126 *)      echo BAD
127         ;;
128 esac
129
130 expect '<match>'
131 case abc in
132 a*c)    echo match
133         ;;
134 *)      echo BAD
135         ;;
136 esac
137
138 expect '<ok>'
139 case abc in
140 "a?c")  echo bad
141         ;;
142 *)      echo ok
143         ;;
144 esac
145
146 expect '<ok>'
147 case abc in
148 a\*c)   echo bad
149         ;;
150 *)      echo ok
151         ;;
152 esac
153
154 expect '<ok>'
155 case abc in
156 a\[b]c) echo bad
157         ;;
158 *)      echo ok
159         ;;
160 esac
161
162 expect '<ok>'
163 case "$nosuchvar" in
164 "")     echo ok ;;
165 *)      echo bad ;;
166 esac
167
168 # This is very odd, but sh and ksh seem to agree
169 expect '<ok>'
170 case abc in
171 a["\b"]c) echo ok
172         ;;
173 *)      echo bad
174         ;;
175 esac
176
177 mkdir man
178 mkdir man/man1
179 touch man/man1/bash.1
180 expect '<man/man1/bash.1>'
181 recho */man*/bash.*
182 expect '<man/man1/bash.1>'
183 recho $(echo */man*/bash.*)
184 expect '<man/man1/bash.1>'
185 recho "$(echo */man*/bash.*)"
186
187 # tests with multiple `*'s
188 case abc in
189 a***c)  echo ok 1;;
190 esac
191
192 case abc in
193 a*****?c)       echo ok 2;;
194 esac
195
196 case abc in
197 ?*****??)       echo ok 3;;
198 esac
199
200 case abc in
201 *****??)        echo ok 4;;
202 esac
203
204 case abc in
205 *****??c)       echo ok 5;;
206 esac
207
208 case abc in
209 ?*****?c)       echo ok 6;;
210 esac
211
212 case abc in
213 ?***?****c)     echo ok 7;;
214 esac
215
216 case abc in
217 ?***?****?)     echo ok 8;;
218 esac
219
220 case abc in
221 ?***?****)      echo ok 9;;
222 esac
223
224 case abc in
225 *******c)       echo ok 10;;
226 esac
227
228 case abc in
229 *******?)       echo ok 11;;
230 esac
231
232 case abcdecdhjk in
233 a*cd**?**??k)   echo ok 20;;
234 esac
235
236 case abcdecdhjk in
237 a**?**cd**?**??k)       echo ok 21;;
238 esac
239
240 case abcdecdhjk in
241 a**?**cd**?**??k***)    echo ok 22;;
242 esac
243
244 case abcdecdhjk in
245 a**?**cd**?**??***k)    echo ok 23;;
246 esac
247
248 case abcdecdhjk in
249 a**?**cd**?**??***k**)  echo ok 24;;
250 esac
251
252 case abcdecdhjk in
253 a****c**?**??*****)     echo ok 25;;
254 esac
255
256 # none of these should output anything
257
258 case abc in
259 ??**********?****?)     echo bad ;;
260 esac
261
262 case abc in
263 ??**********?****c)     echo bad ;;
264 esac
265
266 case abc in
267 ?************c****?****)        echo bad;;
268 esac
269
270 case abc in
271 *c*?**) echo bad;;
272 esac
273
274 case abc in
275 a*****c*?**)    echo bad;;
276 esac
277
278 case abc in
279 a********???*******)    echo bad;;
280 esac
281
282 builtin cd /
283 rm -rf $TESTDIR
284 exit 0