]>
Commit | Line | Data |
---|---|---|
726f6388 JA |
1 | expect() |
2 | { | |
3 | echo expect "$@" | |
4 | } | |
5 | ||
6 | HOME=/usr/homes/chet # to make the check against new-exp.right work | |
7 | expect '<foo bar>' | |
8 | recho "${undef-"foo bar"}" # should be foo bar | |
9 | expect '<foo>' | |
10 | recho "${und="foo"}" # should be foo | |
11 | ||
12 | expect "<$HOME>" | |
13 | recho ${HOME-"}"} | |
14 | expect "<$HOME>" | |
15 | recho "${HOME-'}'}" | |
16 | expect "<$HOME>" | |
17 | recho "${HOME-"}"}" | |
18 | ||
ccc6cda3 JA |
19 | expect $0: 'HOME: }: syntax error: operand expected (error token is "}")' |
20 | recho "${HOME:`echo }`}" # should be a math error -- bad substring substitution | |
726f6388 | 21 | |
ccc6cda3 JA |
22 | expect unset |
23 | _ENV=oops | |
726f6388 | 24 | x=${_ENV[(_$-=0)+(_=1)-_${-%%*i*}]} # memory leak |
ccc6cda3 | 25 | echo ${x:-unset} |
726f6388 JA |
26 | |
27 | expect "<$HOME>" | |
28 | recho ${HOME} | |
29 | expect "<$HOME>" | |
30 | recho ${HOME:-`echo }`} | |
31 | expect "<$HOME>" | |
32 | recho ${HOME:-`echo "}"`} | |
33 | expect "<$HOME>" | |
34 | recho "${HOME:-`echo "}"`}" | |
35 | expect "<$HOME>" | |
36 | recho "$(echo "${HOME}")" | |
37 | expect "<$HOME>" | |
38 | recho "$(echo "$(echo ${HOME})")" | |
39 | expect "<$HOME>" | |
40 | recho "$(echo "$(echo "${HOME}")")" | |
41 | ||
42 | P=*@* | |
ccc6cda3 JA |
43 | expect '<*@*>' |
44 | recho "${P%"*"}" # | |
45 | expect '<*@*>' | |
46 | recho "${P%'*'}" # | |
726f6388 JA |
47 | expect '<@*>' |
48 | recho "${P#\*}" # should be @* | |
49 | ||
50 | expect '<)>' | |
51 | recho "$(echo ")")" # should be ) | |
52 | expect '<")">' | |
53 | recho "$(echo "\")\"")" # should be ")" | |
54 | ||
55 | foo='abcd ' | |
56 | expect '<-abcd> <->' | |
57 | recho -${foo}- # should be -abcd - | |
58 | expect '<-abcd> <->' | |
59 | recho -${foo% *}- # should be -abcd - | |
60 | expect '<-abcd->' | |
61 | recho -${foo%% *}- # should be -abcd- | |
62 | ||
63 | set a b c d e | |
64 | expect '<a b c d e>' | |
65 | IFS="" | |
66 | recho "$@" | |
67 | IFS=' | |
68 | ' | |
69 | ||
70 | foo=bar | |
71 | expect '<bar foo>' | |
72 | echo -n $foo' ' ; echo foo | |
73 | ||
74 | expect '<bar foo>' | |
75 | echo -n $foo" " ; echo foo | |
76 | ||
77 | expect '<bar foo>' | |
78 | echo -n "$foo " ; echo foo | |
79 | ||
ccc6cda3 | 80 | expect '<barfoo>' |
726f6388 JA |
81 | echo -e "$foo\c " ; echo foo |
82 | ||
ccc6cda3 | 83 | expect '<barfoo>' |
726f6388 JA |
84 | echo -e $foo"\c " ; echo foo |
85 | ||
ccc6cda3 JA |
86 | # substring tests |
87 | z=abcdefghijklmnop | |
88 | expect '<abcd>' | |
89 | recho ${z:0:4} | |
90 | ||
91 | expect '<efg> <nop>' | |
92 | recho ${z:4:3} ${z:${#z}-3:3} | |
93 | ||
94 | expect '<hijklmnop>' | |
95 | recho ${z:7:30} | |
96 | ||
97 | expect '<abcdefghijklmnop>' | |
98 | recho ${z:0:100} | |
99 | ||
100 | expect '<abcdefghijklmnop>' | |
101 | recho ${z:0:${#z}} | |
102 | ||
103 | set 'ab cd' 'ef' 'gh ij' 'kl mn' 'op' | |
104 | expect '<ab cd> <ef>' | |
105 | recho "${@:1:2}" | |
106 | ||
107 | expect '<gh ij> <kl mn>' | |
108 | recho "${@:3:2}" | |
109 | ||
110 | expect '<gh ij> <kl mn> <op>' | |
111 | recho "${@:3:4}" | |
112 | ||
113 | expect '<ab cd> <ef> <gh ij> <kl mn> <op>' | |
114 | recho "${@:1:$#}" | |
115 | ||
116 | # indirect variable references | |
117 | expect '<abcdefghijklmnop>' | |
118 | recho ${!9:-$z} | |
119 | ||
120 | ef=4 | |
121 | expect '<4>' | |
122 | recho ${!2} | |
123 | ||
124 | expect '<op>' | |
125 | recho ${!#} | |
126 | ||
127 | set a b c d e | |
128 | a= | |
129 | expect '<abcdefghijklmnop>' | |
130 | recho ${a:-$z} | |
131 | expect '<abcdefghijklmnop>' | |
132 | recho ${!1:-$z} | |
133 | ||
134 | expect nothing | |
135 | recho ${a-$z} | |
136 | expect nothing | |
137 | recho ${!1-$z} | |
138 | ||
726f6388 JA |
139 | set -u |
140 | expect $0: ABX: unbound variable | |
141 | recho ${ABX} | |
142 | set +u | |
143 | ||
144 | expect $0: '$6: cannot assign in this way' | |
145 | recho ${6="arg6"} | |
146 | ||
ccc6cda3 JA |
147 | v=abcde |
148 | ||
149 | # sed-like variable substitution | |
150 | expect '<xxcde>' | |
151 | recho ${v/a[a-z]/xx} | |
152 | expect '<axxde>' | |
153 | recho ${v/a??/axx} | |
154 | expect '<abxyz>' | |
155 | recho ${v/c??/xyz} | |
156 | expect '<abbcde>' | |
157 | recho ${v/#a/ab} | |
158 | expect '<abcde>' | |
159 | recho ${v/#d/ab} | |
160 | expect '<abcabe>' | |
161 | recho ${v/d/ab} | |
162 | expect '<abcdlast>' | |
163 | recho ${v/%?/last} | |
164 | expect '<abcde>' | |
165 | recho ${v/%x/last} | |
166 | ||
167 | av=(abcd efgh ijkl mnop qrst uvwx) | |
168 | ||
169 | expect '<xxcd>' | |
170 | recho ${av/??/xx} | |
171 | expect '<abxx>' | |
172 | recho ${av/%??/xx} | |
173 | expect '<xxgh>' | |
174 | recho ${av[1]/??/xx} | |
175 | expect '<efgh>' | |
176 | recho ${av[1]/%ab/xx} | |
177 | expect '<xxfgh>' | |
178 | recho ${av[1]/#?/xx} | |
179 | expect '<zagh>' | |
180 | recho ${av[1]/??/za} | |
181 | expect '<zaza>' | |
182 | recho ${av[1]//??/za} | |
183 | expect '<zagh>' | |
184 | recho ${av[1]//#??/za} | |
185 | expect '<efza>' | |
186 | recho ${av[1]//%??/za} | |
187 | ||
188 | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | |
189 | recho ${av[@]/*/yyy} | |
190 | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | |
191 | recho ${av[@]/#*/yyy} | |
192 | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | |
193 | recho ${av[@]/%*/yyy} | |
194 | expect '<yyy> <efgh> <ijkl> <mnop> <qrst> <uvwx>' | |
195 | recho ${av[@]/a*/yyy} | |
196 | expect '<abxx> <efxx> <ijxx> <mnxx> <qrxx> <uvxx>' | |
197 | recho ${av[@]/%??/xx} | |
198 | ||
199 | set abcd efgh ijkl mnop qrst uvwx | |
200 | ||
201 | expect '<xxcd>' | |
202 | recho ${1/??/xx} | |
203 | expect '<xxcd> <xxgh> <xxkl> <xxop> <xxst> <xxwx>' | |
204 | recho ${@/??/xx} | |
205 | expect '<xxcd> <xxgh> <xxkl> <xxop> <xxst> <xxwx>' | |
206 | recho ${@/%??/xx} | |
207 | expect '<zaza>' | |
208 | recho ${3//??/za} | |
209 | expect '<efza>' | |
210 | recho ${3//%??/za} | |
211 | expect '<zaza> <zaza> <zaza> <zaza> <zaza> <zaza>' | |
212 | recho ${@//??/za} | |
213 | expect '<zacd> <zagh> <zakl> <zaop> <zast> <zawx>' | |
214 | recho ${@//#??/za} | |
215 | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | |
216 | recho ${@//*/yyy} | |
217 | expect '<yyy> <efgh> <ijkl> <mnop> <qrst> <uvwx>' | |
218 | recho ${@//a*/yyy} | |
219 | expect '<abcd> <efgh> <ijkl> <mnop> <qrst> <uvwyyy>' | |
220 | recho ${@//%x*/yyy} | |
221 | ||
726f6388 JA |
222 | expect a newline |
223 | echo $abmcde | |
224 | ||
ccc6cda3 JA |
225 | expect this is a test of proc subst |
226 | cat <(echo this is a test of proc subst) | |
227 | echo this is test 2 > /tmp/x | |
228 | expect this is test 2 | |
229 | cat <(cat /tmp/x) | |
230 | rm -f /tmp/x | |
231 | ||
232 | expect $0: '${#:-foo}: bad substitution' | |
233 | echo ${#:-foo} | |
234 | expect $0: '${#:}: bad substitution' | |
235 | echo ${#:} | |
236 | ||
237 | expect "<'>" | |
238 | recho "'" | |
239 | expect '<">' | |
240 | recho '"' | |
241 | expect '<"hello">' | |
242 | recho "\"hello\"" | |
243 | ||
244 | shift $# | |
245 | unset foo | |
246 | z=abcdef | |
247 | z1='abc def' | |
248 | ||
249 | expect '<>' | |
250 | recho ${foo:-""} | |
251 | expect nothing | |
252 | recho ${foo:-"$@"} | |
253 | expect '<>' | |
254 | recho "${foo:-$@}" | |
255 | ||
256 | # unset var | |
257 | expect '<>' | |
258 | recho ${foo:-"$zbcd"} | |
259 | expect nothing | |
260 | recho ${foo:-$zbcd} | |
261 | ||
262 | # set var | |
263 | expect '<abcdef>' | |
264 | recho ${foo:-"$z"} | |
265 | expect '<abc def>' | |
266 | recho ${foo:-"$z1"} | |
267 | ||
268 | expect '<abcdef>' | |
269 | recho ${foo:-$z} | |
270 | expect '<abc> <def>' | |
271 | recho ${foo:-$z1} | |
272 | ||
273 | expect '<abcdef>' | |
274 | recho "${foo:-$z}" | |
275 | expect '<abc def>' | |
276 | recho "${foo:-$z1}" | |
277 | ||
278 | expect '<abcdef>' | |
279 | recho "${foo:-"$z"}" | |
280 | # this disagrees with sh and ksh, but I think it is right according | |
281 | # to posix.2. | |
282 | expect '<abc def>' | |
283 | recho "${foo:-"$z1"}" | |
284 | ||
285 | set ab cd ef gh | |
286 | expect '<ab> <cd> <ef> <gh>' | |
287 | recho ${foo:-"$@"} | |
288 | expect '<ab> <cd> <ef> <gh>' | |
289 | recho "${foo:-$@}" | |
290 | expect '<ab> <cd> <ef> <gh>' | |
291 | recho "${foo:-"$@"}" | |
292 | ||
293 | shift $# | |
294 | expect nothing | |
295 | recho $xxx"$@" | |
296 | expect nothing | |
297 | recho ${foo:-$xxx"$@"} | |
298 | expect '<>' | |
299 | recho "${foo:-$xxx$@}" | |
300 | expect '<>' | |
301 | recho "${foo:-$xxx"$@"}" | |
302 | ||
303 | expect nothing | |
304 | recho $xxx"$@" | |
305 | expect nothing | |
306 | recho "$xxx$@" | |
307 | expect nothing | |
308 | recho "$@"$xxx | |
309 | ||
310 | expect '<>' | |
311 | recho $xxx"" | |
312 | expect '<>' | |
313 | recho $xxx'' | |
314 | expect '<>' | |
315 | recho ''$xxx | |
316 | expect '<>' | |
317 | recho ""$xxx | |
318 | ||
319 | AB='abcdefghijklmnopqrstuvwxyz' | |
320 | ||
321 | recho ${AB:7:15} | |
322 | recho ${AB:15:7} | |
323 | ||
324 | recho ${AB:20} | |
325 | ||
326 | recho ${AB:0} | |
327 | recho ${AB:0:20} | |
328 | ||
329 | recho ${AB:10:7} | |
330 | recho ${AB:10:3+4} | |
331 | recho ${AB:20/2:3+4} | |
332 | ||
333 | set 1 2 3 4 5 6 | |
334 | recho \""${*:2:2}"\" | |
335 | ||
336 | IFS=: | |
337 | recho \""${*:2:2}"\" | |
338 | ||
339 | IFS=$' \t\n' | |
340 | ||
341 | z=123456 | |
342 | ||
343 | recho \""${z:2:2}"\" | |
344 | recho \""${z:2}"\" | |
345 | recho \""${z:2:4}"\" | |
346 | recho \""${z:2:6}"\" | |
347 | ||
348 | set $'\1' $'\2' $'\177' | |
349 | ||
350 | recho $* | |
351 | recho $@ | |
352 | ||
353 | recho ${*} | |
354 | recho ${@} | |
355 | ||
356 | xx=one/two/two | |
357 | recho ${xx%/*} | |
358 | recho ${xx/\/two} | |
359 | ||
360 | yy=oneonetwo | |
361 | recho ${yy//one} | |
362 | recho ${yy/\/one} | |
363 | ||
364 | xx=oneonetwo | |
365 | ||
366 | recho ${xx/one} | |
367 | recho ${xx//one} | |
368 | recho ${xx/\/one} | |
369 | ||
726f6388 JA |
370 | # this must be last! |
371 | expect $0: 'ABXD: parameter unset' | |
372 | recho ${ABXD:?"parameter unset"} |