xref: /aosp_15_r20/external/mksh/src/check.t (revision 7c356e860f31eadd15fd599fcfdb9fd21f16a9d4)
1*7c356e86SAndroid Build Coastguard Worker# $MirOS: src/bin/mksh/check.t,v 1.853 2020/10/31 03:53:03 tg Exp $
2*7c356e86SAndroid Build Coastguard Worker# -*- mode: sh -*-
3*7c356e86SAndroid Build Coastguard Worker#-
4*7c356e86SAndroid Build Coastguard Worker# Copyright © 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
5*7c356e86SAndroid Build Coastguard Worker#	      2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
6*7c356e86SAndroid Build Coastguard Worker#	      2019, 2020
7*7c356e86SAndroid Build Coastguard Worker#	mirabilos <[email protected]>
8*7c356e86SAndroid Build Coastguard Worker#
9*7c356e86SAndroid Build Coastguard Worker# Provided that these terms and disclaimer and all copyright notices
10*7c356e86SAndroid Build Coastguard Worker# are retained or reproduced in an accompanying document, permission
11*7c356e86SAndroid Build Coastguard Worker# is granted to deal in this work without restriction, including un‐
12*7c356e86SAndroid Build Coastguard Worker# limited rights to use, publicly perform, distribute, sell, modify,
13*7c356e86SAndroid Build Coastguard Worker# merge, give away, or sublicence.
14*7c356e86SAndroid Build Coastguard Worker#
15*7c356e86SAndroid Build Coastguard Worker# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
16*7c356e86SAndroid Build Coastguard Worker# the utmost extent permitted by applicable law, neither express nor
17*7c356e86SAndroid Build Coastguard Worker# implied; without malicious intent or gross negligence. In no event
18*7c356e86SAndroid Build Coastguard Worker# may a licensor, author or contributor be held liable for indirect,
19*7c356e86SAndroid Build Coastguard Worker# direct, other damage, loss, or other issues arising in any way out
20*7c356e86SAndroid Build Coastguard Worker# of dealing in the work, even if advised of the possibility of such
21*7c356e86SAndroid Build Coastguard Worker# damage or existence of a defect, except proven that it results out
22*7c356e86SAndroid Build Coastguard Worker# of said person’s immediate fault when using the work as intended.
23*7c356e86SAndroid Build Coastguard Worker#-
24*7c356e86SAndroid Build Coastguard Worker# You may also want to test IFS with the script at
25*7c356e86SAndroid Build Coastguard Worker# http://www.research.att.com/~gsf/public/ifs.sh
26*7c356e86SAndroid Build Coastguard Worker#
27*7c356e86SAndroid Build Coastguard Worker# More testsuites at:
28*7c356e86SAndroid Build Coastguard Worker# http://svnweb.freebsd.org/base/head/bin/test/tests/legacy_test.sh?view=co&content-type=text%2Fplain
29*7c356e86SAndroid Build Coastguard Worker#
30*7c356e86SAndroid Build Coastguard Worker# Integrated testsuites from:
31*7c356e86SAndroid Build Coastguard Worker# (2013/12/02 20:39:44) http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/regress/bin/ksh/?sortby=date
32*7c356e86SAndroid Build Coastguard Worker
33*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
34*7c356e86SAndroid Build Coastguard Worker	KSH R59 2020/10/31
35*7c356e86SAndroid Build Coastguard Workerdescription:
36*7c356e86SAndroid Build Coastguard Worker	Check base version of full shell
37*7c356e86SAndroid Build Coastguard Workerstdin:
38*7c356e86SAndroid Build Coastguard Worker	vsn=${KSH_VERSION%%' +'*}
39*7c356e86SAndroid Build Coastguard Worker	echo "${vsn#* }"
40*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION
41*7c356e86SAndroid Build Coastguard Worker---
42*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
43*7c356e86SAndroid Build Coastguard Worker	@(#)MIRBSD
44*7c356e86SAndroid Build Coastguard Workerdescription:
45*7c356e86SAndroid Build Coastguard Worker	Check this identifies as legacy shell
46*7c356e86SAndroid Build Coastguard Workerstdin:
47*7c356e86SAndroid Build Coastguard Worker	echo "${KSH_VERSION%% *}"
48*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-modern
49*7c356e86SAndroid Build Coastguard Workercategory: !shell:legacy-yes
50*7c356e86SAndroid Build Coastguard Worker---
51*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
52*7c356e86SAndroid Build Coastguard Worker	@(#)LEGACY
53*7c356e86SAndroid Build Coastguard Workerdescription:
54*7c356e86SAndroid Build Coastguard Worker	Check this identifies as legacy shell
55*7c356e86SAndroid Build Coastguard Workerstdin:
56*7c356e86SAndroid Build Coastguard Worker	echo "${KSH_VERSION%% *}"
57*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-legacy
58*7c356e86SAndroid Build Coastguard Workercategory: !shell:legacy-no
59*7c356e86SAndroid Build Coastguard Worker---
60*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-ascii
61*7c356e86SAndroid Build Coastguard Workerdescription:
62*7c356e86SAndroid Build Coastguard Worker	Check that the shell version tag does not include EBCDIC
63*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
64*7c356e86SAndroid Build Coastguard Workerstdin:
65*7c356e86SAndroid Build Coastguard Worker	set -o noglob
66*7c356e86SAndroid Build Coastguard Worker	for x in $KSH_VERSION; do
67*7c356e86SAndroid Build Coastguard Worker		[[ $x = '+EBCDIC' ]] && exit 1
68*7c356e86SAndroid Build Coastguard Worker	done
69*7c356e86SAndroid Build Coastguard Worker	exit 0
70*7c356e86SAndroid Build Coastguard Worker---
71*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-ebcdic
72*7c356e86SAndroid Build Coastguard Workerdescription:
73*7c356e86SAndroid Build Coastguard Worker	Check that the shell version tag includes EBCDIC
74*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
75*7c356e86SAndroid Build Coastguard Workerstdin:
76*7c356e86SAndroid Build Coastguard Worker	set -o noglob
77*7c356e86SAndroid Build Coastguard Worker	for x in $KSH_VERSION; do
78*7c356e86SAndroid Build Coastguard Worker		[[ $x = '+EBCDIC' ]] && exit 0
79*7c356e86SAndroid Build Coastguard Worker	done
80*7c356e86SAndroid Build Coastguard Worker	exit 1
81*7c356e86SAndroid Build Coastguard Worker---
82*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-binmode
83*7c356e86SAndroid Build Coastguard Workerdescription:
84*7c356e86SAndroid Build Coastguard Worker	Check that the shell version tag does not include TEXTMODE
85*7c356e86SAndroid Build Coastguard Workercategory: !shell:textmode-yes
86*7c356e86SAndroid Build Coastguard Workerstdin:
87*7c356e86SAndroid Build Coastguard Worker	set -o noglob
88*7c356e86SAndroid Build Coastguard Worker	for x in $KSH_VERSION; do
89*7c356e86SAndroid Build Coastguard Worker		[[ $x = '+TEXTMODE' ]] && exit 1
90*7c356e86SAndroid Build Coastguard Worker	done
91*7c356e86SAndroid Build Coastguard Worker	exit 0
92*7c356e86SAndroid Build Coastguard Worker---
93*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-textmode
94*7c356e86SAndroid Build Coastguard Workerdescription:
95*7c356e86SAndroid Build Coastguard Worker	Check that the shell version tag includes TEXTMODE
96*7c356e86SAndroid Build Coastguard Workercategory: !shell:textmode-no
97*7c356e86SAndroid Build Coastguard Workerstdin:
98*7c356e86SAndroid Build Coastguard Worker	set -o noglob
99*7c356e86SAndroid Build Coastguard Worker	for x in $KSH_VERSION; do
100*7c356e86SAndroid Build Coastguard Worker		[[ $x = '+TEXTMODE' ]] && exit 0
101*7c356e86SAndroid Build Coastguard Worker	done
102*7c356e86SAndroid Build Coastguard Worker	exit 1
103*7c356e86SAndroid Build Coastguard Worker---
104*7c356e86SAndroid Build Coastguard Workername: selftest-1
105*7c356e86SAndroid Build Coastguard Workerdescription:
106*7c356e86SAndroid Build Coastguard Worker	Regression test self-testing
107*7c356e86SAndroid Build Coastguard Workerstdin:
108*7c356e86SAndroid Build Coastguard Worker	echo ${foo:-baz}
109*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
110*7c356e86SAndroid Build Coastguard Worker	baz
111*7c356e86SAndroid Build Coastguard Worker---
112*7c356e86SAndroid Build Coastguard Workername: selftest-2
113*7c356e86SAndroid Build Coastguard Workerdescription:
114*7c356e86SAndroid Build Coastguard Worker	Regression test self-testing
115*7c356e86SAndroid Build Coastguard Workerenv-setup: !foo=bar!
116*7c356e86SAndroid Build Coastguard Workerstdin:
117*7c356e86SAndroid Build Coastguard Worker	echo ${foo:-baz}
118*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
119*7c356e86SAndroid Build Coastguard Worker	bar
120*7c356e86SAndroid Build Coastguard Worker---
121*7c356e86SAndroid Build Coastguard Workername: selftest-3
122*7c356e86SAndroid Build Coastguard Workerdescription:
123*7c356e86SAndroid Build Coastguard Worker	Regression test self-testing
124*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=fnord!
125*7c356e86SAndroid Build Coastguard Workerstdin:
126*7c356e86SAndroid Build Coastguard Worker	echo "<$ENV>"
127*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
128*7c356e86SAndroid Build Coastguard Worker	<fnord>
129*7c356e86SAndroid Build Coastguard Worker---
130*7c356e86SAndroid Build Coastguard Workername: selftest-exec
131*7c356e86SAndroid Build Coastguard Workerdescription:
132*7c356e86SAndroid Build Coastguard Worker	Ensure that the test run directory (default /tmp but can be changed
133*7c356e86SAndroid Build Coastguard Worker	with check.pl flag -T or test.sh $TMPDIR) is not mounted noexec, as
134*7c356e86SAndroid Build Coastguard Worker	we execute scripts from the scratch directory during several tests.
135*7c356e86SAndroid Build Coastguard Workerstdin:
136*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\necho tf' >lq
137*7c356e86SAndroid Build Coastguard Worker	chmod +x lq
138*7c356e86SAndroid Build Coastguard Worker	./lq
139*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
140*7c356e86SAndroid Build Coastguard Worker	tf
141*7c356e86SAndroid Build Coastguard Worker---
142*7c356e86SAndroid Build Coastguard Workername: selftest-env
143*7c356e86SAndroid Build Coastguard Workerdescription:
144*7c356e86SAndroid Build Coastguard Worker	Just output the environment variables set (always fails)
145*7c356e86SAndroid Build Coastguard Workercategory: disabled
146*7c356e86SAndroid Build Coastguard Workerstdin:
147*7c356e86SAndroid Build Coastguard Worker	set
148*7c356e86SAndroid Build Coastguard Worker---
149*7c356e86SAndroid Build Coastguard Workername: selftest-direct-builtin-call
150*7c356e86SAndroid Build Coastguard Workerdescription:
151*7c356e86SAndroid Build Coastguard Worker	Check that direct builtin calls work
152*7c356e86SAndroid Build Coastguard Workerstdin:
153*7c356e86SAndroid Build Coastguard Worker	ln -s "$__progname" cat || cp "$__progname" cat
154*7c356e86SAndroid Build Coastguard Worker	ln -s "$__progname" echo || cp "$__progname" echo
155*7c356e86SAndroid Build Coastguard Worker	./echo -c 'echo  foo' | ./cat -u
156*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
157*7c356e86SAndroid Build Coastguard Worker	-c echo  foo
158*7c356e86SAndroid Build Coastguard Worker---
159*7c356e86SAndroid Build Coastguard Workername: selftest-pathsep-unix
160*7c356e86SAndroid Build Coastguard Workerdescription:
161*7c356e86SAndroid Build Coastguard Worker	Check that $PATHSEP is set correctly.
162*7c356e86SAndroid Build Coastguard Workercategory: !os:os2
163*7c356e86SAndroid Build Coastguard Workerstdin:
164*7c356e86SAndroid Build Coastguard Worker	PATHSEP=.; export PATHSEP
165*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'print -r -- $PATHSEP'
166*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
167*7c356e86SAndroid Build Coastguard Worker	:
168*7c356e86SAndroid Build Coastguard Worker---
169*7c356e86SAndroid Build Coastguard Workername: selftest-pathsep-dospath
170*7c356e86SAndroid Build Coastguard Workerdescription:
171*7c356e86SAndroid Build Coastguard Worker	Check that $PATHSEP is set correctly.
172*7c356e86SAndroid Build Coastguard Workercategory: os:os2
173*7c356e86SAndroid Build Coastguard Workerstdin:
174*7c356e86SAndroid Build Coastguard Worker	PATHSEP=.; export PATHSEP
175*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'print -r -- $PATHSEP'
176*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
177*7c356e86SAndroid Build Coastguard Worker	;
178*7c356e86SAndroid Build Coastguard Worker---
179*7c356e86SAndroid Build Coastguard Workername: selftest-tty-absent
180*7c356e86SAndroid Build Coastguard Workerdescription:
181*7c356e86SAndroid Build Coastguard Worker	Check that a controlling tty is not present as regress:no-ctty was used
182*7c356e86SAndroid Build Coastguard Worker	(if this test fails for you DO NOT PASS regress:no-ctty and fix every
183*7c356e86SAndroid Build Coastguard Worker	other test that fails: why u use it if u haz ctty?)
184*7c356e86SAndroid Build Coastguard Workercategory: regress:no-ctty
185*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf!
186*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf"
187*7c356e86SAndroid Build Coastguard Worker	PS1=X
188*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
189*7c356e86SAndroid Build Coastguard Workerstdin:
190*7c356e86SAndroid Build Coastguard Worker	echo ok
191*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
192*7c356e86SAndroid Build Coastguard Worker	ok
193*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
194*7c356e86SAndroid Build Coastguard Worker	/ksh: warning: won't have full job control\nXX/
195*7c356e86SAndroid Build Coastguard Worker---
196*7c356e86SAndroid Build Coastguard Workername: selftest-tty-present
197*7c356e86SAndroid Build Coastguard Workerdescription:
198*7c356e86SAndroid Build Coastguard Worker	Check that a controlling tty is present as regress:no-ctty was not used
199*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
200*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf!
201*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf"
202*7c356e86SAndroid Build Coastguard Worker	PS1=X
203*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
204*7c356e86SAndroid Build Coastguard Workerstdin:
205*7c356e86SAndroid Build Coastguard Worker	echo ok
206*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
207*7c356e86SAndroid Build Coastguard Worker	ok
208*7c356e86SAndroid Build Coastguard Workerexpected-stderr: !
209*7c356e86SAndroid Build Coastguard Worker	XX
210*7c356e86SAndroid Build Coastguard Worker---
211*7c356e86SAndroid Build Coastguard Workername: alias-1
212*7c356e86SAndroid Build Coastguard Workerdescription:
213*7c356e86SAndroid Build Coastguard Worker	Check that recursion is detected/avoided in aliases.
214*7c356e86SAndroid Build Coastguard Workerstdin:
215*7c356e86SAndroid Build Coastguard Worker	alias fooBar=fooBar
216*7c356e86SAndroid Build Coastguard Worker	fooBar
217*7c356e86SAndroid Build Coastguard Worker	exit 0
218*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
219*7c356e86SAndroid Build Coastguard Worker	/fooBar.*not found.*/
220*7c356e86SAndroid Build Coastguard Worker---
221*7c356e86SAndroid Build Coastguard Workername: alias-2
222*7c356e86SAndroid Build Coastguard Workerdescription:
223*7c356e86SAndroid Build Coastguard Worker	Check that recursion is detected/avoided in aliases.
224*7c356e86SAndroid Build Coastguard Workerstdin:
225*7c356e86SAndroid Build Coastguard Worker	alias fooBar=barFoo
226*7c356e86SAndroid Build Coastguard Worker	alias barFoo=fooBar
227*7c356e86SAndroid Build Coastguard Worker	fooBar
228*7c356e86SAndroid Build Coastguard Worker	barFoo
229*7c356e86SAndroid Build Coastguard Worker	exit 0
230*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
231*7c356e86SAndroid Build Coastguard Worker	/fooBar.*not found.*\n.*barFoo.*not found/
232*7c356e86SAndroid Build Coastguard Worker---
233*7c356e86SAndroid Build Coastguard Workername: alias-3
234*7c356e86SAndroid Build Coastguard Workerdescription:
235*7c356e86SAndroid Build Coastguard Worker	Check that recursion is detected/avoided in aliases.
236*7c356e86SAndroid Build Coastguard Workerstdin:
237*7c356e86SAndroid Build Coastguard Worker	alias Echo='echo '
238*7c356e86SAndroid Build Coastguard Worker	alias fooBar=barFoo
239*7c356e86SAndroid Build Coastguard Worker	alias barFoo=fooBar
240*7c356e86SAndroid Build Coastguard Worker	Echo fooBar
241*7c356e86SAndroid Build Coastguard Worker	unalias barFoo
242*7c356e86SAndroid Build Coastguard Worker	Echo fooBar
243*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
244*7c356e86SAndroid Build Coastguard Worker	fooBar
245*7c356e86SAndroid Build Coastguard Worker	barFoo
246*7c356e86SAndroid Build Coastguard Worker---
247*7c356e86SAndroid Build Coastguard Workername: alias-4
248*7c356e86SAndroid Build Coastguard Workerdescription:
249*7c356e86SAndroid Build Coastguard Worker	Check that alias expansion isn't done on keywords (in keyword
250*7c356e86SAndroid Build Coastguard Worker	postitions).
251*7c356e86SAndroid Build Coastguard Workerstdin:
252*7c356e86SAndroid Build Coastguard Worker	alias Echo='echo '
253*7c356e86SAndroid Build Coastguard Worker	alias while=While
254*7c356e86SAndroid Build Coastguard Worker	while false; do echo hi ; done
255*7c356e86SAndroid Build Coastguard Worker	Echo while
256*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
257*7c356e86SAndroid Build Coastguard Worker	While
258*7c356e86SAndroid Build Coastguard Worker---
259*7c356e86SAndroid Build Coastguard Workername: alias-5
260*7c356e86SAndroid Build Coastguard Workerdescription:
261*7c356e86SAndroid Build Coastguard Worker	Check that alias expansion done after alias with trailing space.
262*7c356e86SAndroid Build Coastguard Workerstdin:
263*7c356e86SAndroid Build Coastguard Worker	alias Echo='echo '
264*7c356e86SAndroid Build Coastguard Worker	alias foo='bar stuff '
265*7c356e86SAndroid Build Coastguard Worker	alias bar='Bar1 Bar2 '
266*7c356e86SAndroid Build Coastguard Worker	alias stuff='Stuff'
267*7c356e86SAndroid Build Coastguard Worker	alias blah='Blah'
268*7c356e86SAndroid Build Coastguard Worker	Echo foo blah
269*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
270*7c356e86SAndroid Build Coastguard Worker	Bar1 Bar2 Stuff Blah
271*7c356e86SAndroid Build Coastguard Worker---
272*7c356e86SAndroid Build Coastguard Workername: alias-6
273*7c356e86SAndroid Build Coastguard Workerdescription:
274*7c356e86SAndroid Build Coastguard Worker	Check that alias expansion done after alias with trailing space.
275*7c356e86SAndroid Build Coastguard Workerstdin:
276*7c356e86SAndroid Build Coastguard Worker	alias Echo='echo '
277*7c356e86SAndroid Build Coastguard Worker	alias foo='bar bar'
278*7c356e86SAndroid Build Coastguard Worker	alias bar='Bar '
279*7c356e86SAndroid Build Coastguard Worker	alias blah=Blah
280*7c356e86SAndroid Build Coastguard Worker	Echo foo blah
281*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
282*7c356e86SAndroid Build Coastguard Worker	Bar Bar Blah
283*7c356e86SAndroid Build Coastguard Worker---
284*7c356e86SAndroid Build Coastguard Workername: alias-7
285*7c356e86SAndroid Build Coastguard Workerdescription:
286*7c356e86SAndroid Build Coastguard Worker	Check that alias expansion done after alias with trailing space
287*7c356e86SAndroid Build Coastguard Worker	after a keyword.
288*7c356e86SAndroid Build Coastguard Workerstdin:
289*7c356e86SAndroid Build Coastguard Worker	alias X='case '
290*7c356e86SAndroid Build Coastguard Worker	alias Y=Z
291*7c356e86SAndroid Build Coastguard Worker	X Y in 'Y') echo is y ;; Z) echo is z ;; esac
292*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
293*7c356e86SAndroid Build Coastguard Worker	is z
294*7c356e86SAndroid Build Coastguard Worker---
295*7c356e86SAndroid Build Coastguard Workername: alias-8
296*7c356e86SAndroid Build Coastguard Workerdescription:
297*7c356e86SAndroid Build Coastguard Worker	Check that newlines in an alias don't cause the command to be lost.
298*7c356e86SAndroid Build Coastguard Workerstdin:
299*7c356e86SAndroid Build Coastguard Worker	alias foo='
300*7c356e86SAndroid Build Coastguard Worker
301*7c356e86SAndroid Build Coastguard Worker
302*7c356e86SAndroid Build Coastguard Worker	echo hi
303*7c356e86SAndroid Build Coastguard Worker
304*7c356e86SAndroid Build Coastguard Worker
305*7c356e86SAndroid Build Coastguard Worker
306*7c356e86SAndroid Build Coastguard Worker	echo there
307*7c356e86SAndroid Build Coastguard Worker
308*7c356e86SAndroid Build Coastguard Worker
309*7c356e86SAndroid Build Coastguard Worker	'
310*7c356e86SAndroid Build Coastguard Worker	foo
311*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
312*7c356e86SAndroid Build Coastguard Worker	hi
313*7c356e86SAndroid Build Coastguard Worker	there
314*7c356e86SAndroid Build Coastguard Worker---
315*7c356e86SAndroid Build Coastguard Workername: alias-9
316*7c356e86SAndroid Build Coastguard Workerdescription:
317*7c356e86SAndroid Build Coastguard Worker	Check that recursion is detected/avoided in aliases.
318*7c356e86SAndroid Build Coastguard Worker	This check fails for slow machines or Cygwin, raise
319*7c356e86SAndroid Build Coastguard Worker	the time-limit clause (e.g. to 7) if this occurs.
320*7c356e86SAndroid Build Coastguard Workertime-limit: 3
321*7c356e86SAndroid Build Coastguard Workerstdin:
322*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\necho tf' >lq
323*7c356e86SAndroid Build Coastguard Worker	chmod +x lq
324*7c356e86SAndroid Build Coastguard Worker	PATH=$PWD$PATHSEP$PATH
325*7c356e86SAndroid Build Coastguard Worker	alias lq=lq
326*7c356e86SAndroid Build Coastguard Worker	lq
327*7c356e86SAndroid Build Coastguard Worker	echo = now
328*7c356e86SAndroid Build Coastguard Worker	i=`lq`
329*7c356e86SAndroid Build Coastguard Worker	print -r -- $i
330*7c356e86SAndroid Build Coastguard Worker	echo = out
331*7c356e86SAndroid Build Coastguard Worker	exit 0
332*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
333*7c356e86SAndroid Build Coastguard Worker	tf
334*7c356e86SAndroid Build Coastguard Worker	= now
335*7c356e86SAndroid Build Coastguard Worker	tf
336*7c356e86SAndroid Build Coastguard Worker	= out
337*7c356e86SAndroid Build Coastguard Worker---
338*7c356e86SAndroid Build Coastguard Workername: alias-10
339*7c356e86SAndroid Build Coastguard Workerdescription:
340*7c356e86SAndroid Build Coastguard Worker	Check that recursion is detected/avoided in aliases.
341*7c356e86SAndroid Build Coastguard Worker	Regression, introduced during an old bugfix.
342*7c356e86SAndroid Build Coastguard Workerstdin:
343*7c356e86SAndroid Build Coastguard Worker	alias foo='print hello '
344*7c356e86SAndroid Build Coastguard Worker	alias bar='foo world'
345*7c356e86SAndroid Build Coastguard Worker	echo $(bar)
346*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
347*7c356e86SAndroid Build Coastguard Worker	hello world
348*7c356e86SAndroid Build Coastguard Worker---
349*7c356e86SAndroid Build Coastguard Workername: alias-11
350*7c356e86SAndroid Build Coastguard Workerdescription:
351*7c356e86SAndroid Build Coastguard Worker	Check that special argument handling still applies with escaped aliases
352*7c356e86SAndroid Build Coastguard Workerstdin:
353*7c356e86SAndroid Build Coastguard Worker	alias local1='\typeset'
354*7c356e86SAndroid Build Coastguard Worker	alias local2='\\builtin typeset'
355*7c356e86SAndroid Build Coastguard Worker	function fooa {
356*7c356e86SAndroid Build Coastguard Worker		local1 x=$1 y=z
357*7c356e86SAndroid Build Coastguard Worker		print -r -- "$x,$y"
358*7c356e86SAndroid Build Coastguard Worker	}
359*7c356e86SAndroid Build Coastguard Worker	function foob {
360*7c356e86SAndroid Build Coastguard Worker		local2 x=$1 y=z
361*7c356e86SAndroid Build Coastguard Worker		print -r -- "$x,$y"
362*7c356e86SAndroid Build Coastguard Worker	}
363*7c356e86SAndroid Build Coastguard Worker	x=1 y=2; fooa 'bar - baz'
364*7c356e86SAndroid Build Coastguard Worker	x=1 y=2; foob 'bar - baz'
365*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
366*7c356e86SAndroid Build Coastguard Worker	bar - baz,z
367*7c356e86SAndroid Build Coastguard Worker	bar - baz,z
368*7c356e86SAndroid Build Coastguard Worker---
369*7c356e86SAndroid Build Coastguard Workername: alias-12
370*7c356e86SAndroid Build Coastguard Workerdescription:
371*7c356e86SAndroid Build Coastguard Worker	Something weird from Martijn Dekker
372*7c356e86SAndroid Build Coastguard Workerstdin:
373*7c356e86SAndroid Build Coastguard Worker	alias echo=print
374*7c356e86SAndroid Build Coastguard Worker	x() { echo a; (echo b); x=$(echo c); }
375*7c356e86SAndroid Build Coastguard Worker	typeset -f x
376*7c356e86SAndroid Build Coastguard Worker	alias OPEN='{' CLOSE='};'
377*7c356e86SAndroid Build Coastguard Worker	{ OPEN echo hi1; CLOSE }
378*7c356e86SAndroid Build Coastguard Worker	var=`{ OPEN echo hi2; CLOSE }` && echo "$var"
379*7c356e86SAndroid Build Coastguard Worker	var=$({ OPEN echo hi3; CLOSE }) && echo "$var"
380*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
381*7c356e86SAndroid Build Coastguard Worker	x() {
382*7c356e86SAndroid Build Coastguard Worker		\print a
383*7c356e86SAndroid Build Coastguard Worker		( \print b )
384*7c356e86SAndroid Build Coastguard Worker		x=$(\print c )
385*7c356e86SAndroid Build Coastguard Worker	}
386*7c356e86SAndroid Build Coastguard Worker	hi1
387*7c356e86SAndroid Build Coastguard Worker	hi2
388*7c356e86SAndroid Build Coastguard Worker	hi3
389*7c356e86SAndroid Build Coastguard Worker---
390*7c356e86SAndroid Build Coastguard Workername: arith-compound
391*7c356e86SAndroid Build Coastguard Workerdescription:
392*7c356e86SAndroid Build Coastguard Worker	Check that arithmetic expressions are compound constructs
393*7c356e86SAndroid Build Coastguard Workerstdin:
394*7c356e86SAndroid Build Coastguard Worker	{ ! (( 0$(cat >&2) )) <<<1; } <<<2
395*7c356e86SAndroid Build Coastguard Workerexpected-stderr:
396*7c356e86SAndroid Build Coastguard Worker	1
397*7c356e86SAndroid Build Coastguard Worker---
398*7c356e86SAndroid Build Coastguard Workername: arith-lazy-1
399*7c356e86SAndroid Build Coastguard Workerdescription:
400*7c356e86SAndroid Build Coastguard Worker	Check that only one side of ternary operator is evaluated
401*7c356e86SAndroid Build Coastguard Workerstdin:
402*7c356e86SAndroid Build Coastguard Worker	x=i+=2
403*7c356e86SAndroid Build Coastguard Worker	y=j+=2
404*7c356e86SAndroid Build Coastguard Worker	typeset -i i=1 j=1
405*7c356e86SAndroid Build Coastguard Worker	echo $((1 ? 20 : (x+=2)))
406*7c356e86SAndroid Build Coastguard Worker	echo $i,$x
407*7c356e86SAndroid Build Coastguard Worker	echo $((0 ? (y+=2) : 30))
408*7c356e86SAndroid Build Coastguard Worker	echo $j,$y
409*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
410*7c356e86SAndroid Build Coastguard Worker	20
411*7c356e86SAndroid Build Coastguard Worker	1,i+=2
412*7c356e86SAndroid Build Coastguard Worker	30
413*7c356e86SAndroid Build Coastguard Worker	1,j+=2
414*7c356e86SAndroid Build Coastguard Worker---
415*7c356e86SAndroid Build Coastguard Workername: arith-lazy-2
416*7c356e86SAndroid Build Coastguard Workerdescription:
417*7c356e86SAndroid Build Coastguard Worker	Check that assignments not done on non-evaluated side of ternary
418*7c356e86SAndroid Build Coastguard Worker	operator
419*7c356e86SAndroid Build Coastguard Workerstdin:
420*7c356e86SAndroid Build Coastguard Worker	x=i+=2
421*7c356e86SAndroid Build Coastguard Worker	y=j+=2
422*7c356e86SAndroid Build Coastguard Worker	typeset -i i=1 j=1
423*7c356e86SAndroid Build Coastguard Worker	echo $((1 ? 20 : (x+=2)))
424*7c356e86SAndroid Build Coastguard Worker	echo $i,$x
425*7c356e86SAndroid Build Coastguard Worker	echo $((0 ? (y+=2) : 30))
426*7c356e86SAndroid Build Coastguard Worker	echo $i,$y
427*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
428*7c356e86SAndroid Build Coastguard Worker	20
429*7c356e86SAndroid Build Coastguard Worker	1,i+=2
430*7c356e86SAndroid Build Coastguard Worker	30
431*7c356e86SAndroid Build Coastguard Worker	1,j+=2
432*7c356e86SAndroid Build Coastguard Worker---
433*7c356e86SAndroid Build Coastguard Workername: arith-lazy-3
434*7c356e86SAndroid Build Coastguard Workerdescription:
435*7c356e86SAndroid Build Coastguard Worker	Check that assignments not done on non-evaluated side of ternary
436*7c356e86SAndroid Build Coastguard Worker	operator and this construct is parsed correctly (Debian #445651)
437*7c356e86SAndroid Build Coastguard Workerstdin:
438*7c356e86SAndroid Build Coastguard Worker	x=4
439*7c356e86SAndroid Build Coastguard Worker	y=$((0 ? x=1 : 2))
440*7c356e86SAndroid Build Coastguard Worker	echo = $x $y =
441*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
442*7c356e86SAndroid Build Coastguard Worker	= 4 2 =
443*7c356e86SAndroid Build Coastguard Worker---
444*7c356e86SAndroid Build Coastguard Workername: arith-lazy-4
445*7c356e86SAndroid Build Coastguard Workerdescription:
446*7c356e86SAndroid Build Coastguard Worker	Check that preun/postun not done on non-evaluated side of ternary
447*7c356e86SAndroid Build Coastguard Worker	operator
448*7c356e86SAndroid Build Coastguard Workerstdin:
449*7c356e86SAndroid Build Coastguard Worker	(( m = n = 0, 1 ? n++ : m++ ? 2 : 3 ))
450*7c356e86SAndroid Build Coastguard Worker	echo "($n, $m)"
451*7c356e86SAndroid Build Coastguard Worker	m=0; echo $(( 0 ? ++m : 2 )); echo $m
452*7c356e86SAndroid Build Coastguard Worker	m=0; echo $(( 0 ? m++ : 2 )); echo $m
453*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
454*7c356e86SAndroid Build Coastguard Worker	(1, 0)
455*7c356e86SAndroid Build Coastguard Worker	2
456*7c356e86SAndroid Build Coastguard Worker	0
457*7c356e86SAndroid Build Coastguard Worker	2
458*7c356e86SAndroid Build Coastguard Worker	0
459*7c356e86SAndroid Build Coastguard Worker---
460*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-arr-n
461*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
462*7c356e86SAndroid Build Coastguard Workerstdin:
463*7c356e86SAndroid Build Coastguard Worker	a=0; echo "$((0&&b[a++],a))"
464*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
465*7c356e86SAndroid Build Coastguard Worker	0
466*7c356e86SAndroid Build Coastguard Worker---
467*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-arr-p
468*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
469*7c356e86SAndroid Build Coastguard Workerstdin:
470*7c356e86SAndroid Build Coastguard Worker	a=0; echo "$((0&&(b[a++]),a))"
471*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
472*7c356e86SAndroid Build Coastguard Worker	0
473*7c356e86SAndroid Build Coastguard Worker---
474*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-str-n
475*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
476*7c356e86SAndroid Build Coastguard Workerstdin:
477*7c356e86SAndroid Build Coastguard Worker	a=0 b=a++; ((0&&b)); echo $a
478*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
479*7c356e86SAndroid Build Coastguard Worker	0
480*7c356e86SAndroid Build Coastguard Worker---
481*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-str-p
482*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
483*7c356e86SAndroid Build Coastguard Workerstdin:
484*7c356e86SAndroid Build Coastguard Worker	a=0 b=a++; ((0&&(b))); echo $a
485*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
486*7c356e86SAndroid Build Coastguard Worker	0
487*7c356e86SAndroid Build Coastguard Worker---
488*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-l-n
489*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
490*7c356e86SAndroid Build Coastguard Workerstdin:
491*7c356e86SAndroid Build Coastguard Worker	a=0; echo "$((0?b[a++]:999,a))"
492*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
493*7c356e86SAndroid Build Coastguard Worker	0
494*7c356e86SAndroid Build Coastguard Worker---
495*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-l-p
496*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
497*7c356e86SAndroid Build Coastguard Workerstdin:
498*7c356e86SAndroid Build Coastguard Worker	a=0; echo "$((0?(b[a++]):999,a))"
499*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
500*7c356e86SAndroid Build Coastguard Worker	0
501*7c356e86SAndroid Build Coastguard Worker---
502*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-r-n
503*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
504*7c356e86SAndroid Build Coastguard Workerstdin:
505*7c356e86SAndroid Build Coastguard Worker	a=0; echo "$((1?999:b[a++],a))"
506*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
507*7c356e86SAndroid Build Coastguard Worker	0
508*7c356e86SAndroid Build Coastguard Worker---
509*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-r-p
510*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects
511*7c356e86SAndroid Build Coastguard Workerstdin:
512*7c356e86SAndroid Build Coastguard Worker	a=0; echo "$((1?999:(b[a++]),a))"
513*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
514*7c356e86SAndroid Build Coastguard Worker	0
515*7c356e86SAndroid Build Coastguard Worker---
516*7c356e86SAndroid Build Coastguard Workername: arith-ternary-prec-1
517*7c356e86SAndroid Build Coastguard Workerdescription:
518*7c356e86SAndroid Build Coastguard Worker	Check precedence of ternary operator vs assignment
519*7c356e86SAndroid Build Coastguard Workerstdin:
520*7c356e86SAndroid Build Coastguard Worker	typeset -i x=2
521*7c356e86SAndroid Build Coastguard Worker	y=$((1 ? 20 : x+=2))
522*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
523*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
524*7c356e86SAndroid Build Coastguard Worker	/.*:.*1 \? 20 : x\+=2.*lvalue.*\n$/
525*7c356e86SAndroid Build Coastguard Worker---
526*7c356e86SAndroid Build Coastguard Workername: arith-ternary-prec-2
527*7c356e86SAndroid Build Coastguard Workerdescription:
528*7c356e86SAndroid Build Coastguard Worker	Check precedence of ternary operator vs assignment
529*7c356e86SAndroid Build Coastguard Workerstdin:
530*7c356e86SAndroid Build Coastguard Worker	typeset -i x=2
531*7c356e86SAndroid Build Coastguard Worker	echo $((0 ? x+=2 : 20))
532*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
533*7c356e86SAndroid Build Coastguard Worker	20
534*7c356e86SAndroid Build Coastguard Worker---
535*7c356e86SAndroid Build Coastguard Workername: arith-prec-1
536*7c356e86SAndroid Build Coastguard Workerdescription:
537*7c356e86SAndroid Build Coastguard Worker	Prove arithmetic expressions with embedded parameter
538*7c356e86SAndroid Build Coastguard Worker	substitutions cannot be parsed ahead of time
539*7c356e86SAndroid Build Coastguard Workerstdin:
540*7c356e86SAndroid Build Coastguard Worker	a='3 + 4'
541*7c356e86SAndroid Build Coastguard Worker	print 1 $((2 * a)) .
542*7c356e86SAndroid Build Coastguard Worker	print 2 $((2 * $a)) .
543*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
544*7c356e86SAndroid Build Coastguard Worker	1 14 .
545*7c356e86SAndroid Build Coastguard Worker	2 10 .
546*7c356e86SAndroid Build Coastguard Worker---
547*7c356e86SAndroid Build Coastguard Workername: arith-div-assoc-1
548*7c356e86SAndroid Build Coastguard Workerdescription:
549*7c356e86SAndroid Build Coastguard Worker	Check associativity of division operator
550*7c356e86SAndroid Build Coastguard Workerstdin:
551*7c356e86SAndroid Build Coastguard Worker	echo $((20 / 2 / 2))
552*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
553*7c356e86SAndroid Build Coastguard Worker	5
554*7c356e86SAndroid Build Coastguard Worker---
555*7c356e86SAndroid Build Coastguard Workername: arith-div-byzero
556*7c356e86SAndroid Build Coastguard Workerdescription:
557*7c356e86SAndroid Build Coastguard Worker	Check division by zero errors out
558*7c356e86SAndroid Build Coastguard Workerstdin:
559*7c356e86SAndroid Build Coastguard Worker	x=$(echo $((1 / 0)))
560*7c356e86SAndroid Build Coastguard Worker	echo =$?:$x.
561*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
562*7c356e86SAndroid Build Coastguard Worker	=1:.
563*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
564*7c356e86SAndroid Build Coastguard Worker	/.*divisor/
565*7c356e86SAndroid Build Coastguard Worker---
566*7c356e86SAndroid Build Coastguard Workername: arith-div-intmin-by-minusone
567*7c356e86SAndroid Build Coastguard Workerdescription:
568*7c356e86SAndroid Build Coastguard Worker	Check division overflow wraps around silently
569*7c356e86SAndroid Build Coastguard Workercategory: int:32
570*7c356e86SAndroid Build Coastguard Workerstdin:
571*7c356e86SAndroid Build Coastguard Worker	echo signed:$((-2147483648 / -1))r$((-2147483648 % -1)).
572*7c356e86SAndroid Build Coastguard Worker	echo unsigned:$((# -2147483648 / -1))r$((# -2147483648 % -1)).
573*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
574*7c356e86SAndroid Build Coastguard Worker	signed:-2147483648r0.
575*7c356e86SAndroid Build Coastguard Worker	unsigned:0r2147483648.
576*7c356e86SAndroid Build Coastguard Worker---
577*7c356e86SAndroid Build Coastguard Workername: arith-div-intmin-by-minusone-64
578*7c356e86SAndroid Build Coastguard Workerdescription:
579*7c356e86SAndroid Build Coastguard Worker	Check division overflow wraps around silently
580*7c356e86SAndroid Build Coastguard Workercategory: int:64
581*7c356e86SAndroid Build Coastguard Workerstdin:
582*7c356e86SAndroid Build Coastguard Worker	echo signed:$((-9223372036854775808 / -1))r$((-9223372036854775808 % -1)).
583*7c356e86SAndroid Build Coastguard Worker	echo unsigned:$((# -9223372036854775808 / -1))r$((# -9223372036854775808 % -1)).
584*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
585*7c356e86SAndroid Build Coastguard Worker	signed:-9223372036854775808r0.
586*7c356e86SAndroid Build Coastguard Worker	unsigned:0r9223372036854775808.
587*7c356e86SAndroid Build Coastguard Worker---
588*7c356e86SAndroid Build Coastguard Workername: arith-assop-assoc-1
589*7c356e86SAndroid Build Coastguard Workerdescription:
590*7c356e86SAndroid Build Coastguard Worker	Check associativity of assignment-operator operator
591*7c356e86SAndroid Build Coastguard Workerstdin:
592*7c356e86SAndroid Build Coastguard Worker	typeset -i i=1 j=2 k=3
593*7c356e86SAndroid Build Coastguard Worker	echo $((i += j += k))
594*7c356e86SAndroid Build Coastguard Worker	echo $i,$j,$k
595*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
596*7c356e86SAndroid Build Coastguard Worker	6
597*7c356e86SAndroid Build Coastguard Worker	6,5,3
598*7c356e86SAndroid Build Coastguard Worker---
599*7c356e86SAndroid Build Coastguard Workername: arith-mandatory
600*7c356e86SAndroid Build Coastguard Workerdescription:
601*7c356e86SAndroid Build Coastguard Worker	Passing of this test is *mandatory* for a valid mksh executable!
602*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no
603*7c356e86SAndroid Build Coastguard Workerstdin:
604*7c356e86SAndroid Build Coastguard Worker	typeset -i sari=0
605*7c356e86SAndroid Build Coastguard Worker	typeset -Ui uari=0
606*7c356e86SAndroid Build Coastguard Worker	typeset -i x=0
607*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #0
608*7c356e86SAndroid Build Coastguard Worker	let --sari --uari
609*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #1
610*7c356e86SAndroid Build Coastguard Worker	sari=2147483647 uari=2147483647
611*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #2
612*7c356e86SAndroid Build Coastguard Worker	let ++sari ++uari
613*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #3
614*7c356e86SAndroid Build Coastguard Worker	let --sari --uari
615*7c356e86SAndroid Build Coastguard Worker	let 'sari *= 2' 'uari *= 2'
616*7c356e86SAndroid Build Coastguard Worker	let ++sari ++uari
617*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #4
618*7c356e86SAndroid Build Coastguard Worker	let ++sari ++uari
619*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #5
620*7c356e86SAndroid Build Coastguard Worker	sari=-2147483648 uari=-2147483648
621*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #6
622*7c356e86SAndroid Build Coastguard Worker	let --sari --uari
623*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #7
624*7c356e86SAndroid Build Coastguard Worker	(( sari = -5 >> 1 ))
625*7c356e86SAndroid Build Coastguard Worker	((# uari = -5 >> 1 ))
626*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #8
627*7c356e86SAndroid Build Coastguard Worker	(( sari = -2 ))
628*7c356e86SAndroid Build Coastguard Worker	((# uari = sari ))
629*7c356e86SAndroid Build Coastguard Worker	print -r -- $((x++)):$sari=$uari. #9
630*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
631*7c356e86SAndroid Build Coastguard Worker	0:0=0.
632*7c356e86SAndroid Build Coastguard Worker	1:-1=4294967295.
633*7c356e86SAndroid Build Coastguard Worker	2:2147483647=2147483647.
634*7c356e86SAndroid Build Coastguard Worker	3:-2147483648=2147483648.
635*7c356e86SAndroid Build Coastguard Worker	4:-1=4294967295.
636*7c356e86SAndroid Build Coastguard Worker	5:0=0.
637*7c356e86SAndroid Build Coastguard Worker	6:-2147483648=2147483648.
638*7c356e86SAndroid Build Coastguard Worker	7:2147483647=2147483647.
639*7c356e86SAndroid Build Coastguard Worker	8:-3=2147483645.
640*7c356e86SAndroid Build Coastguard Worker	9:-2=4294967294.
641*7c356e86SAndroid Build Coastguard Worker---
642*7c356e86SAndroid Build Coastguard Workername: arith-unsigned-1
643*7c356e86SAndroid Build Coastguard Workerdescription:
644*7c356e86SAndroid Build Coastguard Worker	Check if unsigned arithmetics work
645*7c356e86SAndroid Build Coastguard Workercategory: int:32
646*7c356e86SAndroid Build Coastguard Workerstdin:
647*7c356e86SAndroid Build Coastguard Worker	# signed vs unsigned
648*7c356e86SAndroid Build Coastguard Worker	echo x1 $((-1)) $((#-1))
649*7c356e86SAndroid Build Coastguard Worker	# calculating
650*7c356e86SAndroid Build Coastguard Worker	typeset -i vs
651*7c356e86SAndroid Build Coastguard Worker	typeset -Ui vu
652*7c356e86SAndroid Build Coastguard Worker	vs=4123456789; vu=4123456789
653*7c356e86SAndroid Build Coastguard Worker	echo x2 $vs $vu
654*7c356e86SAndroid Build Coastguard Worker	(( vs %= 2147483647 ))
655*7c356e86SAndroid Build Coastguard Worker	(( vu %= 2147483647 ))
656*7c356e86SAndroid Build Coastguard Worker	echo x3 $vs $vu
657*7c356e86SAndroid Build Coastguard Worker	vs=4123456789; vu=4123456789
658*7c356e86SAndroid Build Coastguard Worker	(( # vs %= 2147483647 ))
659*7c356e86SAndroid Build Coastguard Worker	(( # vu %= 2147483647 ))
660*7c356e86SAndroid Build Coastguard Worker	echo x4 $vs $vu
661*7c356e86SAndroid Build Coastguard Worker	# make sure the calculation does not change unsigned flag
662*7c356e86SAndroid Build Coastguard Worker	vs=4123456789; vu=4123456789
663*7c356e86SAndroid Build Coastguard Worker	echo x5 $vs $vu
664*7c356e86SAndroid Build Coastguard Worker	# short form
665*7c356e86SAndroid Build Coastguard Worker	echo x6 $((# vs % 2147483647)) $((# vu % 2147483647))
666*7c356e86SAndroid Build Coastguard Worker	# array refs
667*7c356e86SAndroid Build Coastguard Worker	set -A va
668*7c356e86SAndroid Build Coastguard Worker	va[1975973142]=right
669*7c356e86SAndroid Build Coastguard Worker	va[4123456789]=wrong
670*7c356e86SAndroid Build Coastguard Worker	echo x7 ${va[#4123456789%2147483647]}
671*7c356e86SAndroid Build Coastguard Worker	# make sure multiple calculations don't interfere with each other
672*7c356e86SAndroid Build Coastguard Worker	let '# mca = -4 % -2' ' mcb = -4 % -2'
673*7c356e86SAndroid Build Coastguard Worker	echo x8 $mca $mcb
674*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
675*7c356e86SAndroid Build Coastguard Worker	x1 -1 4294967295
676*7c356e86SAndroid Build Coastguard Worker	x2 -171510507 4123456789
677*7c356e86SAndroid Build Coastguard Worker	x3 -171510507 4123456789
678*7c356e86SAndroid Build Coastguard Worker	x4 1975973142 1975973142
679*7c356e86SAndroid Build Coastguard Worker	x5 -171510507 4123456789
680*7c356e86SAndroid Build Coastguard Worker	x6 1975973142 1975973142
681*7c356e86SAndroid Build Coastguard Worker	x7 right
682*7c356e86SAndroid Build Coastguard Worker	x8 -4 0
683*7c356e86SAndroid Build Coastguard Worker---
684*7c356e86SAndroid Build Coastguard Workername: arith-limit32-1
685*7c356e86SAndroid Build Coastguard Workerdescription:
686*7c356e86SAndroid Build Coastguard Worker	Check if arithmetics are 32 bit
687*7c356e86SAndroid Build Coastguard Workercategory: int:32
688*7c356e86SAndroid Build Coastguard Workerstdin:
689*7c356e86SAndroid Build Coastguard Worker	# signed vs unsigned
690*7c356e86SAndroid Build Coastguard Worker	echo x1 $((-1)) $((#-1))
691*7c356e86SAndroid Build Coastguard Worker	# calculating
692*7c356e86SAndroid Build Coastguard Worker	typeset -i vs
693*7c356e86SAndroid Build Coastguard Worker	typeset -Ui vu
694*7c356e86SAndroid Build Coastguard Worker	vs=2147483647; vu=2147483647
695*7c356e86SAndroid Build Coastguard Worker	echo x2 $vs $vu
696*7c356e86SAndroid Build Coastguard Worker	let vs++ vu++
697*7c356e86SAndroid Build Coastguard Worker	echo x3 $vs $vu
698*7c356e86SAndroid Build Coastguard Worker	vs=4294967295; vu=4294967295
699*7c356e86SAndroid Build Coastguard Worker	echo x4 $vs $vu
700*7c356e86SAndroid Build Coastguard Worker	let vs++ vu++
701*7c356e86SAndroid Build Coastguard Worker	echo x5 $vs $vu
702*7c356e86SAndroid Build Coastguard Worker	let vs++ vu++
703*7c356e86SAndroid Build Coastguard Worker	echo x6 $vs $vu
704*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
705*7c356e86SAndroid Build Coastguard Worker	x1 -1 4294967295
706*7c356e86SAndroid Build Coastguard Worker	x2 2147483647 2147483647
707*7c356e86SAndroid Build Coastguard Worker	x3 -2147483648 2147483648
708*7c356e86SAndroid Build Coastguard Worker	x4 -1 4294967295
709*7c356e86SAndroid Build Coastguard Worker	x5 0 0
710*7c356e86SAndroid Build Coastguard Worker	x6 1 1
711*7c356e86SAndroid Build Coastguard Worker---
712*7c356e86SAndroid Build Coastguard Workername: arith-limit64-1
713*7c356e86SAndroid Build Coastguard Workerdescription:
714*7c356e86SAndroid Build Coastguard Worker	Check if arithmetics are 64 bit
715*7c356e86SAndroid Build Coastguard Workercategory: int:64
716*7c356e86SAndroid Build Coastguard Workerstdin:
717*7c356e86SAndroid Build Coastguard Worker	# signed vs unsigned
718*7c356e86SAndroid Build Coastguard Worker	echo x1 $((-1)) $((#-1))
719*7c356e86SAndroid Build Coastguard Worker	# calculating
720*7c356e86SAndroid Build Coastguard Worker	typeset -i vs
721*7c356e86SAndroid Build Coastguard Worker	typeset -Ui vu
722*7c356e86SAndroid Build Coastguard Worker	vs=9223372036854775807; vu=9223372036854775807
723*7c356e86SAndroid Build Coastguard Worker	echo x2 $vs $vu
724*7c356e86SAndroid Build Coastguard Worker	let vs++ vu++
725*7c356e86SAndroid Build Coastguard Worker	echo x3 $vs $vu
726*7c356e86SAndroid Build Coastguard Worker	vs=18446744073709551615; vu=18446744073709551615
727*7c356e86SAndroid Build Coastguard Worker	echo x4 $vs $vu
728*7c356e86SAndroid Build Coastguard Worker	let vs++ vu++
729*7c356e86SAndroid Build Coastguard Worker	echo x5 $vs $vu
730*7c356e86SAndroid Build Coastguard Worker	let vs++ vu++
731*7c356e86SAndroid Build Coastguard Worker	echo x6 $vs $vu
732*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
733*7c356e86SAndroid Build Coastguard Worker	x1 -1 18446744073709551615
734*7c356e86SAndroid Build Coastguard Worker	x2 9223372036854775807 9223372036854775807
735*7c356e86SAndroid Build Coastguard Worker	x3 -9223372036854775808 9223372036854775808
736*7c356e86SAndroid Build Coastguard Worker	x4 -1 18446744073709551615
737*7c356e86SAndroid Build Coastguard Worker	x5 0 0
738*7c356e86SAndroid Build Coastguard Worker	x6 1 1
739*7c356e86SAndroid Build Coastguard Worker---
740*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-1
741*7c356e86SAndroid Build Coastguard Workerdescription:
742*7c356e86SAndroid Build Coastguard Worker	Check that \newline is not collapsed after #
743*7c356e86SAndroid Build Coastguard Workerstdin:
744*7c356e86SAndroid Build Coastguard Worker	echo hi #there \
745*7c356e86SAndroid Build Coastguard Worker	echo folks
746*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
747*7c356e86SAndroid Build Coastguard Worker	hi
748*7c356e86SAndroid Build Coastguard Worker	folks
749*7c356e86SAndroid Build Coastguard Worker---
750*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-2
751*7c356e86SAndroid Build Coastguard Workerdescription:
752*7c356e86SAndroid Build Coastguard Worker	Check that \newline is not collapsed inside single quotes
753*7c356e86SAndroid Build Coastguard Workerstdin:
754*7c356e86SAndroid Build Coastguard Worker	echo 'hi \
755*7c356e86SAndroid Build Coastguard Worker	there'
756*7c356e86SAndroid Build Coastguard Worker	echo folks
757*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
758*7c356e86SAndroid Build Coastguard Worker	hi \
759*7c356e86SAndroid Build Coastguard Worker	there
760*7c356e86SAndroid Build Coastguard Worker	folks
761*7c356e86SAndroid Build Coastguard Worker---
762*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-3
763*7c356e86SAndroid Build Coastguard Workerdescription:
764*7c356e86SAndroid Build Coastguard Worker	Check that \newline is not collapsed inside single quotes
765*7c356e86SAndroid Build Coastguard Workerstdin:
766*7c356e86SAndroid Build Coastguard Worker	cat << \EOF
767*7c356e86SAndroid Build Coastguard Worker	hi \
768*7c356e86SAndroid Build Coastguard Worker	there
769*7c356e86SAndroid Build Coastguard Worker	EOF
770*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
771*7c356e86SAndroid Build Coastguard Worker	hi \
772*7c356e86SAndroid Build Coastguard Worker	there
773*7c356e86SAndroid Build Coastguard Worker---
774*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-4
775*7c356e86SAndroid Build Coastguard Workerdescription:
776*7c356e86SAndroid Build Coastguard Worker	Check interaction of aliases, single quotes and here-documents
777*7c356e86SAndroid Build Coastguard Worker	with backslash-newline
778*7c356e86SAndroid Build Coastguard Worker	(don't know what POSIX has to say about this)
779*7c356e86SAndroid Build Coastguard Workerstdin:
780*7c356e86SAndroid Build Coastguard Worker	a=2
781*7c356e86SAndroid Build Coastguard Worker	alias x='echo hi
782*7c356e86SAndroid Build Coastguard Worker	cat << "EOF"
783*7c356e86SAndroid Build Coastguard Worker	foo\
784*7c356e86SAndroid Build Coastguard Worker	bar
785*7c356e86SAndroid Build Coastguard Worker	some'
786*7c356e86SAndroid Build Coastguard Worker	x
787*7c356e86SAndroid Build Coastguard Worker	more\
788*7c356e86SAndroid Build Coastguard Worker	stuff$a
789*7c356e86SAndroid Build Coastguard Worker	EOF
790*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
791*7c356e86SAndroid Build Coastguard Worker	hi
792*7c356e86SAndroid Build Coastguard Worker	foo\
793*7c356e86SAndroid Build Coastguard Worker	bar
794*7c356e86SAndroid Build Coastguard Worker	some
795*7c356e86SAndroid Build Coastguard Worker	more\
796*7c356e86SAndroid Build Coastguard Worker	stuff$a
797*7c356e86SAndroid Build Coastguard Worker---
798*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-5
799*7c356e86SAndroid Build Coastguard Workerdescription:
800*7c356e86SAndroid Build Coastguard Worker	Check what happens with backslash at end of input
801*7c356e86SAndroid Build Coastguard Worker	(the old Bourne shell trashes them; so do we)
802*7c356e86SAndroid Build Coastguard Workerstdin: !
803*7c356e86SAndroid Build Coastguard Worker	echo `echo foo\\`bar
804*7c356e86SAndroid Build Coastguard Worker	echo hi\
805*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
806*7c356e86SAndroid Build Coastguard Worker	foobar
807*7c356e86SAndroid Build Coastguard Worker	hi
808*7c356e86SAndroid Build Coastguard Worker---
809*7c356e86SAndroid Build Coastguard Worker#
810*7c356e86SAndroid Build Coastguard Worker# Places \newline should be collapsed
811*7c356e86SAndroid Build Coastguard Worker#
812*7c356e86SAndroid Build Coastguard Workername: bksl-nl-1
813*7c356e86SAndroid Build Coastguard Workerdescription:
814*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed before, in the middle of, and
815*7c356e86SAndroid Build Coastguard Worker	after words
816*7c356e86SAndroid Build Coastguard Workerstdin:
817*7c356e86SAndroid Build Coastguard Worker	 	 	\
818*7c356e86SAndroid Build Coastguard Worker			 echo hi\
819*7c356e86SAndroid Build Coastguard Worker	There, \
820*7c356e86SAndroid Build Coastguard Worker	folks
821*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
822*7c356e86SAndroid Build Coastguard Worker	hiThere, folks
823*7c356e86SAndroid Build Coastguard Worker---
824*7c356e86SAndroid Build Coastguard Workername: bksl-nl-2
825*7c356e86SAndroid Build Coastguard Workerdescription:
826*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in $ sequences
827*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this)
828*7c356e86SAndroid Build Coastguard Workerstdin:
829*7c356e86SAndroid Build Coastguard Worker	a=12
830*7c356e86SAndroid Build Coastguard Worker	ab=19
831*7c356e86SAndroid Build Coastguard Worker	echo $\
832*7c356e86SAndroid Build Coastguard Worker	a
833*7c356e86SAndroid Build Coastguard Worker	echo $a\
834*7c356e86SAndroid Build Coastguard Worker	b
835*7c356e86SAndroid Build Coastguard Worker	echo $\
836*7c356e86SAndroid Build Coastguard Worker	{a}
837*7c356e86SAndroid Build Coastguard Worker	echo ${a\
838*7c356e86SAndroid Build Coastguard Worker	b}
839*7c356e86SAndroid Build Coastguard Worker	echo ${ab\
840*7c356e86SAndroid Build Coastguard Worker	}
841*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
842*7c356e86SAndroid Build Coastguard Worker	12
843*7c356e86SAndroid Build Coastguard Worker	19
844*7c356e86SAndroid Build Coastguard Worker	12
845*7c356e86SAndroid Build Coastguard Worker	19
846*7c356e86SAndroid Build Coastguard Worker	19
847*7c356e86SAndroid Build Coastguard Worker---
848*7c356e86SAndroid Build Coastguard Workername: bksl-nl-3
849*7c356e86SAndroid Build Coastguard Workerdescription:
850*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in $(..) and `...` sequences
851*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this)
852*7c356e86SAndroid Build Coastguard Workerstdin:
853*7c356e86SAndroid Build Coastguard Worker	echo $\
854*7c356e86SAndroid Build Coastguard Worker	(echo foobar1)
855*7c356e86SAndroid Build Coastguard Worker	echo $(\
856*7c356e86SAndroid Build Coastguard Worker	echo foobar2)
857*7c356e86SAndroid Build Coastguard Worker	echo $(echo foo\
858*7c356e86SAndroid Build Coastguard Worker	bar3)
859*7c356e86SAndroid Build Coastguard Worker	echo $(echo foobar4\
860*7c356e86SAndroid Build Coastguard Worker	)
861*7c356e86SAndroid Build Coastguard Worker	echo `
862*7c356e86SAndroid Build Coastguard Worker	echo stuff1`
863*7c356e86SAndroid Build Coastguard Worker	echo `echo st\
864*7c356e86SAndroid Build Coastguard Worker	uff2`
865*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
866*7c356e86SAndroid Build Coastguard Worker	foobar1
867*7c356e86SAndroid Build Coastguard Worker	foobar2
868*7c356e86SAndroid Build Coastguard Worker	foobar3
869*7c356e86SAndroid Build Coastguard Worker	foobar4
870*7c356e86SAndroid Build Coastguard Worker	stuff1
871*7c356e86SAndroid Build Coastguard Worker	stuff2
872*7c356e86SAndroid Build Coastguard Worker---
873*7c356e86SAndroid Build Coastguard Workername: bksl-nl-4
874*7c356e86SAndroid Build Coastguard Workerdescription:
875*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in $((..)) sequences
876*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this)
877*7c356e86SAndroid Build Coastguard Workerstdin:
878*7c356e86SAndroid Build Coastguard Worker	echo $\
879*7c356e86SAndroid Build Coastguard Worker	((1+2))
880*7c356e86SAndroid Build Coastguard Worker	echo $(\
881*7c356e86SAndroid Build Coastguard Worker	(1+2+3))
882*7c356e86SAndroid Build Coastguard Worker	echo $((\
883*7c356e86SAndroid Build Coastguard Worker	1+2+3+4))
884*7c356e86SAndroid Build Coastguard Worker	echo $((1+\
885*7c356e86SAndroid Build Coastguard Worker	2+3+4+5))
886*7c356e86SAndroid Build Coastguard Worker	echo $((1+2+3+4+5+6)\
887*7c356e86SAndroid Build Coastguard Worker	)
888*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
889*7c356e86SAndroid Build Coastguard Worker	3
890*7c356e86SAndroid Build Coastguard Worker	6
891*7c356e86SAndroid Build Coastguard Worker	10
892*7c356e86SAndroid Build Coastguard Worker	15
893*7c356e86SAndroid Build Coastguard Worker	21
894*7c356e86SAndroid Build Coastguard Worker---
895*7c356e86SAndroid Build Coastguard Workername: bksl-nl-5
896*7c356e86SAndroid Build Coastguard Workerdescription:
897*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in double quoted strings
898*7c356e86SAndroid Build Coastguard Workerstdin:
899*7c356e86SAndroid Build Coastguard Worker	echo "\
900*7c356e86SAndroid Build Coastguard Worker	hi"
901*7c356e86SAndroid Build Coastguard Worker	echo "foo\
902*7c356e86SAndroid Build Coastguard Worker	bar"
903*7c356e86SAndroid Build Coastguard Worker	echo "folks\
904*7c356e86SAndroid Build Coastguard Worker	"
905*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
906*7c356e86SAndroid Build Coastguard Worker	hi
907*7c356e86SAndroid Build Coastguard Worker	foobar
908*7c356e86SAndroid Build Coastguard Worker	folks
909*7c356e86SAndroid Build Coastguard Worker---
910*7c356e86SAndroid Build Coastguard Workername: bksl-nl-6
911*7c356e86SAndroid Build Coastguard Workerdescription:
912*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in here document delimiters
913*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails second part of this)
914*7c356e86SAndroid Build Coastguard Workerstdin:
915*7c356e86SAndroid Build Coastguard Worker	a=12
916*7c356e86SAndroid Build Coastguard Worker	cat << EO\
917*7c356e86SAndroid Build Coastguard Worker	F
918*7c356e86SAndroid Build Coastguard Worker	a=$a
919*7c356e86SAndroid Build Coastguard Worker	foo\
920*7c356e86SAndroid Build Coastguard Worker	bar
921*7c356e86SAndroid Build Coastguard Worker	EOF
922*7c356e86SAndroid Build Coastguard Worker	cat << E_O_F
923*7c356e86SAndroid Build Coastguard Worker	foo
924*7c356e86SAndroid Build Coastguard Worker	E_O_\
925*7c356e86SAndroid Build Coastguard Worker	F
926*7c356e86SAndroid Build Coastguard Worker	echo done
927*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
928*7c356e86SAndroid Build Coastguard Worker	a=12
929*7c356e86SAndroid Build Coastguard Worker	foobar
930*7c356e86SAndroid Build Coastguard Worker	foo
931*7c356e86SAndroid Build Coastguard Worker	done
932*7c356e86SAndroid Build Coastguard Worker---
933*7c356e86SAndroid Build Coastguard Workername: bksl-nl-7
934*7c356e86SAndroid Build Coastguard Workerdescription:
935*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in double-quoted here-document
936*7c356e86SAndroid Build Coastguard Worker	delimiter.
937*7c356e86SAndroid Build Coastguard Workerstdin:
938*7c356e86SAndroid Build Coastguard Worker	a=12
939*7c356e86SAndroid Build Coastguard Worker	cat << "EO\
940*7c356e86SAndroid Build Coastguard Worker	F"
941*7c356e86SAndroid Build Coastguard Worker	a=$a
942*7c356e86SAndroid Build Coastguard Worker	foo\
943*7c356e86SAndroid Build Coastguard Worker	bar
944*7c356e86SAndroid Build Coastguard Worker	EOF
945*7c356e86SAndroid Build Coastguard Worker	echo done
946*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
947*7c356e86SAndroid Build Coastguard Worker	a=$a
948*7c356e86SAndroid Build Coastguard Worker	foo\
949*7c356e86SAndroid Build Coastguard Worker	bar
950*7c356e86SAndroid Build Coastguard Worker	done
951*7c356e86SAndroid Build Coastguard Worker---
952*7c356e86SAndroid Build Coastguard Workername: bksl-nl-8
953*7c356e86SAndroid Build Coastguard Workerdescription:
954*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in various 2+ character tokens
955*7c356e86SAndroid Build Coastguard Worker	delimiter.
956*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this)
957*7c356e86SAndroid Build Coastguard Workerstdin:
958*7c356e86SAndroid Build Coastguard Worker	echo hi &\
959*7c356e86SAndroid Build Coastguard Worker	& echo there
960*7c356e86SAndroid Build Coastguard Worker	echo foo |\
961*7c356e86SAndroid Build Coastguard Worker	| echo bar
962*7c356e86SAndroid Build Coastguard Worker	cat <\
963*7c356e86SAndroid Build Coastguard Worker	< EOF
964*7c356e86SAndroid Build Coastguard Worker	stuff
965*7c356e86SAndroid Build Coastguard Worker	EOF
966*7c356e86SAndroid Build Coastguard Worker	cat <\
967*7c356e86SAndroid Build Coastguard Worker	<\
968*7c356e86SAndroid Build Coastguard Worker	- EOF
969*7c356e86SAndroid Build Coastguard Worker		more stuff
970*7c356e86SAndroid Build Coastguard Worker	EOF
971*7c356e86SAndroid Build Coastguard Worker	cat <<\
972*7c356e86SAndroid Build Coastguard Worker	EOF
973*7c356e86SAndroid Build Coastguard Worker	abcdef
974*7c356e86SAndroid Build Coastguard Worker	EOF
975*7c356e86SAndroid Build Coastguard Worker	echo hi >\
976*7c356e86SAndroid Build Coastguard Worker	> /dev/null
977*7c356e86SAndroid Build Coastguard Worker	echo $?
978*7c356e86SAndroid Build Coastguard Worker	i=1
979*7c356e86SAndroid Build Coastguard Worker	case $i in
980*7c356e86SAndroid Build Coastguard Worker	(\
981*7c356e86SAndroid Build Coastguard Worker	x|\
982*7c356e86SAndroid Build Coastguard Worker	1\
983*7c356e86SAndroid Build Coastguard Worker	) echo hi;\
984*7c356e86SAndroid Build Coastguard Worker	;
985*7c356e86SAndroid Build Coastguard Worker	(*) echo oops
986*7c356e86SAndroid Build Coastguard Worker	esac
987*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
988*7c356e86SAndroid Build Coastguard Worker	hi
989*7c356e86SAndroid Build Coastguard Worker	there
990*7c356e86SAndroid Build Coastguard Worker	foo
991*7c356e86SAndroid Build Coastguard Worker	stuff
992*7c356e86SAndroid Build Coastguard Worker	more stuff
993*7c356e86SAndroid Build Coastguard Worker	abcdef
994*7c356e86SAndroid Build Coastguard Worker	0
995*7c356e86SAndroid Build Coastguard Worker	hi
996*7c356e86SAndroid Build Coastguard Worker---
997*7c356e86SAndroid Build Coastguard Workername: bksl-nl-9
998*7c356e86SAndroid Build Coastguard Workerdescription:
999*7c356e86SAndroid Build Coastguard Worker	Check that \ at the end of an alias is collapsed when followed
1000*7c356e86SAndroid Build Coastguard Worker	by a newline
1001*7c356e86SAndroid Build Coastguard Worker	(don't know what POSIX has to say about this)
1002*7c356e86SAndroid Build Coastguard Workerstdin:
1003*7c356e86SAndroid Build Coastguard Worker	alias x='echo hi\'
1004*7c356e86SAndroid Build Coastguard Worker	x
1005*7c356e86SAndroid Build Coastguard Worker	echo there
1006*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1007*7c356e86SAndroid Build Coastguard Worker	hiecho there
1008*7c356e86SAndroid Build Coastguard Worker---
1009*7c356e86SAndroid Build Coastguard Workername: bksl-nl-10
1010*7c356e86SAndroid Build Coastguard Workerdescription:
1011*7c356e86SAndroid Build Coastguard Worker	Check that \newline in a keyword is collapsed
1012*7c356e86SAndroid Build Coastguard Workerstdin:
1013*7c356e86SAndroid Build Coastguard Worker	i\
1014*7c356e86SAndroid Build Coastguard Worker	f true; then\
1015*7c356e86SAndroid Build Coastguard Worker	 echo pass; el\
1016*7c356e86SAndroid Build Coastguard Worker	se echo fail; fi
1017*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1018*7c356e86SAndroid Build Coastguard Worker	pass
1019*7c356e86SAndroid Build Coastguard Worker---
1020*7c356e86SAndroid Build Coastguard Worker#
1021*7c356e86SAndroid Build Coastguard Worker# Places \newline should be collapsed (ksh extensions)
1022*7c356e86SAndroid Build Coastguard Worker#
1023*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ksh-1
1024*7c356e86SAndroid Build Coastguard Workerdescription:
1025*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in extended globbing
1026*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this)
1027*7c356e86SAndroid Build Coastguard Workerstdin:
1028*7c356e86SAndroid Build Coastguard Worker	xxx=foo
1029*7c356e86SAndroid Build Coastguard Worker	case $xxx in
1030*7c356e86SAndroid Build Coastguard Worker	(f*\
1031*7c356e86SAndroid Build Coastguard Worker	(\
1032*7c356e86SAndroid Build Coastguard Worker	o\
1033*7c356e86SAndroid Build Coastguard Worker	)\
1034*7c356e86SAndroid Build Coastguard Worker	) echo ok ;;
1035*7c356e86SAndroid Build Coastguard Worker	*) echo bad
1036*7c356e86SAndroid Build Coastguard Worker	esac
1037*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1038*7c356e86SAndroid Build Coastguard Worker	ok
1039*7c356e86SAndroid Build Coastguard Worker---
1040*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ksh-2
1041*7c356e86SAndroid Build Coastguard Workerdescription:
1042*7c356e86SAndroid Build Coastguard Worker	Check that \newline is collapsed in ((...)) expressions
1043*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this)
1044*7c356e86SAndroid Build Coastguard Workerstdin:
1045*7c356e86SAndroid Build Coastguard Worker	i=1
1046*7c356e86SAndroid Build Coastguard Worker	(\
1047*7c356e86SAndroid Build Coastguard Worker	(\
1048*7c356e86SAndroid Build Coastguard Worker	i=i+2\
1049*7c356e86SAndroid Build Coastguard Worker	)\
1050*7c356e86SAndroid Build Coastguard Worker	)
1051*7c356e86SAndroid Build Coastguard Worker	echo $i
1052*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1053*7c356e86SAndroid Build Coastguard Worker	3
1054*7c356e86SAndroid Build Coastguard Worker---
1055*7c356e86SAndroid Build Coastguard Workername: break-1
1056*7c356e86SAndroid Build Coastguard Workerdescription:
1057*7c356e86SAndroid Build Coastguard Worker	See if break breaks out of loops
1058*7c356e86SAndroid Build Coastguard Workerstdin:
1059*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; break; echo bad-$i; done
1060*7c356e86SAndroid Build Coastguard Worker	echo end-1
1061*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; break 1; echo bad-$i; done
1062*7c356e86SAndroid Build Coastguard Worker	echo end-2
1063*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do
1064*7c356e86SAndroid Build Coastguard Worker	    for j in x y z; do
1065*7c356e86SAndroid Build Coastguard Worker		echo $i:$j
1066*7c356e86SAndroid Build Coastguard Worker		break
1067*7c356e86SAndroid Build Coastguard Worker		echo bad-$i
1068*7c356e86SAndroid Build Coastguard Worker	    done
1069*7c356e86SAndroid Build Coastguard Worker	    echo end-$i
1070*7c356e86SAndroid Build Coastguard Worker	done
1071*7c356e86SAndroid Build Coastguard Worker	echo end-3
1072*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; eval break; echo bad-$i; done
1073*7c356e86SAndroid Build Coastguard Worker	echo end-4
1074*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1075*7c356e86SAndroid Build Coastguard Worker	a
1076*7c356e86SAndroid Build Coastguard Worker	end-1
1077*7c356e86SAndroid Build Coastguard Worker	a
1078*7c356e86SAndroid Build Coastguard Worker	end-2
1079*7c356e86SAndroid Build Coastguard Worker	a:x
1080*7c356e86SAndroid Build Coastguard Worker	end-a
1081*7c356e86SAndroid Build Coastguard Worker	b:x
1082*7c356e86SAndroid Build Coastguard Worker	end-b
1083*7c356e86SAndroid Build Coastguard Worker	c:x
1084*7c356e86SAndroid Build Coastguard Worker	end-c
1085*7c356e86SAndroid Build Coastguard Worker	end-3
1086*7c356e86SAndroid Build Coastguard Worker	a
1087*7c356e86SAndroid Build Coastguard Worker	end-4
1088*7c356e86SAndroid Build Coastguard Worker---
1089*7c356e86SAndroid Build Coastguard Workername: break-2
1090*7c356e86SAndroid Build Coastguard Workerdescription:
1091*7c356e86SAndroid Build Coastguard Worker	See if break breaks out of nested loops
1092*7c356e86SAndroid Build Coastguard Workerstdin:
1093*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do
1094*7c356e86SAndroid Build Coastguard Worker	    for j in x y z; do
1095*7c356e86SAndroid Build Coastguard Worker		echo $i:$j
1096*7c356e86SAndroid Build Coastguard Worker		break 2
1097*7c356e86SAndroid Build Coastguard Worker		echo bad-$i
1098*7c356e86SAndroid Build Coastguard Worker	    done
1099*7c356e86SAndroid Build Coastguard Worker	    echo end-$i
1100*7c356e86SAndroid Build Coastguard Worker	done
1101*7c356e86SAndroid Build Coastguard Worker	echo end
1102*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1103*7c356e86SAndroid Build Coastguard Worker	a:x
1104*7c356e86SAndroid Build Coastguard Worker	end
1105*7c356e86SAndroid Build Coastguard Worker---
1106*7c356e86SAndroid Build Coastguard Workername: break-3
1107*7c356e86SAndroid Build Coastguard Workerdescription:
1108*7c356e86SAndroid Build Coastguard Worker	What if break used outside of any loops
1109*7c356e86SAndroid Build Coastguard Worker	(ksh88,ksh93 don't print error messages here)
1110*7c356e86SAndroid Build Coastguard Workerstdin:
1111*7c356e86SAndroid Build Coastguard Worker	break
1112*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1113*7c356e86SAndroid Build Coastguard Worker	/.*break.*/
1114*7c356e86SAndroid Build Coastguard Worker---
1115*7c356e86SAndroid Build Coastguard Workername: break-4
1116*7c356e86SAndroid Build Coastguard Workerdescription:
1117*7c356e86SAndroid Build Coastguard Worker	What if break N used when only N-1 loops
1118*7c356e86SAndroid Build Coastguard Worker	(ksh88,ksh93 don't print error messages here)
1119*7c356e86SAndroid Build Coastguard Workerstdin:
1120*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; break 2; echo bad-$i; done
1121*7c356e86SAndroid Build Coastguard Worker	echo end
1122*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1123*7c356e86SAndroid Build Coastguard Worker	a
1124*7c356e86SAndroid Build Coastguard Worker	end
1125*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1126*7c356e86SAndroid Build Coastguard Worker	/.*break.*/
1127*7c356e86SAndroid Build Coastguard Worker---
1128*7c356e86SAndroid Build Coastguard Workername: break-5
1129*7c356e86SAndroid Build Coastguard Workerdescription:
1130*7c356e86SAndroid Build Coastguard Worker	Error if break argument isn't a number
1131*7c356e86SAndroid Build Coastguard Workerstdin:
1132*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; break abc; echo more-$i; done
1133*7c356e86SAndroid Build Coastguard Worker	echo end
1134*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1135*7c356e86SAndroid Build Coastguard Worker	a
1136*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
1137*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1138*7c356e86SAndroid Build Coastguard Worker	/.*break.*/
1139*7c356e86SAndroid Build Coastguard Worker---
1140*7c356e86SAndroid Build Coastguard Workername: continue-1
1141*7c356e86SAndroid Build Coastguard Workerdescription:
1142*7c356e86SAndroid Build Coastguard Worker	See if continue continues loops
1143*7c356e86SAndroid Build Coastguard Workerstdin:
1144*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; continue; echo bad-$i ; done
1145*7c356e86SAndroid Build Coastguard Worker	echo end-1
1146*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; continue 1; echo bad-$i; done
1147*7c356e86SAndroid Build Coastguard Worker	echo end-2
1148*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do
1149*7c356e86SAndroid Build Coastguard Worker	    for j in x y z; do
1150*7c356e86SAndroid Build Coastguard Worker		echo $i:$j
1151*7c356e86SAndroid Build Coastguard Worker		continue
1152*7c356e86SAndroid Build Coastguard Worker		echo bad-$i-$j
1153*7c356e86SAndroid Build Coastguard Worker	    done
1154*7c356e86SAndroid Build Coastguard Worker	    echo end-$i
1155*7c356e86SAndroid Build Coastguard Worker	done
1156*7c356e86SAndroid Build Coastguard Worker	echo end-3
1157*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; eval continue; echo bad-$i ; done
1158*7c356e86SAndroid Build Coastguard Worker	echo end-4
1159*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1160*7c356e86SAndroid Build Coastguard Worker	a
1161*7c356e86SAndroid Build Coastguard Worker	b
1162*7c356e86SAndroid Build Coastguard Worker	c
1163*7c356e86SAndroid Build Coastguard Worker	end-1
1164*7c356e86SAndroid Build Coastguard Worker	a
1165*7c356e86SAndroid Build Coastguard Worker	b
1166*7c356e86SAndroid Build Coastguard Worker	c
1167*7c356e86SAndroid Build Coastguard Worker	end-2
1168*7c356e86SAndroid Build Coastguard Worker	a:x
1169*7c356e86SAndroid Build Coastguard Worker	a:y
1170*7c356e86SAndroid Build Coastguard Worker	a:z
1171*7c356e86SAndroid Build Coastguard Worker	end-a
1172*7c356e86SAndroid Build Coastguard Worker	b:x
1173*7c356e86SAndroid Build Coastguard Worker	b:y
1174*7c356e86SAndroid Build Coastguard Worker	b:z
1175*7c356e86SAndroid Build Coastguard Worker	end-b
1176*7c356e86SAndroid Build Coastguard Worker	c:x
1177*7c356e86SAndroid Build Coastguard Worker	c:y
1178*7c356e86SAndroid Build Coastguard Worker	c:z
1179*7c356e86SAndroid Build Coastguard Worker	end-c
1180*7c356e86SAndroid Build Coastguard Worker	end-3
1181*7c356e86SAndroid Build Coastguard Worker	a
1182*7c356e86SAndroid Build Coastguard Worker	b
1183*7c356e86SAndroid Build Coastguard Worker	c
1184*7c356e86SAndroid Build Coastguard Worker	end-4
1185*7c356e86SAndroid Build Coastguard Worker---
1186*7c356e86SAndroid Build Coastguard Workername: continue-2
1187*7c356e86SAndroid Build Coastguard Workerdescription:
1188*7c356e86SAndroid Build Coastguard Worker	See if continue breaks out of nested loops
1189*7c356e86SAndroid Build Coastguard Workerstdin:
1190*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do
1191*7c356e86SAndroid Build Coastguard Worker	    for j in x y z; do
1192*7c356e86SAndroid Build Coastguard Worker		echo $i:$j
1193*7c356e86SAndroid Build Coastguard Worker		continue 2
1194*7c356e86SAndroid Build Coastguard Worker		echo bad-$i-$j
1195*7c356e86SAndroid Build Coastguard Worker	    done
1196*7c356e86SAndroid Build Coastguard Worker	    echo end-$i
1197*7c356e86SAndroid Build Coastguard Worker	done
1198*7c356e86SAndroid Build Coastguard Worker	echo end
1199*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1200*7c356e86SAndroid Build Coastguard Worker	a:x
1201*7c356e86SAndroid Build Coastguard Worker	b:x
1202*7c356e86SAndroid Build Coastguard Worker	c:x
1203*7c356e86SAndroid Build Coastguard Worker	end
1204*7c356e86SAndroid Build Coastguard Worker---
1205*7c356e86SAndroid Build Coastguard Workername: continue-3
1206*7c356e86SAndroid Build Coastguard Workerdescription:
1207*7c356e86SAndroid Build Coastguard Worker	What if continue used outside of any loops
1208*7c356e86SAndroid Build Coastguard Worker	(ksh88,ksh93 don't print error messages here)
1209*7c356e86SAndroid Build Coastguard Workerstdin:
1210*7c356e86SAndroid Build Coastguard Worker	continue
1211*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1212*7c356e86SAndroid Build Coastguard Worker	/.*continue.*/
1213*7c356e86SAndroid Build Coastguard Worker---
1214*7c356e86SAndroid Build Coastguard Workername: continue-4
1215*7c356e86SAndroid Build Coastguard Workerdescription:
1216*7c356e86SAndroid Build Coastguard Worker	What if continue N used when only N-1 loops
1217*7c356e86SAndroid Build Coastguard Worker	(ksh88,ksh93 don't print error messages here)
1218*7c356e86SAndroid Build Coastguard Workerstdin:
1219*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; continue 2; echo bad-$i; done
1220*7c356e86SAndroid Build Coastguard Worker	echo end
1221*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1222*7c356e86SAndroid Build Coastguard Worker	a
1223*7c356e86SAndroid Build Coastguard Worker	b
1224*7c356e86SAndroid Build Coastguard Worker	c
1225*7c356e86SAndroid Build Coastguard Worker	end
1226*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1227*7c356e86SAndroid Build Coastguard Worker	/.*continue.*/
1228*7c356e86SAndroid Build Coastguard Worker---
1229*7c356e86SAndroid Build Coastguard Workername: continue-5
1230*7c356e86SAndroid Build Coastguard Workerdescription:
1231*7c356e86SAndroid Build Coastguard Worker	Error if continue argument isn't a number
1232*7c356e86SAndroid Build Coastguard Workerstdin:
1233*7c356e86SAndroid Build Coastguard Worker	for i in a b c; do echo $i; continue abc; echo more-$i; done
1234*7c356e86SAndroid Build Coastguard Worker	echo end
1235*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1236*7c356e86SAndroid Build Coastguard Worker	a
1237*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
1238*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1239*7c356e86SAndroid Build Coastguard Worker	/.*continue.*/
1240*7c356e86SAndroid Build Coastguard Worker---
1241*7c356e86SAndroid Build Coastguard Workername: cd-history
1242*7c356e86SAndroid Build Coastguard Workerdescription:
1243*7c356e86SAndroid Build Coastguard Worker	Test someone's CD history package (uses arrays)
1244*7c356e86SAndroid Build Coastguard Workerstdin:
1245*7c356e86SAndroid Build Coastguard Worker	# go to known place before doing anything
1246*7c356e86SAndroid Build Coastguard Worker	cd /
1247*7c356e86SAndroid Build Coastguard Worker
1248*7c356e86SAndroid Build Coastguard Worker	alias cd=_cd
1249*7c356e86SAndroid Build Coastguard Worker	function _cd
1250*7c356e86SAndroid Build Coastguard Worker	{
1251*7c356e86SAndroid Build Coastguard Worker		typeset -i cdlen i
1252*7c356e86SAndroid Build Coastguard Worker		typeset t
1253*7c356e86SAndroid Build Coastguard Worker
1254*7c356e86SAndroid Build Coastguard Worker		if [ $# -eq 0 ]
1255*7c356e86SAndroid Build Coastguard Worker		then
1256*7c356e86SAndroid Build Coastguard Worker			set -- $HOME
1257*7c356e86SAndroid Build Coastguard Worker		fi
1258*7c356e86SAndroid Build Coastguard Worker
1259*7c356e86SAndroid Build Coastguard Worker		if [ "$CDHISTFILE" -a -r "$CDHISTFILE" ] # if directory history exists
1260*7c356e86SAndroid Build Coastguard Worker		then
1261*7c356e86SAndroid Build Coastguard Worker			typeset CDHIST
1262*7c356e86SAndroid Build Coastguard Worker			i=-1
1263*7c356e86SAndroid Build Coastguard Worker			while read -r t			# read directory history file
1264*7c356e86SAndroid Build Coastguard Worker			do
1265*7c356e86SAndroid Build Coastguard Worker				CDHIST[i=i+1]=$t
1266*7c356e86SAndroid Build Coastguard Worker			done <$CDHISTFILE
1267*7c356e86SAndroid Build Coastguard Worker		fi
1268*7c356e86SAndroid Build Coastguard Worker
1269*7c356e86SAndroid Build Coastguard Worker		if [ "${CDHIST[0]}" != "$PWD" -a "$PWD" != "" ]
1270*7c356e86SAndroid Build Coastguard Worker		then
1271*7c356e86SAndroid Build Coastguard Worker			_cdins				# insert $PWD into cd history
1272*7c356e86SAndroid Build Coastguard Worker		fi
1273*7c356e86SAndroid Build Coastguard Worker
1274*7c356e86SAndroid Build Coastguard Worker		cdlen=${#CDHIST[*]}			# number of elements in history
1275*7c356e86SAndroid Build Coastguard Worker
1276*7c356e86SAndroid Build Coastguard Worker		case "$@" in
1277*7c356e86SAndroid Build Coastguard Worker		-)					# cd to new dir
1278*7c356e86SAndroid Build Coastguard Worker			if [ "$OLDPWD" = "" ] && ((cdlen>1))
1279*7c356e86SAndroid Build Coastguard Worker			then
1280*7c356e86SAndroid Build Coastguard Worker				'print' ${CDHIST[1]}
1281*7c356e86SAndroid Build Coastguard Worker				'cd' ${CDHIST[1]}
1282*7c356e86SAndroid Build Coastguard Worker				_pwd
1283*7c356e86SAndroid Build Coastguard Worker			else
1284*7c356e86SAndroid Build Coastguard Worker				'cd' $@
1285*7c356e86SAndroid Build Coastguard Worker				_pwd
1286*7c356e86SAndroid Build Coastguard Worker			fi
1287*7c356e86SAndroid Build Coastguard Worker			;;
1288*7c356e86SAndroid Build Coastguard Worker		-l)					# print directory list
1289*7c356e86SAndroid Build Coastguard Worker			typeset -R3 num
1290*7c356e86SAndroid Build Coastguard Worker			((i=cdlen))
1291*7c356e86SAndroid Build Coastguard Worker			while (((i=i-1)>=0))
1292*7c356e86SAndroid Build Coastguard Worker			do
1293*7c356e86SAndroid Build Coastguard Worker				num=$i
1294*7c356e86SAndroid Build Coastguard Worker				'print' "$num ${CDHIST[i]}"
1295*7c356e86SAndroid Build Coastguard Worker			done
1296*7c356e86SAndroid Build Coastguard Worker			return
1297*7c356e86SAndroid Build Coastguard Worker			;;
1298*7c356e86SAndroid Build Coastguard Worker		-[0-9]|-[0-9][0-9])			# cd to dir in list
1299*7c356e86SAndroid Build Coastguard Worker			if (((i=${1#-})<cdlen))
1300*7c356e86SAndroid Build Coastguard Worker			then
1301*7c356e86SAndroid Build Coastguard Worker				'print' ${CDHIST[i]}
1302*7c356e86SAndroid Build Coastguard Worker				'cd' ${CDHIST[i]}
1303*7c356e86SAndroid Build Coastguard Worker				_pwd
1304*7c356e86SAndroid Build Coastguard Worker			else
1305*7c356e86SAndroid Build Coastguard Worker				'cd' $@
1306*7c356e86SAndroid Build Coastguard Worker				_pwd
1307*7c356e86SAndroid Build Coastguard Worker			fi
1308*7c356e86SAndroid Build Coastguard Worker			;;
1309*7c356e86SAndroid Build Coastguard Worker		-*)					# cd to matched dir in list
1310*7c356e86SAndroid Build Coastguard Worker			t=${1#-}
1311*7c356e86SAndroid Build Coastguard Worker			i=1
1312*7c356e86SAndroid Build Coastguard Worker			while ((i<cdlen))
1313*7c356e86SAndroid Build Coastguard Worker			do
1314*7c356e86SAndroid Build Coastguard Worker				case ${CDHIST[i]} in
1315*7c356e86SAndroid Build Coastguard Worker				*$t*)
1316*7c356e86SAndroid Build Coastguard Worker					'print' ${CDHIST[i]}
1317*7c356e86SAndroid Build Coastguard Worker					'cd' ${CDHIST[i]}
1318*7c356e86SAndroid Build Coastguard Worker					_pwd
1319*7c356e86SAndroid Build Coastguard Worker					break
1320*7c356e86SAndroid Build Coastguard Worker					;;
1321*7c356e86SAndroid Build Coastguard Worker				esac
1322*7c356e86SAndroid Build Coastguard Worker				((i=i+1))
1323*7c356e86SAndroid Build Coastguard Worker			done
1324*7c356e86SAndroid Build Coastguard Worker			if ((i>=cdlen))
1325*7c356e86SAndroid Build Coastguard Worker			then
1326*7c356e86SAndroid Build Coastguard Worker				'cd' $@
1327*7c356e86SAndroid Build Coastguard Worker				_pwd
1328*7c356e86SAndroid Build Coastguard Worker			fi
1329*7c356e86SAndroid Build Coastguard Worker			;;
1330*7c356e86SAndroid Build Coastguard Worker		*)					# cd to new dir
1331*7c356e86SAndroid Build Coastguard Worker			'cd' $@
1332*7c356e86SAndroid Build Coastguard Worker			_pwd
1333*7c356e86SAndroid Build Coastguard Worker			;;
1334*7c356e86SAndroid Build Coastguard Worker		esac
1335*7c356e86SAndroid Build Coastguard Worker
1336*7c356e86SAndroid Build Coastguard Worker		_cdins					# insert $PWD into cd history
1337*7c356e86SAndroid Build Coastguard Worker
1338*7c356e86SAndroid Build Coastguard Worker		if [ "$CDHISTFILE" ]
1339*7c356e86SAndroid Build Coastguard Worker		then
1340*7c356e86SAndroid Build Coastguard Worker			cdlen=${#CDHIST[*]}		# number of elements in history
1341*7c356e86SAndroid Build Coastguard Worker
1342*7c356e86SAndroid Build Coastguard Worker			i=0
1343*7c356e86SAndroid Build Coastguard Worker			while ((i<cdlen))
1344*7c356e86SAndroid Build Coastguard Worker			do
1345*7c356e86SAndroid Build Coastguard Worker				'print' -r ${CDHIST[i]}	# update directory history
1346*7c356e86SAndroid Build Coastguard Worker				((i=i+1))
1347*7c356e86SAndroid Build Coastguard Worker			done >$CDHISTFILE
1348*7c356e86SAndroid Build Coastguard Worker		fi
1349*7c356e86SAndroid Build Coastguard Worker	}
1350*7c356e86SAndroid Build Coastguard Worker
1351*7c356e86SAndroid Build Coastguard Worker	function _cdins					# insert $PWD into cd history
1352*7c356e86SAndroid Build Coastguard Worker	{						# meant to be called only by _cd
1353*7c356e86SAndroid Build Coastguard Worker		typeset -i i
1354*7c356e86SAndroid Build Coastguard Worker
1355*7c356e86SAndroid Build Coastguard Worker		((i=0))
1356*7c356e86SAndroid Build Coastguard Worker		while ((i<${#CDHIST[*]}))		# see if dir is already in list
1357*7c356e86SAndroid Build Coastguard Worker		do
1358*7c356e86SAndroid Build Coastguard Worker			if [ "${CDHIST[$i]}" = "$PWD" ]
1359*7c356e86SAndroid Build Coastguard Worker			then
1360*7c356e86SAndroid Build Coastguard Worker				break
1361*7c356e86SAndroid Build Coastguard Worker			fi
1362*7c356e86SAndroid Build Coastguard Worker			((i=i+1))
1363*7c356e86SAndroid Build Coastguard Worker		done
1364*7c356e86SAndroid Build Coastguard Worker
1365*7c356e86SAndroid Build Coastguard Worker		if ((i>22))				# limit max size of list
1366*7c356e86SAndroid Build Coastguard Worker		then
1367*7c356e86SAndroid Build Coastguard Worker			i=22
1368*7c356e86SAndroid Build Coastguard Worker		fi
1369*7c356e86SAndroid Build Coastguard Worker
1370*7c356e86SAndroid Build Coastguard Worker		while (((i=i-1)>=0))			# bump old dirs in list
1371*7c356e86SAndroid Build Coastguard Worker		do
1372*7c356e86SAndroid Build Coastguard Worker			CDHIST[i+1]=${CDHIST[i]}
1373*7c356e86SAndroid Build Coastguard Worker		done
1374*7c356e86SAndroid Build Coastguard Worker
1375*7c356e86SAndroid Build Coastguard Worker		CDHIST[0]=$PWD				# insert new directory in list
1376*7c356e86SAndroid Build Coastguard Worker	}
1377*7c356e86SAndroid Build Coastguard Worker
1378*7c356e86SAndroid Build Coastguard Worker
1379*7c356e86SAndroid Build Coastguard Worker	function _pwd
1380*7c356e86SAndroid Build Coastguard Worker	{
1381*7c356e86SAndroid Build Coastguard Worker		if [ -n "$ECD" ]
1382*7c356e86SAndroid Build Coastguard Worker		then
1383*7c356e86SAndroid Build Coastguard Worker			pwd 1>&6
1384*7c356e86SAndroid Build Coastguard Worker		fi
1385*7c356e86SAndroid Build Coastguard Worker	}
1386*7c356e86SAndroid Build Coastguard Worker	# Start of test
1387*7c356e86SAndroid Build Coastguard Worker	cd /tmp
1388*7c356e86SAndroid Build Coastguard Worker	cd /bin
1389*7c356e86SAndroid Build Coastguard Worker	cd /etc
1390*7c356e86SAndroid Build Coastguard Worker	cd -
1391*7c356e86SAndroid Build Coastguard Worker	cd -2
1392*7c356e86SAndroid Build Coastguard Worker	cd -l
1393*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1394*7c356e86SAndroid Build Coastguard Worker	/bin
1395*7c356e86SAndroid Build Coastguard Worker	/tmp
1396*7c356e86SAndroid Build Coastguard Worker	  3 /
1397*7c356e86SAndroid Build Coastguard Worker	  2 /etc
1398*7c356e86SAndroid Build Coastguard Worker	  1 /bin
1399*7c356e86SAndroid Build Coastguard Worker	  0 /tmp
1400*7c356e86SAndroid Build Coastguard Worker---
1401*7c356e86SAndroid Build Coastguard Workername: cd-pe
1402*7c356e86SAndroid Build Coastguard Workerdescription:
1403*7c356e86SAndroid Build Coastguard Worker	Check package for cd -Pe
1404*7c356e86SAndroid Build Coastguard Workerneed-pass: no
1405*7c356e86SAndroid Build Coastguard Worker# the mv command fails on Cygwin and z/OS
1406*7c356e86SAndroid Build Coastguard Worker# Hurd aborts the testsuite (permission denied)
1407*7c356e86SAndroid Build Coastguard Worker# QNX does not find subdir to cd into
1408*7c356e86SAndroid Build Coastguard Workercategory: !os:cygwin,!os:gnu,!os:midipix,!os:msys,!os:nto,!os:os390,!nosymlink
1409*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "x"
1410*7c356e86SAndroid Build Coastguard Worker	mkdir noread noread/target noread/target/subdir
1411*7c356e86SAndroid Build Coastguard Worker	ln -s noread link
1412*7c356e86SAndroid Build Coastguard Worker	chmod 311 noread
1413*7c356e86SAndroid Build Coastguard Worker	cd -P$1 .
1414*7c356e86SAndroid Build Coastguard Worker	echo 0=$?
1415*7c356e86SAndroid Build Coastguard Worker	bwd=$PWD
1416*7c356e86SAndroid Build Coastguard Worker	cd -P$1 link/target
1417*7c356e86SAndroid Build Coastguard Worker	echo 1=$?,${PWD#$bwd/}
1418*7c356e86SAndroid Build Coastguard Worker	epwd=$($TSHELL -c pwd 2>/dev/null)
1419*7c356e86SAndroid Build Coastguard Worker	# This unexpectedly succeeds on GNU/Linux and MidnightBSD
1420*7c356e86SAndroid Build Coastguard Worker	#echo pwd=$?,$epwd
1421*7c356e86SAndroid Build Coastguard Worker	# expect:	pwd=1,
1422*7c356e86SAndroid Build Coastguard Worker	mv ../../noread ../../renamed
1423*7c356e86SAndroid Build Coastguard Worker	cd -P$1 subdir
1424*7c356e86SAndroid Build Coastguard Worker	echo 2=$?,${PWD#$bwd/}
1425*7c356e86SAndroid Build Coastguard Worker	cd $bwd
1426*7c356e86SAndroid Build Coastguard Worker	chmod 755 noread renamed 2>/dev/null
1427*7c356e86SAndroid Build Coastguard Worker	rm -rf noread link renamed
1428*7c356e86SAndroid Build Coastguard Workerstdin:
1429*7c356e86SAndroid Build Coastguard Worker	export TSHELL="$__progname"
1430*7c356e86SAndroid Build Coastguard Worker	"$__progname" x
1431*7c356e86SAndroid Build Coastguard Worker	echo "now with -e:"
1432*7c356e86SAndroid Build Coastguard Worker	"$__progname" x e
1433*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1434*7c356e86SAndroid Build Coastguard Worker	0=0
1435*7c356e86SAndroid Build Coastguard Worker	1=0,noread/target
1436*7c356e86SAndroid Build Coastguard Worker	2=0,noread/target/subdir
1437*7c356e86SAndroid Build Coastguard Worker	now with -e:
1438*7c356e86SAndroid Build Coastguard Worker	0=0
1439*7c356e86SAndroid Build Coastguard Worker	1=0,noread/target
1440*7c356e86SAndroid Build Coastguard Worker	2=1,noread/target/subdir
1441*7c356e86SAndroid Build Coastguard Worker---
1442*7c356e86SAndroid Build Coastguard Workername: env-prompt
1443*7c356e86SAndroid Build Coastguard Workerdescription:
1444*7c356e86SAndroid Build Coastguard Worker	Check that prompt not printed when processing ENV
1445*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./foo!
1446*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "foo"
1447*7c356e86SAndroid Build Coastguard Worker	XXX=_
1448*7c356e86SAndroid Build Coastguard Worker	PS1=X
1449*7c356e86SAndroid Build Coastguard Worker	false && echo hmmm
1450*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
1451*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
1452*7c356e86SAndroid Build Coastguard Workerstdin:
1453*7c356e86SAndroid Build Coastguard Worker	echo hi${XXX}there
1454*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1455*7c356e86SAndroid Build Coastguard Worker	hi_there
1456*7c356e86SAndroid Build Coastguard Workerexpected-stderr: !
1457*7c356e86SAndroid Build Coastguard Worker	XX
1458*7c356e86SAndroid Build Coastguard Worker---
1459*7c356e86SAndroid Build Coastguard Workername: expand-ugly
1460*7c356e86SAndroid Build Coastguard Workerdescription:
1461*7c356e86SAndroid Build Coastguard Worker	Check that weird ${foo+bar} constructs are parsed correctly
1462*7c356e86SAndroid Build Coastguard Workerstdin:
1463*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nfor x in "$@"; do print -r -- "$x"; done' >pfn
1464*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nfor x in "$@"; do print -nr -- "<$x> "; done' >pfs
1465*7c356e86SAndroid Build Coastguard Worker	chmod +x pfn pfs
1466*7c356e86SAndroid Build Coastguard Worker	(echo 1 ${IFS+'}'z}) 2>/dev/null || echo failed in 1
1467*7c356e86SAndroid Build Coastguard Worker	(echo 2 "${IFS+'}'z}") 2>/dev/null || echo failed in 2
1468*7c356e86SAndroid Build Coastguard Worker	(echo 3 "foo ${IFS+'bar} baz") 2>/dev/null || echo failed in 3
1469*7c356e86SAndroid Build Coastguard Worker	(echo -n '4 '; ./pfn "foo ${IFS+"b   c"} baz") 2>/dev/null || echo failed in 4
1470*7c356e86SAndroid Build Coastguard Worker	(echo -n '5 '; ./pfn "foo ${IFS+b   c} baz") 2>/dev/null || echo failed in 5
1471*7c356e86SAndroid Build Coastguard Worker	(echo 6 ${IFS+"}"z}) 2>/dev/null || echo failed in 6
1472*7c356e86SAndroid Build Coastguard Worker	(echo 7 "${IFS+"}"z}") 2>/dev/null || echo failed in 7
1473*7c356e86SAndroid Build Coastguard Worker	(echo 8 "${IFS+\"}\"z}") 2>/dev/null || echo failed in 8
1474*7c356e86SAndroid Build Coastguard Worker	(echo 9 "${IFS+\"\}\"z}") 2>/dev/null || echo failed in 9
1475*7c356e86SAndroid Build Coastguard Worker	(echo 10 foo ${IFS+'bar} baz'}) 2>/dev/null || echo failed in 10
1476*7c356e86SAndroid Build Coastguard Worker	(echo 11 "$(echo "${IFS+'}'z}")") 2>/dev/null || echo failed in 11
1477*7c356e86SAndroid Build Coastguard Worker	(echo 12 "$(echo ${IFS+'}'z})") 2>/dev/null || echo failed in 12
1478*7c356e86SAndroid Build Coastguard Worker	(echo 13 ${IFS+\}z}) 2>/dev/null || echo failed in 13
1479*7c356e86SAndroid Build Coastguard Worker	(echo 14 "${IFS+\}z}") 2>/dev/null || echo failed in 14
1480*7c356e86SAndroid Build Coastguard Worker	u=x; (echo -n '15 '; ./pfs "foo ${IFS+a"b$u{ {"{{\}b} c ${IFS+d{}} bar" ${IFS-e{}} baz; echo .) 2>/dev/null || echo failed in 15
1481*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 16 ${IFS+h`echo -n i ${IFS+$l}h`ere}) 2>/dev/null || echo failed in 16
1482*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 17 ${IFS+h$(echo -n i ${IFS+$l}h)ere}) 2>/dev/null || echo failed in 17
1483*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 18 "${IFS+h`echo -n i ${IFS+$l}h`ere}") 2>/dev/null || echo failed in 18
1484*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 19 "${IFS+h$(echo -n i ${IFS+$l}h)ere}") 2>/dev/null || echo failed in 19
1485*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 20 ${IFS+h`echo -n i "${IFS+$l}"h`ere}) 2>/dev/null || echo failed in 20
1486*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 21 ${IFS+h$(echo -n i "${IFS+$l}"h)ere}) 2>/dev/null || echo failed in 21
1487*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 22 "${IFS+h`echo -n i "${IFS+$l}"h`ere}") 2>/dev/null || echo failed in 22
1488*7c356e86SAndroid Build Coastguard Worker	l=t; (echo 23 "${IFS+h$(echo -n i "${IFS+$l}"h)ere}") 2>/dev/null || echo failed in 23
1489*7c356e86SAndroid Build Coastguard Worker	key=value; (echo -n '24 '; ./pfn "${IFS+'$key'}") 2>/dev/null || echo failed in 24
1490*7c356e86SAndroid Build Coastguard Worker	key=value; (echo -n '25 '; ./pfn "${IFS+"'$key'"}") 2>/dev/null || echo failed in 25	# ksh93: “'$key'”
1491*7c356e86SAndroid Build Coastguard Worker	key=value; (echo -n '26 '; ./pfn ${IFS+'$key'}) 2>/dev/null || echo failed in 26
1492*7c356e86SAndroid Build Coastguard Worker	key=value; (echo -n '27 '; ./pfn ${IFS+"'$key'"}) 2>/dev/null || echo failed in 27
1493*7c356e86SAndroid Build Coastguard Worker	(echo -n '28 '; ./pfn "${IFS+"'"x ~ x'}'x"'}"x}" #') 2>/dev/null || echo failed in 28
1494*7c356e86SAndroid Build Coastguard Worker	u=x; (echo -n '29 '; ./pfs foo ${IFS+a"b$u{ {"{ {\}b} c ${IFS+d{}} bar ${IFS-e{}} baz; echo .) 2>/dev/null || echo failed in 29
1495*7c356e86SAndroid Build Coastguard Worker	(echo -n '30 '; ./pfs ${IFS+foo 'b\
1496*7c356e86SAndroid Build Coastguard Worker	ar' baz}; echo .) 2>/dev/null || (echo failed in 30; echo failed in 31)
1497*7c356e86SAndroid Build Coastguard Worker	(echo -n '32 '; ./pfs ${IFS+foo "b\
1498*7c356e86SAndroid Build Coastguard Worker	ar" baz}; echo .) 2>/dev/null || echo failed in 32
1499*7c356e86SAndroid Build Coastguard Worker	(echo -n '33 '; ./pfs "${IFS+foo 'b\
1500*7c356e86SAndroid Build Coastguard Worker	ar' baz}"; echo .) 2>/dev/null || echo failed in 33
1501*7c356e86SAndroid Build Coastguard Worker	(echo -n '34 '; ./pfs "${IFS+foo "b\
1502*7c356e86SAndroid Build Coastguard Worker	ar" baz}"; echo .) 2>/dev/null || echo failed in 34
1503*7c356e86SAndroid Build Coastguard Worker	(echo -n '35 '; ./pfs ${v=a\ b} x ${v=c\ d}; echo .) 2>/dev/null || echo failed in 35
1504*7c356e86SAndroid Build Coastguard Worker	(echo -n '36 '; ./pfs "${v=a\ b}" x "${v=c\ d}"; echo .) 2>/dev/null || echo failed in 36
1505*7c356e86SAndroid Build Coastguard Worker	(echo -n '37 '; ./pfs ${v-a\ b} x ${v-c\ d}; echo .) 2>/dev/null || echo failed in 37
1506*7c356e86SAndroid Build Coastguard Worker	(echo 38 ${IFS+x'a'y} / "${IFS+x'a'y}" .) 2>/dev/null || echo failed in 38
1507*7c356e86SAndroid Build Coastguard Worker	foo="x'a'y"; (echo 39 ${foo%*'a'*} / "${foo%*'a'*}" .) 2>/dev/null || echo failed in 39
1508*7c356e86SAndroid Build Coastguard Worker	foo="a b c"; (echo -n '40 '; ./pfs "${foo#a}"; echo .) 2>/dev/null || echo failed in 40
1509*7c356e86SAndroid Build Coastguard Worker	(foo() { return 100; }; foo; echo 41 ${#+${#:+${#?}}\ \}\}\}}) 2>/dev/null || echo failed in 41
1510*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1511*7c356e86SAndroid Build Coastguard Worker	1 }z
1512*7c356e86SAndroid Build Coastguard Worker	2 ''z}
1513*7c356e86SAndroid Build Coastguard Worker	3 foo 'bar baz
1514*7c356e86SAndroid Build Coastguard Worker	4 foo b   c baz
1515*7c356e86SAndroid Build Coastguard Worker	5 foo b   c baz
1516*7c356e86SAndroid Build Coastguard Worker	6 }z
1517*7c356e86SAndroid Build Coastguard Worker	7 }z
1518*7c356e86SAndroid Build Coastguard Worker	8 ""z}
1519*7c356e86SAndroid Build Coastguard Worker	9 "}"z
1520*7c356e86SAndroid Build Coastguard Worker	10 foo bar} baz
1521*7c356e86SAndroid Build Coastguard Worker	11 ''z}
1522*7c356e86SAndroid Build Coastguard Worker	12 }z
1523*7c356e86SAndroid Build Coastguard Worker	13 }z
1524*7c356e86SAndroid Build Coastguard Worker	14 }z
1525*7c356e86SAndroid Build Coastguard Worker	15 <foo abx{ {{{}b c d{} bar> <}> <baz> .
1526*7c356e86SAndroid Build Coastguard Worker	16 hi there
1527*7c356e86SAndroid Build Coastguard Worker	17 hi there
1528*7c356e86SAndroid Build Coastguard Worker	18 hi there
1529*7c356e86SAndroid Build Coastguard Worker	19 hi there
1530*7c356e86SAndroid Build Coastguard Worker	20 hi there
1531*7c356e86SAndroid Build Coastguard Worker	21 hi there
1532*7c356e86SAndroid Build Coastguard Worker	22 hi there
1533*7c356e86SAndroid Build Coastguard Worker	23 hi there
1534*7c356e86SAndroid Build Coastguard Worker	24 'value'
1535*7c356e86SAndroid Build Coastguard Worker	25 'value'
1536*7c356e86SAndroid Build Coastguard Worker	26 $key
1537*7c356e86SAndroid Build Coastguard Worker	27 'value'
1538*7c356e86SAndroid Build Coastguard Worker	28 'x ~ x''x}"x}" #
1539*7c356e86SAndroid Build Coastguard Worker	29 <foo> <abx{ {{> <{}b> <c> <d{}> <bar> <}> <baz> .
1540*7c356e86SAndroid Build Coastguard Worker	30 <foo> <b\
1541*7c356e86SAndroid Build Coastguard Worker	ar> <baz> .
1542*7c356e86SAndroid Build Coastguard Worker	32 <foo> <bar> <baz> .
1543*7c356e86SAndroid Build Coastguard Worker	33 <foo 'bar' baz> .
1544*7c356e86SAndroid Build Coastguard Worker	34 <foo bar baz> .
1545*7c356e86SAndroid Build Coastguard Worker	35 <a> <b> <x> <a> <b> .
1546*7c356e86SAndroid Build Coastguard Worker	36 <a\ b> <x> <a\ b> .
1547*7c356e86SAndroid Build Coastguard Worker	37 <a b> <x> <c d> .
1548*7c356e86SAndroid Build Coastguard Worker	38 xay / x'a'y .
1549*7c356e86SAndroid Build Coastguard Worker	39 x' / x' .
1550*7c356e86SAndroid Build Coastguard Worker	40 < b c> .
1551*7c356e86SAndroid Build Coastguard Worker	41 3 }}}
1552*7c356e86SAndroid Build Coastguard Worker---
1553*7c356e86SAndroid Build Coastguard Workername: expand-unglob-dblq
1554*7c356e86SAndroid Build Coastguard Workerdescription:
1555*7c356e86SAndroid Build Coastguard Worker	Check that regular "${foo+bar}" constructs are parsed correctly
1556*7c356e86SAndroid Build Coastguard Workerstdin:
1557*7c356e86SAndroid Build Coastguard Worker	u=x
1558*7c356e86SAndroid Build Coastguard Worker	tl_norm() {
1559*7c356e86SAndroid Build Coastguard Worker		v=$2
1560*7c356e86SAndroid Build Coastguard Worker		test x"$v" = x"-" && unset v
1561*7c356e86SAndroid Build Coastguard Worker		(echo "$1 plus norm foo ${v+'bar'} baz")
1562*7c356e86SAndroid Build Coastguard Worker		(echo "$1 dash norm foo ${v-'bar'} baz")
1563*7c356e86SAndroid Build Coastguard Worker		(echo "$1 eqal norm foo ${v='bar'} baz")
1564*7c356e86SAndroid Build Coastguard Worker		(echo "$1 qstn norm foo ${v?'bar'} baz") 2>/dev/null || \
1565*7c356e86SAndroid Build Coastguard Worker		    echo "$1 qstn norm -> error"
1566*7c356e86SAndroid Build Coastguard Worker		(echo "$1 PLUS norm foo ${v:+'bar'} baz")
1567*7c356e86SAndroid Build Coastguard Worker		(echo "$1 DASH norm foo ${v:-'bar'} baz")
1568*7c356e86SAndroid Build Coastguard Worker		(echo "$1 EQAL norm foo ${v:='bar'} baz")
1569*7c356e86SAndroid Build Coastguard Worker		(echo "$1 QSTN norm foo ${v:?'bar'} baz") 2>/dev/null || \
1570*7c356e86SAndroid Build Coastguard Worker		    echo "$1 QSTN norm -> error"
1571*7c356e86SAndroid Build Coastguard Worker	}
1572*7c356e86SAndroid Build Coastguard Worker	tl_paren() {
1573*7c356e86SAndroid Build Coastguard Worker		v=$2
1574*7c356e86SAndroid Build Coastguard Worker		test x"$v" = x"-" && unset v
1575*7c356e86SAndroid Build Coastguard Worker		(echo "$1 plus parn foo ${v+(bar)} baz")
1576*7c356e86SAndroid Build Coastguard Worker		(echo "$1 dash parn foo ${v-(bar)} baz")
1577*7c356e86SAndroid Build Coastguard Worker		(echo "$1 eqal parn foo ${v=(bar)} baz")
1578*7c356e86SAndroid Build Coastguard Worker		(echo "$1 qstn parn foo ${v?(bar)} baz") 2>/dev/null || \
1579*7c356e86SAndroid Build Coastguard Worker		    echo "$1 qstn parn -> error"
1580*7c356e86SAndroid Build Coastguard Worker		(echo "$1 PLUS parn foo ${v:+(bar)} baz")
1581*7c356e86SAndroid Build Coastguard Worker		(echo "$1 DASH parn foo ${v:-(bar)} baz")
1582*7c356e86SAndroid Build Coastguard Worker		(echo "$1 EQAL parn foo ${v:=(bar)} baz")
1583*7c356e86SAndroid Build Coastguard Worker		(echo "$1 QSTN parn foo ${v:?(bar)} baz") 2>/dev/null || \
1584*7c356e86SAndroid Build Coastguard Worker		    echo "$1 QSTN parn -> error"
1585*7c356e86SAndroid Build Coastguard Worker	}
1586*7c356e86SAndroid Build Coastguard Worker	tl_brace() {
1587*7c356e86SAndroid Build Coastguard Worker		v=$2
1588*7c356e86SAndroid Build Coastguard Worker		test x"$v" = x"-" && unset v
1589*7c356e86SAndroid Build Coastguard Worker		(echo "$1 plus brac foo ${v+a$u{{{\}b} c ${v+d{}} baz")
1590*7c356e86SAndroid Build Coastguard Worker		(echo "$1 dash brac foo ${v-a$u{{{\}b} c ${v-d{}} baz")
1591*7c356e86SAndroid Build Coastguard Worker		(echo "$1 eqal brac foo ${v=a$u{{{\}b} c ${v=d{}} baz")
1592*7c356e86SAndroid Build Coastguard Worker		(echo "$1 qstn brac foo ${v?a$u{{{\}b} c ${v?d{}} baz") 2>/dev/null || \
1593*7c356e86SAndroid Build Coastguard Worker		    echo "$1 qstn brac -> error"
1594*7c356e86SAndroid Build Coastguard Worker		(echo "$1 PLUS brac foo ${v:+a$u{{{\}b} c ${v:+d{}} baz")
1595*7c356e86SAndroid Build Coastguard Worker		(echo "$1 DASH brac foo ${v:-a$u{{{\}b} c ${v:-d{}} baz")
1596*7c356e86SAndroid Build Coastguard Worker		(echo "$1 EQAL brac foo ${v:=a$u{{{\}b} c ${v:=d{}} baz")
1597*7c356e86SAndroid Build Coastguard Worker		(echo "$1 QSTN brac foo ${v:?a$u{{{\}b} c ${v:?d{}} baz") 2>/dev/null || \
1598*7c356e86SAndroid Build Coastguard Worker		    echo "$1 QSTN brac -> error"
1599*7c356e86SAndroid Build Coastguard Worker	}
1600*7c356e86SAndroid Build Coastguard Worker	: '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}'
1601*7c356e86SAndroid Build Coastguard Worker	tl_norm 1 -
1602*7c356e86SAndroid Build Coastguard Worker	tl_norm 2 ''
1603*7c356e86SAndroid Build Coastguard Worker	tl_norm 3 x
1604*7c356e86SAndroid Build Coastguard Worker	tl_paren 4 -
1605*7c356e86SAndroid Build Coastguard Worker	tl_paren 5 ''
1606*7c356e86SAndroid Build Coastguard Worker	tl_paren 6 x
1607*7c356e86SAndroid Build Coastguard Worker	tl_brace 7 -
1608*7c356e86SAndroid Build Coastguard Worker	tl_brace 8 ''
1609*7c356e86SAndroid Build Coastguard Worker	tl_brace 9 x
1610*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1611*7c356e86SAndroid Build Coastguard Worker	1 plus norm foo  baz
1612*7c356e86SAndroid Build Coastguard Worker	1 dash norm foo 'bar' baz
1613*7c356e86SAndroid Build Coastguard Worker	1 eqal norm foo 'bar' baz
1614*7c356e86SAndroid Build Coastguard Worker	1 qstn norm -> error
1615*7c356e86SAndroid Build Coastguard Worker	1 PLUS norm foo  baz
1616*7c356e86SAndroid Build Coastguard Worker	1 DASH norm foo 'bar' baz
1617*7c356e86SAndroid Build Coastguard Worker	1 EQAL norm foo 'bar' baz
1618*7c356e86SAndroid Build Coastguard Worker	1 QSTN norm -> error
1619*7c356e86SAndroid Build Coastguard Worker	2 plus norm foo 'bar' baz
1620*7c356e86SAndroid Build Coastguard Worker	2 dash norm foo  baz
1621*7c356e86SAndroid Build Coastguard Worker	2 eqal norm foo  baz
1622*7c356e86SAndroid Build Coastguard Worker	2 qstn norm foo  baz
1623*7c356e86SAndroid Build Coastguard Worker	2 PLUS norm foo  baz
1624*7c356e86SAndroid Build Coastguard Worker	2 DASH norm foo 'bar' baz
1625*7c356e86SAndroid Build Coastguard Worker	2 EQAL norm foo 'bar' baz
1626*7c356e86SAndroid Build Coastguard Worker	2 QSTN norm -> error
1627*7c356e86SAndroid Build Coastguard Worker	3 plus norm foo 'bar' baz
1628*7c356e86SAndroid Build Coastguard Worker	3 dash norm foo x baz
1629*7c356e86SAndroid Build Coastguard Worker	3 eqal norm foo x baz
1630*7c356e86SAndroid Build Coastguard Worker	3 qstn norm foo x baz
1631*7c356e86SAndroid Build Coastguard Worker	3 PLUS norm foo 'bar' baz
1632*7c356e86SAndroid Build Coastguard Worker	3 DASH norm foo x baz
1633*7c356e86SAndroid Build Coastguard Worker	3 EQAL norm foo x baz
1634*7c356e86SAndroid Build Coastguard Worker	3 QSTN norm foo x baz
1635*7c356e86SAndroid Build Coastguard Worker	4 plus parn foo  baz
1636*7c356e86SAndroid Build Coastguard Worker	4 dash parn foo (bar) baz
1637*7c356e86SAndroid Build Coastguard Worker	4 eqal parn foo (bar) baz
1638*7c356e86SAndroid Build Coastguard Worker	4 qstn parn -> error
1639*7c356e86SAndroid Build Coastguard Worker	4 PLUS parn foo  baz
1640*7c356e86SAndroid Build Coastguard Worker	4 DASH parn foo (bar) baz
1641*7c356e86SAndroid Build Coastguard Worker	4 EQAL parn foo (bar) baz
1642*7c356e86SAndroid Build Coastguard Worker	4 QSTN parn -> error
1643*7c356e86SAndroid Build Coastguard Worker	5 plus parn foo (bar) baz
1644*7c356e86SAndroid Build Coastguard Worker	5 dash parn foo  baz
1645*7c356e86SAndroid Build Coastguard Worker	5 eqal parn foo  baz
1646*7c356e86SAndroid Build Coastguard Worker	5 qstn parn foo  baz
1647*7c356e86SAndroid Build Coastguard Worker	5 PLUS parn foo  baz
1648*7c356e86SAndroid Build Coastguard Worker	5 DASH parn foo (bar) baz
1649*7c356e86SAndroid Build Coastguard Worker	5 EQAL parn foo (bar) baz
1650*7c356e86SAndroid Build Coastguard Worker	5 QSTN parn -> error
1651*7c356e86SAndroid Build Coastguard Worker	6 plus parn foo (bar) baz
1652*7c356e86SAndroid Build Coastguard Worker	6 dash parn foo x baz
1653*7c356e86SAndroid Build Coastguard Worker	6 eqal parn foo x baz
1654*7c356e86SAndroid Build Coastguard Worker	6 qstn parn foo x baz
1655*7c356e86SAndroid Build Coastguard Worker	6 PLUS parn foo (bar) baz
1656*7c356e86SAndroid Build Coastguard Worker	6 DASH parn foo x baz
1657*7c356e86SAndroid Build Coastguard Worker	6 EQAL parn foo x baz
1658*7c356e86SAndroid Build Coastguard Worker	6 QSTN parn foo x baz
1659*7c356e86SAndroid Build Coastguard Worker	7 plus brac foo  c } baz
1660*7c356e86SAndroid Build Coastguard Worker	7 dash brac foo ax{{{}b c d{} baz
1661*7c356e86SAndroid Build Coastguard Worker	7 eqal brac foo ax{{{}b c ax{{{}b} baz
1662*7c356e86SAndroid Build Coastguard Worker	7 qstn brac -> error
1663*7c356e86SAndroid Build Coastguard Worker	7 PLUS brac foo  c } baz
1664*7c356e86SAndroid Build Coastguard Worker	7 DASH brac foo ax{{{}b c d{} baz
1665*7c356e86SAndroid Build Coastguard Worker	7 EQAL brac foo ax{{{}b c ax{{{}b} baz
1666*7c356e86SAndroid Build Coastguard Worker	7 QSTN brac -> error
1667*7c356e86SAndroid Build Coastguard Worker	8 plus brac foo ax{{{}b c d{} baz
1668*7c356e86SAndroid Build Coastguard Worker	8 dash brac foo  c } baz
1669*7c356e86SAndroid Build Coastguard Worker	8 eqal brac foo  c } baz
1670*7c356e86SAndroid Build Coastguard Worker	8 qstn brac foo  c } baz
1671*7c356e86SAndroid Build Coastguard Worker	8 PLUS brac foo  c } baz
1672*7c356e86SAndroid Build Coastguard Worker	8 DASH brac foo ax{{{}b c d{} baz
1673*7c356e86SAndroid Build Coastguard Worker	8 EQAL brac foo ax{{{}b c ax{{{}b} baz
1674*7c356e86SAndroid Build Coastguard Worker	8 QSTN brac -> error
1675*7c356e86SAndroid Build Coastguard Worker	9 plus brac foo ax{{{}b c d{} baz
1676*7c356e86SAndroid Build Coastguard Worker	9 dash brac foo x c x} baz
1677*7c356e86SAndroid Build Coastguard Worker	9 eqal brac foo x c x} baz
1678*7c356e86SAndroid Build Coastguard Worker	9 qstn brac foo x c x} baz
1679*7c356e86SAndroid Build Coastguard Worker	9 PLUS brac foo ax{{{}b c d{} baz
1680*7c356e86SAndroid Build Coastguard Worker	9 DASH brac foo x c x} baz
1681*7c356e86SAndroid Build Coastguard Worker	9 EQAL brac foo x c x} baz
1682*7c356e86SAndroid Build Coastguard Worker	9 QSTN brac foo x c x} baz
1683*7c356e86SAndroid Build Coastguard Worker---
1684*7c356e86SAndroid Build Coastguard Workername: expand-unglob-unq
1685*7c356e86SAndroid Build Coastguard Workerdescription:
1686*7c356e86SAndroid Build Coastguard Worker	Check that regular ${foo+bar} constructs are parsed correctly
1687*7c356e86SAndroid Build Coastguard Workerstdin:
1688*7c356e86SAndroid Build Coastguard Worker	u=x
1689*7c356e86SAndroid Build Coastguard Worker	tl_norm() {
1690*7c356e86SAndroid Build Coastguard Worker		v=$2
1691*7c356e86SAndroid Build Coastguard Worker		test x"$v" = x"-" && unset v
1692*7c356e86SAndroid Build Coastguard Worker		(echo $1 plus norm foo ${v+'bar'} baz)
1693*7c356e86SAndroid Build Coastguard Worker		(echo $1 dash norm foo ${v-'bar'} baz)
1694*7c356e86SAndroid Build Coastguard Worker		(echo $1 eqal norm foo ${v='bar'} baz)
1695*7c356e86SAndroid Build Coastguard Worker		(echo $1 qstn norm foo ${v?'bar'} baz) 2>/dev/null || \
1696*7c356e86SAndroid Build Coastguard Worker		    echo "$1 qstn norm -> error"
1697*7c356e86SAndroid Build Coastguard Worker		(echo $1 PLUS norm foo ${v:+'bar'} baz)
1698*7c356e86SAndroid Build Coastguard Worker		(echo $1 DASH norm foo ${v:-'bar'} baz)
1699*7c356e86SAndroid Build Coastguard Worker		(echo $1 EQAL norm foo ${v:='bar'} baz)
1700*7c356e86SAndroid Build Coastguard Worker		(echo $1 QSTN norm foo ${v:?'bar'} baz) 2>/dev/null || \
1701*7c356e86SAndroid Build Coastguard Worker		    echo "$1 QSTN norm -> error"
1702*7c356e86SAndroid Build Coastguard Worker	}
1703*7c356e86SAndroid Build Coastguard Worker	tl_paren() {
1704*7c356e86SAndroid Build Coastguard Worker		v=$2
1705*7c356e86SAndroid Build Coastguard Worker		test x"$v" = x"-" && unset v
1706*7c356e86SAndroid Build Coastguard Worker		(echo $1 plus parn foo ${v+\(bar')'} baz)
1707*7c356e86SAndroid Build Coastguard Worker		(echo $1 dash parn foo ${v-\(bar')'} baz)
1708*7c356e86SAndroid Build Coastguard Worker		(echo $1 eqal parn foo ${v=\(bar')'} baz)
1709*7c356e86SAndroid Build Coastguard Worker		(echo $1 qstn parn foo ${v?\(bar')'} baz) 2>/dev/null || \
1710*7c356e86SAndroid Build Coastguard Worker		    echo "$1 qstn parn -> error"
1711*7c356e86SAndroid Build Coastguard Worker		(echo $1 PLUS parn foo ${v:+\(bar')'} baz)
1712*7c356e86SAndroid Build Coastguard Worker		(echo $1 DASH parn foo ${v:-\(bar')'} baz)
1713*7c356e86SAndroid Build Coastguard Worker		(echo $1 EQAL parn foo ${v:=\(bar')'} baz)
1714*7c356e86SAndroid Build Coastguard Worker		(echo $1 QSTN parn foo ${v:?\(bar')'} baz) 2>/dev/null || \
1715*7c356e86SAndroid Build Coastguard Worker		    echo "$1 QSTN parn -> error"
1716*7c356e86SAndroid Build Coastguard Worker	}
1717*7c356e86SAndroid Build Coastguard Worker	tl_brace() {
1718*7c356e86SAndroid Build Coastguard Worker		v=$2
1719*7c356e86SAndroid Build Coastguard Worker		test x"$v" = x"-" && unset v
1720*7c356e86SAndroid Build Coastguard Worker		(echo $1 plus brac foo ${v+a$u{{{\}b} c ${v+d{}} baz)
1721*7c356e86SAndroid Build Coastguard Worker		(echo $1 dash brac foo ${v-a$u{{{\}b} c ${v-d{}} baz)
1722*7c356e86SAndroid Build Coastguard Worker		(echo $1 eqal brac foo ${v=a$u{{{\}b} c ${v=d{}} baz)
1723*7c356e86SAndroid Build Coastguard Worker		(echo $1 qstn brac foo ${v?a$u{{{\}b} c ${v?d{}} baz) 2>/dev/null || \
1724*7c356e86SAndroid Build Coastguard Worker		    echo "$1 qstn brac -> error"
1725*7c356e86SAndroid Build Coastguard Worker		(echo $1 PLUS brac foo ${v:+a$u{{{\}b} c ${v:+d{}} baz)
1726*7c356e86SAndroid Build Coastguard Worker		(echo $1 DASH brac foo ${v:-a$u{{{\}b} c ${v:-d{}} baz)
1727*7c356e86SAndroid Build Coastguard Worker		(echo $1 EQAL brac foo ${v:=a$u{{{\}b} c ${v:=d{}} baz)
1728*7c356e86SAndroid Build Coastguard Worker		(echo $1 QSTN brac foo ${v:?a$u{{{\}b} c ${v:?d{}} baz) 2>/dev/null || \
1729*7c356e86SAndroid Build Coastguard Worker		    echo "$1 QSTN brac -> error"
1730*7c356e86SAndroid Build Coastguard Worker	}
1731*7c356e86SAndroid Build Coastguard Worker	: '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}'
1732*7c356e86SAndroid Build Coastguard Worker	tl_norm 1 -
1733*7c356e86SAndroid Build Coastguard Worker	tl_norm 2 ''
1734*7c356e86SAndroid Build Coastguard Worker	tl_norm 3 x
1735*7c356e86SAndroid Build Coastguard Worker	tl_paren 4 -
1736*7c356e86SAndroid Build Coastguard Worker	tl_paren 5 ''
1737*7c356e86SAndroid Build Coastguard Worker	tl_paren 6 x
1738*7c356e86SAndroid Build Coastguard Worker	tl_brace 7 -
1739*7c356e86SAndroid Build Coastguard Worker	tl_brace 8 ''
1740*7c356e86SAndroid Build Coastguard Worker	tl_brace 9 x
1741*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1742*7c356e86SAndroid Build Coastguard Worker	1 plus norm foo baz
1743*7c356e86SAndroid Build Coastguard Worker	1 dash norm foo bar baz
1744*7c356e86SAndroid Build Coastguard Worker	1 eqal norm foo bar baz
1745*7c356e86SAndroid Build Coastguard Worker	1 qstn norm -> error
1746*7c356e86SAndroid Build Coastguard Worker	1 PLUS norm foo baz
1747*7c356e86SAndroid Build Coastguard Worker	1 DASH norm foo bar baz
1748*7c356e86SAndroid Build Coastguard Worker	1 EQAL norm foo bar baz
1749*7c356e86SAndroid Build Coastguard Worker	1 QSTN norm -> error
1750*7c356e86SAndroid Build Coastguard Worker	2 plus norm foo bar baz
1751*7c356e86SAndroid Build Coastguard Worker	2 dash norm foo baz
1752*7c356e86SAndroid Build Coastguard Worker	2 eqal norm foo baz
1753*7c356e86SAndroid Build Coastguard Worker	2 qstn norm foo baz
1754*7c356e86SAndroid Build Coastguard Worker	2 PLUS norm foo baz
1755*7c356e86SAndroid Build Coastguard Worker	2 DASH norm foo bar baz
1756*7c356e86SAndroid Build Coastguard Worker	2 EQAL norm foo bar baz
1757*7c356e86SAndroid Build Coastguard Worker	2 QSTN norm -> error
1758*7c356e86SAndroid Build Coastguard Worker	3 plus norm foo bar baz
1759*7c356e86SAndroid Build Coastguard Worker	3 dash norm foo x baz
1760*7c356e86SAndroid Build Coastguard Worker	3 eqal norm foo x baz
1761*7c356e86SAndroid Build Coastguard Worker	3 qstn norm foo x baz
1762*7c356e86SAndroid Build Coastguard Worker	3 PLUS norm foo bar baz
1763*7c356e86SAndroid Build Coastguard Worker	3 DASH norm foo x baz
1764*7c356e86SAndroid Build Coastguard Worker	3 EQAL norm foo x baz
1765*7c356e86SAndroid Build Coastguard Worker	3 QSTN norm foo x baz
1766*7c356e86SAndroid Build Coastguard Worker	4 plus parn foo baz
1767*7c356e86SAndroid Build Coastguard Worker	4 dash parn foo (bar) baz
1768*7c356e86SAndroid Build Coastguard Worker	4 eqal parn foo (bar) baz
1769*7c356e86SAndroid Build Coastguard Worker	4 qstn parn -> error
1770*7c356e86SAndroid Build Coastguard Worker	4 PLUS parn foo baz
1771*7c356e86SAndroid Build Coastguard Worker	4 DASH parn foo (bar) baz
1772*7c356e86SAndroid Build Coastguard Worker	4 EQAL parn foo (bar) baz
1773*7c356e86SAndroid Build Coastguard Worker	4 QSTN parn -> error
1774*7c356e86SAndroid Build Coastguard Worker	5 plus parn foo (bar) baz
1775*7c356e86SAndroid Build Coastguard Worker	5 dash parn foo baz
1776*7c356e86SAndroid Build Coastguard Worker	5 eqal parn foo baz
1777*7c356e86SAndroid Build Coastguard Worker	5 qstn parn foo baz
1778*7c356e86SAndroid Build Coastguard Worker	5 PLUS parn foo baz
1779*7c356e86SAndroid Build Coastguard Worker	5 DASH parn foo (bar) baz
1780*7c356e86SAndroid Build Coastguard Worker	5 EQAL parn foo (bar) baz
1781*7c356e86SAndroid Build Coastguard Worker	5 QSTN parn -> error
1782*7c356e86SAndroid Build Coastguard Worker	6 plus parn foo (bar) baz
1783*7c356e86SAndroid Build Coastguard Worker	6 dash parn foo x baz
1784*7c356e86SAndroid Build Coastguard Worker	6 eqal parn foo x baz
1785*7c356e86SAndroid Build Coastguard Worker	6 qstn parn foo x baz
1786*7c356e86SAndroid Build Coastguard Worker	6 PLUS parn foo (bar) baz
1787*7c356e86SAndroid Build Coastguard Worker	6 DASH parn foo x baz
1788*7c356e86SAndroid Build Coastguard Worker	6 EQAL parn foo x baz
1789*7c356e86SAndroid Build Coastguard Worker	6 QSTN parn foo x baz
1790*7c356e86SAndroid Build Coastguard Worker	7 plus brac foo c } baz
1791*7c356e86SAndroid Build Coastguard Worker	7 dash brac foo ax{{{}b c d{} baz
1792*7c356e86SAndroid Build Coastguard Worker	7 eqal brac foo ax{{{}b c ax{{{}b} baz
1793*7c356e86SAndroid Build Coastguard Worker	7 qstn brac -> error
1794*7c356e86SAndroid Build Coastguard Worker	7 PLUS brac foo c } baz
1795*7c356e86SAndroid Build Coastguard Worker	7 DASH brac foo ax{{{}b c d{} baz
1796*7c356e86SAndroid Build Coastguard Worker	7 EQAL brac foo ax{{{}b c ax{{{}b} baz
1797*7c356e86SAndroid Build Coastguard Worker	7 QSTN brac -> error
1798*7c356e86SAndroid Build Coastguard Worker	8 plus brac foo ax{{{}b c d{} baz
1799*7c356e86SAndroid Build Coastguard Worker	8 dash brac foo c } baz
1800*7c356e86SAndroid Build Coastguard Worker	8 eqal brac foo c } baz
1801*7c356e86SAndroid Build Coastguard Worker	8 qstn brac foo c } baz
1802*7c356e86SAndroid Build Coastguard Worker	8 PLUS brac foo c } baz
1803*7c356e86SAndroid Build Coastguard Worker	8 DASH brac foo ax{{{}b c d{} baz
1804*7c356e86SAndroid Build Coastguard Worker	8 EQAL brac foo ax{{{}b c ax{{{}b} baz
1805*7c356e86SAndroid Build Coastguard Worker	8 QSTN brac -> error
1806*7c356e86SAndroid Build Coastguard Worker	9 plus brac foo ax{{{}b c d{} baz
1807*7c356e86SAndroid Build Coastguard Worker	9 dash brac foo x c x} baz
1808*7c356e86SAndroid Build Coastguard Worker	9 eqal brac foo x c x} baz
1809*7c356e86SAndroid Build Coastguard Worker	9 qstn brac foo x c x} baz
1810*7c356e86SAndroid Build Coastguard Worker	9 PLUS brac foo ax{{{}b c d{} baz
1811*7c356e86SAndroid Build Coastguard Worker	9 DASH brac foo x c x} baz
1812*7c356e86SAndroid Build Coastguard Worker	9 EQAL brac foo x c x} baz
1813*7c356e86SAndroid Build Coastguard Worker	9 QSTN brac foo x c x} baz
1814*7c356e86SAndroid Build Coastguard Worker---
1815*7c356e86SAndroid Build Coastguard Workername: expand-threecolons-dblq
1816*7c356e86SAndroid Build Coastguard Workerdescription:
1817*7c356e86SAndroid Build Coastguard Worker	Check for a particular thing that used to segfault
1818*7c356e86SAndroid Build Coastguard Workerstdin:
1819*7c356e86SAndroid Build Coastguard Worker	TEST=1234
1820*7c356e86SAndroid Build Coastguard Worker	echo "${TEST:1:2:3}"
1821*7c356e86SAndroid Build Coastguard Worker	echo $? but still living
1822*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1823*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
1824*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
1825*7c356e86SAndroid Build Coastguard Worker---
1826*7c356e86SAndroid Build Coastguard Workername: expand-threecolons-unq
1827*7c356e86SAndroid Build Coastguard Workerdescription:
1828*7c356e86SAndroid Build Coastguard Worker	Check for a particular thing that used to not error out
1829*7c356e86SAndroid Build Coastguard Workerstdin:
1830*7c356e86SAndroid Build Coastguard Worker	TEST=1234
1831*7c356e86SAndroid Build Coastguard Worker	echo ${TEST:1:2:3}
1832*7c356e86SAndroid Build Coastguard Worker	echo $? but still living
1833*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
1834*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
1835*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
1836*7c356e86SAndroid Build Coastguard Worker---
1837*7c356e86SAndroid Build Coastguard Workername: expand-weird-1
1838*7c356e86SAndroid Build Coastguard Workerdescription:
1839*7c356e86SAndroid Build Coastguard Worker	Check corner cases of trim expansion vs. $# vs. ${#var} vs. ${var?}
1840*7c356e86SAndroid Build Coastguard Workerstdin:
1841*7c356e86SAndroid Build Coastguard Worker	set 1 2 3 4 5 6 7 8 9 10 11
1842*7c356e86SAndroid Build Coastguard Worker	echo ${#}	# value of $#
1843*7c356e86SAndroid Build Coastguard Worker	echo ${##}	# length of $#
1844*7c356e86SAndroid Build Coastguard Worker	echo ${##1}	# $# trimmed 1
1845*7c356e86SAndroid Build Coastguard Worker	set 1 2 3 4 5 6 7 8 9 10 11 12
1846*7c356e86SAndroid Build Coastguard Worker	echo ${##1}
1847*7c356e86SAndroid Build Coastguard Worker	(exit 0)
1848*7c356e86SAndroid Build Coastguard Worker	echo $? = ${#?} .
1849*7c356e86SAndroid Build Coastguard Worker	(exit 111)
1850*7c356e86SAndroid Build Coastguard Worker	echo $? = ${#?} .
1851*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1852*7c356e86SAndroid Build Coastguard Worker	11
1853*7c356e86SAndroid Build Coastguard Worker	2
1854*7c356e86SAndroid Build Coastguard Worker	1
1855*7c356e86SAndroid Build Coastguard Worker	2
1856*7c356e86SAndroid Build Coastguard Worker	0 = 1 .
1857*7c356e86SAndroid Build Coastguard Worker	111 = 3 .
1858*7c356e86SAndroid Build Coastguard Worker---
1859*7c356e86SAndroid Build Coastguard Workername: expand-weird-2
1860*7c356e86SAndroid Build Coastguard Workerdescription:
1861*7c356e86SAndroid Build Coastguard Worker	Check more substitution and extension corner cases
1862*7c356e86SAndroid Build Coastguard Workerstdin:
1863*7c356e86SAndroid Build Coastguard Worker	:& set -C; pid=$$; sub=$!; flg=$-; set -- i; exec 3>x.tmp
1864*7c356e86SAndroid Build Coastguard Worker	#echo "D: !=$! #=$# \$=$$ -=$- ?=$?"
1865*7c356e86SAndroid Build Coastguard Worker	echo >&3 3 = s^${!-word} , ${#-word} , p^${$-word} , f^${--word} , ${?-word} .
1866*7c356e86SAndroid Build Coastguard Worker	echo >&3 4 = ${!+word} , ${#+word} , ${$+word} , ${-+word} , ${?+word} .
1867*7c356e86SAndroid Build Coastguard Worker	echo >&3 5 = s^${!=word} , ${#=word} , p^${$=word} , f^${-=word} , ${?=word} .
1868*7c356e86SAndroid Build Coastguard Worker	echo >&3 6 = s^${!?word} , ${#?word} , p^${$?word} , f^${-?word} , ${??word} .
1869*7c356e86SAndroid Build Coastguard Worker	echo >&3 7 = sl^${#!} , ${##} , pl^${#$} , fl^${#-} , ${#?} .
1870*7c356e86SAndroid Build Coastguard Worker	echo >&3 8 = sw^${%!} , ${%#} , pw^${%$} , fw^${%-} , ${%?} .
1871*7c356e86SAndroid Build Coastguard Worker	echo >&3 9 = ${!!} , s^${!#} , ${!$} , s^${!-} , s^${!?} .
1872*7c356e86SAndroid Build Coastguard Worker	echo >&3 10 = s^${!#pattern} , ${##pattern} , p^${$#pattern} , f^${-#pattern} , ${?#pattern} .
1873*7c356e86SAndroid Build Coastguard Worker	echo >&3 11 = s^${!%pattern} , ${#%pattern} , p^${$%pattern} , f^${-%pattern} , ${?%pattern} .
1874*7c356e86SAndroid Build Coastguard Worker	echo >&3 12 = $# : ${##} , ${##1} .
1875*7c356e86SAndroid Build Coastguard Worker	set --
1876*7c356e86SAndroid Build Coastguard Worker	echo >&3 14 = $# : ${##} , ${##1} .
1877*7c356e86SAndroid Build Coastguard Worker	set -- 1 2 3 4 5
1878*7c356e86SAndroid Build Coastguard Worker	echo >&3 16 = $# : ${##} , ${##1} .
1879*7c356e86SAndroid Build Coastguard Worker	set -- 1 2 3 4 5 6 7 8 9 a b c d e
1880*7c356e86SAndroid Build Coastguard Worker	echo >&3 18 = $# : ${##} , ${##1} .
1881*7c356e86SAndroid Build Coastguard Worker	exec 3>&-
1882*7c356e86SAndroid Build Coastguard Worker	<x.tmp sed \
1883*7c356e86SAndroid Build Coastguard Worker	    -e "s/ pl^${#pid} / PID /g" -e "s/ sl^${#sub} / SUB /g" -e "s/ fl^${#flg} / FLG /g" \
1884*7c356e86SAndroid Build Coastguard Worker	    -e "s/ pw^${%pid} / PID /g" -e "s/ sw^${%sub} / SUB /g" -e "s/ fw^${%flg} / FLG /g" \
1885*7c356e86SAndroid Build Coastguard Worker	    -e "s/ p^$pid / PID /g" -e "s/ s^$sub / SUB /g" -e "s/ f^$flg / FLG /g"
1886*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1887*7c356e86SAndroid Build Coastguard Worker	3 = SUB , 1 , PID , FLG , 0 .
1888*7c356e86SAndroid Build Coastguard Worker	4 = word , word , word , word , word .
1889*7c356e86SAndroid Build Coastguard Worker	5 = SUB , 1 , PID , FLG , 0 .
1890*7c356e86SAndroid Build Coastguard Worker	6 = SUB , 1 , PID , FLG , 0 .
1891*7c356e86SAndroid Build Coastguard Worker	7 = SUB , 1 , PID , FLG , 1 .
1892*7c356e86SAndroid Build Coastguard Worker	8 = SUB , 1 , PID , FLG , 1 .
1893*7c356e86SAndroid Build Coastguard Worker	9 = ! , SUB , $ , SUB , SUB .
1894*7c356e86SAndroid Build Coastguard Worker	10 = SUB , 1 , PID , FLG , 0 .
1895*7c356e86SAndroid Build Coastguard Worker	11 = SUB , 1 , PID , FLG , 0 .
1896*7c356e86SAndroid Build Coastguard Worker	12 = 1 : 1 , .
1897*7c356e86SAndroid Build Coastguard Worker	14 = 0 : 1 , 0 .
1898*7c356e86SAndroid Build Coastguard Worker	16 = 5 : 1 , 5 .
1899*7c356e86SAndroid Build Coastguard Worker	18 = 14 : 2 , 4 .
1900*7c356e86SAndroid Build Coastguard Worker---
1901*7c356e86SAndroid Build Coastguard Workername: expand-weird-3
1902*7c356e86SAndroid Build Coastguard Workerdescription:
1903*7c356e86SAndroid Build Coastguard Worker	Check that trimming works with positional parameters (Debian #48453)
1904*7c356e86SAndroid Build Coastguard Workerstdin:
1905*7c356e86SAndroid Build Coastguard Worker	A=9999-02
1906*7c356e86SAndroid Build Coastguard Worker	B=9999
1907*7c356e86SAndroid Build Coastguard Worker	echo 1=${A#$B?}.
1908*7c356e86SAndroid Build Coastguard Worker	set -- $A $B
1909*7c356e86SAndroid Build Coastguard Worker	echo 2=${1#$2?}.
1910*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1911*7c356e86SAndroid Build Coastguard Worker	1=02.
1912*7c356e86SAndroid Build Coastguard Worker	2=02.
1913*7c356e86SAndroid Build Coastguard Worker---
1914*7c356e86SAndroid Build Coastguard Workername: expand-weird-4
1915*7c356e86SAndroid Build Coastguard Workerdescription:
1916*7c356e86SAndroid Build Coastguard Worker	Check that tilde expansion is enabled in ${x#~}
1917*7c356e86SAndroid Build Coastguard Worker	and cases that are modelled after it (${x/~/~})
1918*7c356e86SAndroid Build Coastguard Workerstdin:
1919*7c356e86SAndroid Build Coastguard Worker	HOME=/etc
1920*7c356e86SAndroid Build Coastguard Worker	a="~/x"
1921*7c356e86SAndroid Build Coastguard Worker	echo "<${a#~}> <${a#\~}> <${b:-~}> <${b:-\~}> <${c:=~}><$c> <${a/~}> <${a/x/~}> <${a/x/\~}>"
1922*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1923*7c356e86SAndroid Build Coastguard Worker	<~/x> </x> <~> <\~> <~><~> <~/x> <~//etc> <~/~>
1924*7c356e86SAndroid Build Coastguard Worker---
1925*7c356e86SAndroid Build Coastguard Workername: expand-bang-1
1926*7c356e86SAndroid Build Coastguard Workerdescription:
1927*7c356e86SAndroid Build Coastguard Worker	Check corner case of ${!?} with ! being var vs. op
1928*7c356e86SAndroid Build Coastguard Workerstdin:
1929*7c356e86SAndroid Build Coastguard Worker	echo ${!?}
1930*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
1931*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /not set/
1932*7c356e86SAndroid Build Coastguard Worker---
1933*7c356e86SAndroid Build Coastguard Workername: expand-bang-2
1934*7c356e86SAndroid Build Coastguard Workerdescription:
1935*7c356e86SAndroid Build Coastguard Worker	Check corner case of ${!var} vs. ${var op} with var=!
1936*7c356e86SAndroid Build Coastguard Workerstdin:
1937*7c356e86SAndroid Build Coastguard Worker	echo 1 $! .
1938*7c356e86SAndroid Build Coastguard Worker	echo 2 ${!#} .
1939*7c356e86SAndroid Build Coastguard Worker	echo 3 ${!#[0-9]} .
1940*7c356e86SAndroid Build Coastguard Worker	echo 4 ${!-foo} .
1941*7c356e86SAndroid Build Coastguard Worker	# get an at least three-digit bg pid
1942*7c356e86SAndroid Build Coastguard Worker	while :; do
1943*7c356e86SAndroid Build Coastguard Worker		:&
1944*7c356e86SAndroid Build Coastguard Worker		x=$!
1945*7c356e86SAndroid Build Coastguard Worker		if [[ $x != +([0-9]) ]]; then
1946*7c356e86SAndroid Build Coastguard Worker			echo >&2 "cannot test, pid '$x' not numeric"
1947*7c356e86SAndroid Build Coastguard Worker			echo >&2 report this with as many details as possible
1948*7c356e86SAndroid Build Coastguard Worker			exit 1
1949*7c356e86SAndroid Build Coastguard Worker		fi
1950*7c356e86SAndroid Build Coastguard Worker		[[ $x = [0-9][0-9][0-9]* ]] && break
1951*7c356e86SAndroid Build Coastguard Worker	done
1952*7c356e86SAndroid Build Coastguard Worker	y=${x#?}
1953*7c356e86SAndroid Build Coastguard Worker	t=$!; [[ $t = $x ]]; echo 5 $? .
1954*7c356e86SAndroid Build Coastguard Worker	t=${!#}; [[ $t = $x ]]; echo 6 $? .
1955*7c356e86SAndroid Build Coastguard Worker	t=${!#[0-9]}; [[ $t = $y ]]; echo 7 $? .
1956*7c356e86SAndroid Build Coastguard Worker	t=${!-foo}; [[ $t = $x ]]; echo 8 $? .
1957*7c356e86SAndroid Build Coastguard Worker	t=${!?bar}; [[ $t = $x ]]; echo 9 $? .
1958*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1959*7c356e86SAndroid Build Coastguard Worker	1 .
1960*7c356e86SAndroid Build Coastguard Worker	2 .
1961*7c356e86SAndroid Build Coastguard Worker	3 .
1962*7c356e86SAndroid Build Coastguard Worker	4 foo .
1963*7c356e86SAndroid Build Coastguard Worker	5 0 .
1964*7c356e86SAndroid Build Coastguard Worker	6 0 .
1965*7c356e86SAndroid Build Coastguard Worker	7 0 .
1966*7c356e86SAndroid Build Coastguard Worker	8 0 .
1967*7c356e86SAndroid Build Coastguard Worker	9 0 .
1968*7c356e86SAndroid Build Coastguard Worker---
1969*7c356e86SAndroid Build Coastguard Workername: expand-number-1
1970*7c356e86SAndroid Build Coastguard Workerdescription:
1971*7c356e86SAndroid Build Coastguard Worker	Check that positional arguments do not overflow
1972*7c356e86SAndroid Build Coastguard Workerstdin:
1973*7c356e86SAndroid Build Coastguard Worker	echo "1 ${12345678901234567890} ."
1974*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1975*7c356e86SAndroid Build Coastguard Worker	1  .
1976*7c356e86SAndroid Build Coastguard Worker---
1977*7c356e86SAndroid Build Coastguard Workername: expand-slashes-1
1978*7c356e86SAndroid Build Coastguard Workerdescription:
1979*7c356e86SAndroid Build Coastguard Worker	Check that side effects in substring replacement are handled correctly
1980*7c356e86SAndroid Build Coastguard Workerstdin:
1981*7c356e86SAndroid Build Coastguard Worker	foo=n1n1n1n2n3
1982*7c356e86SAndroid Build Coastguard Worker	i=2
1983*7c356e86SAndroid Build Coastguard Worker	n=1
1984*7c356e86SAndroid Build Coastguard Worker	echo 1 ${foo//n$((n++))/[$((++i))]} .
1985*7c356e86SAndroid Build Coastguard Worker	echo 2 $n , $i .
1986*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
1987*7c356e86SAndroid Build Coastguard Worker	1 [3][3][3]n2n3 .
1988*7c356e86SAndroid Build Coastguard Worker	2 2 , 3 .
1989*7c356e86SAndroid Build Coastguard Worker---
1990*7c356e86SAndroid Build Coastguard Workername: expand-slashes-2
1991*7c356e86SAndroid Build Coastguard Workerdescription:
1992*7c356e86SAndroid Build Coastguard Worker	Check that side effects in substring replacement are handled correctly
1993*7c356e86SAndroid Build Coastguard Workerstdin:
1994*7c356e86SAndroid Build Coastguard Worker	foo=n1n1n1n2n3
1995*7c356e86SAndroid Build Coastguard Worker	i=2
1996*7c356e86SAndroid Build Coastguard Worker	n=1
1997*7c356e86SAndroid Build Coastguard Worker	echo 1 ${foo@/n$((n++))/[$((++i))]} .
1998*7c356e86SAndroid Build Coastguard Worker	echo 2 $n , $i .
1999*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2000*7c356e86SAndroid Build Coastguard Worker	1 [3]n1n1[4][5] .
2001*7c356e86SAndroid Build Coastguard Worker	2 5 , 5 .
2002*7c356e86SAndroid Build Coastguard Worker---
2003*7c356e86SAndroid Build Coastguard Workername: expand-slashes-3
2004*7c356e86SAndroid Build Coastguard Workerdescription:
2005*7c356e86SAndroid Build Coastguard Worker	Check that we can access the replaced string
2006*7c356e86SAndroid Build Coastguard Workerstdin:
2007*7c356e86SAndroid Build Coastguard Worker	foo=n1n1n1n2n3
2008*7c356e86SAndroid Build Coastguard Worker	echo 1 ${foo@/n[12]/[$KSH_MATCH]} .
2009*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2010*7c356e86SAndroid Build Coastguard Worker	1 [n1][n1][n1][n2]n3 .
2011*7c356e86SAndroid Build Coastguard Worker---
2012*7c356e86SAndroid Build Coastguard Workername: eglob-bad-1
2013*7c356e86SAndroid Build Coastguard Workerdescription:
2014*7c356e86SAndroid Build Coastguard Worker	Check that globbing isn't done when glob has syntax error
2015*7c356e86SAndroid Build Coastguard Workercategory: !os:cygwin,!os:midipix,!os:msys,!os:os2
2016*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "@(a[b|)c]foo"
2017*7c356e86SAndroid Build Coastguard Workerstdin:
2018*7c356e86SAndroid Build Coastguard Worker	echo @(a[b|)c]*
2019*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2020*7c356e86SAndroid Build Coastguard Worker	@(a[b|)c]*
2021*7c356e86SAndroid Build Coastguard Worker---
2022*7c356e86SAndroid Build Coastguard Workername: eglob-bad-2
2023*7c356e86SAndroid Build Coastguard Workerdescription:
2024*7c356e86SAndroid Build Coastguard Worker	Check that globbing isn't done when glob has syntax error
2025*7c356e86SAndroid Build Coastguard Worker	(AT&T ksh fails this test)
2026*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcx"
2027*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcz"
2028*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "bbc"
2029*7c356e86SAndroid Build Coastguard Workerstdin:
2030*7c356e86SAndroid Build Coastguard Worker	echo [a*(]*)z
2031*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2032*7c356e86SAndroid Build Coastguard Worker	[a*(]*)z
2033*7c356e86SAndroid Build Coastguard Worker---
2034*7c356e86SAndroid Build Coastguard Workername: eglob-infinite-plus
2035*7c356e86SAndroid Build Coastguard Workerdescription:
2036*7c356e86SAndroid Build Coastguard Worker	Check that shell doesn't go into infinite loop expanding +(...)
2037*7c356e86SAndroid Build Coastguard Worker	expressions.
2038*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
2039*7c356e86SAndroid Build Coastguard Workertime-limit: 3
2040*7c356e86SAndroid Build Coastguard Workerstdin:
2041*7c356e86SAndroid Build Coastguard Worker	echo +()c
2042*7c356e86SAndroid Build Coastguard Worker	echo +()x
2043*7c356e86SAndroid Build Coastguard Worker	echo +(*)c
2044*7c356e86SAndroid Build Coastguard Worker	echo +(*)x
2045*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2046*7c356e86SAndroid Build Coastguard Worker	+()c
2047*7c356e86SAndroid Build Coastguard Worker	+()x
2048*7c356e86SAndroid Build Coastguard Worker	abc
2049*7c356e86SAndroid Build Coastguard Worker	+(*)x
2050*7c356e86SAndroid Build Coastguard Worker---
2051*7c356e86SAndroid Build Coastguard Workername: eglob-subst-1
2052*7c356e86SAndroid Build Coastguard Workerdescription:
2053*7c356e86SAndroid Build Coastguard Worker	Check that eglobbing isn't done on substitution results
2054*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
2055*7c356e86SAndroid Build Coastguard Workerstdin:
2056*7c356e86SAndroid Build Coastguard Worker	x='@(*)'
2057*7c356e86SAndroid Build Coastguard Worker	echo $x
2058*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2059*7c356e86SAndroid Build Coastguard Worker	@(*)
2060*7c356e86SAndroid Build Coastguard Worker---
2061*7c356e86SAndroid Build Coastguard Workername: eglob-nomatch-1
2062*7c356e86SAndroid Build Coastguard Workerdescription:
2063*7c356e86SAndroid Build Coastguard Worker	Check that the pattern doesn't match
2064*7c356e86SAndroid Build Coastguard Workerstdin:
2065*7c356e86SAndroid Build Coastguard Worker	echo 1: no-file+(a|b)stuff
2066*7c356e86SAndroid Build Coastguard Worker	echo 2: no-file+(a*(c)|b)stuff
2067*7c356e86SAndroid Build Coastguard Worker	echo 3: no-file+((((c)))|b)stuff
2068*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2069*7c356e86SAndroid Build Coastguard Worker	1: no-file+(a|b)stuff
2070*7c356e86SAndroid Build Coastguard Worker	2: no-file+(a*(c)|b)stuff
2071*7c356e86SAndroid Build Coastguard Worker	3: no-file+((((c)))|b)stuff
2072*7c356e86SAndroid Build Coastguard Worker---
2073*7c356e86SAndroid Build Coastguard Workername: eglob-match-1
2074*7c356e86SAndroid Build Coastguard Workerdescription:
2075*7c356e86SAndroid Build Coastguard Worker	Check that the pattern matches correctly
2076*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abd"
2077*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "acd"
2078*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abac"
2079*7c356e86SAndroid Build Coastguard Workerstdin:
2080*7c356e86SAndroid Build Coastguard Worker	echo 1: a+(b|c)d
2081*7c356e86SAndroid Build Coastguard Worker	echo 2: a!(@(b|B))d
2082*7c356e86SAndroid Build Coastguard Worker	echo 3: *(a(b|c))		# (...|...) can be used within X(..)
2083*7c356e86SAndroid Build Coastguard Worker	echo 4: a[b*(foo|bar)]d		# patterns not special inside [...]
2084*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2085*7c356e86SAndroid Build Coastguard Worker	1: abd acd
2086*7c356e86SAndroid Build Coastguard Worker	2: acd
2087*7c356e86SAndroid Build Coastguard Worker	3: abac
2088*7c356e86SAndroid Build Coastguard Worker	4: abd
2089*7c356e86SAndroid Build Coastguard Worker---
2090*7c356e86SAndroid Build Coastguard Workername: eglob-case-1
2091*7c356e86SAndroid Build Coastguard Workerdescription:
2092*7c356e86SAndroid Build Coastguard Worker	Simple negation tests
2093*7c356e86SAndroid Build Coastguard Workerstdin:
2094*7c356e86SAndroid Build Coastguard Worker	case foo in !(foo|bar)) echo yes;; *) echo no;; esac
2095*7c356e86SAndroid Build Coastguard Worker	case bar in !(foo|bar)) echo yes;; *) echo no;; esac
2096*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2097*7c356e86SAndroid Build Coastguard Worker	no
2098*7c356e86SAndroid Build Coastguard Worker	no
2099*7c356e86SAndroid Build Coastguard Worker---
2100*7c356e86SAndroid Build Coastguard Workername: eglob-case-2
2101*7c356e86SAndroid Build Coastguard Workerdescription:
2102*7c356e86SAndroid Build Coastguard Worker	Simple kleene tests
2103*7c356e86SAndroid Build Coastguard Workerstdin:
2104*7c356e86SAndroid Build Coastguard Worker	case foo in *(a|b[)) echo yes;; *) echo no;; esac
2105*7c356e86SAndroid Build Coastguard Worker	case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac
2106*7c356e86SAndroid Build Coastguard Worker	case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac
2107*7c356e86SAndroid Build Coastguard Worker	case 'aab[b[ab[a' in *(a|b[)) echo yes;; *) echo no;; esac
2108*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2109*7c356e86SAndroid Build Coastguard Worker	no
2110*7c356e86SAndroid Build Coastguard Worker	yes
2111*7c356e86SAndroid Build Coastguard Worker	no
2112*7c356e86SAndroid Build Coastguard Worker	yes
2113*7c356e86SAndroid Build Coastguard Worker---
2114*7c356e86SAndroid Build Coastguard Workername: eglob-trim-1
2115*7c356e86SAndroid Build Coastguard Workerdescription:
2116*7c356e86SAndroid Build Coastguard Worker	Eglobbing in trim expressions...
2117*7c356e86SAndroid Build Coastguard Worker	(AT&T ksh fails this - docs say # matches shortest string, ## matches
2118*7c356e86SAndroid Build Coastguard Worker	longest...)
2119*7c356e86SAndroid Build Coastguard Workerstdin:
2120*7c356e86SAndroid Build Coastguard Worker	x=abcdef
2121*7c356e86SAndroid Build Coastguard Worker	echo 1: ${x#a|abc}
2122*7c356e86SAndroid Build Coastguard Worker	echo 2: ${x##a|abc}
2123*7c356e86SAndroid Build Coastguard Worker	echo 3: ${x%def|f}
2124*7c356e86SAndroid Build Coastguard Worker	echo 4: ${x%%f|def}
2125*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2126*7c356e86SAndroid Build Coastguard Worker	1: bcdef
2127*7c356e86SAndroid Build Coastguard Worker	2: def
2128*7c356e86SAndroid Build Coastguard Worker	3: abcde
2129*7c356e86SAndroid Build Coastguard Worker	4: abc
2130*7c356e86SAndroid Build Coastguard Worker---
2131*7c356e86SAndroid Build Coastguard Workername: eglob-trim-2
2132*7c356e86SAndroid Build Coastguard Workerdescription:
2133*7c356e86SAndroid Build Coastguard Worker	Check eglobbing works in trims...
2134*7c356e86SAndroid Build Coastguard Workerstdin:
2135*7c356e86SAndroid Build Coastguard Worker	x=abcdef
2136*7c356e86SAndroid Build Coastguard Worker	echo 1: ${x#*(a|b)cd}
2137*7c356e86SAndroid Build Coastguard Worker	echo 2: "${x#*(a|b)cd}"
2138*7c356e86SAndroid Build Coastguard Worker	echo 3: ${x#"*(a|b)cd"}
2139*7c356e86SAndroid Build Coastguard Worker	echo 4: ${x#a(b|c)}
2140*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2141*7c356e86SAndroid Build Coastguard Worker	1: ef
2142*7c356e86SAndroid Build Coastguard Worker	2: ef
2143*7c356e86SAndroid Build Coastguard Worker	3: abcdef
2144*7c356e86SAndroid Build Coastguard Worker	4: cdef
2145*7c356e86SAndroid Build Coastguard Worker---
2146*7c356e86SAndroid Build Coastguard Workername: eglob-trim-3
2147*7c356e86SAndroid Build Coastguard Workerdescription:
2148*7c356e86SAndroid Build Coastguard Worker	Check eglobbing works in trims, for Korn Shell
2149*7c356e86SAndroid Build Coastguard Worker	Ensure eglobbing does not work for reduced-feature /bin/sh
2150*7c356e86SAndroid Build Coastguard Workerstdin:
2151*7c356e86SAndroid Build Coastguard Worker	set +o sh
2152*7c356e86SAndroid Build Coastguard Worker	x=foobar
2153*7c356e86SAndroid Build Coastguard Worker	y=foobaz
2154*7c356e86SAndroid Build Coastguard Worker	z=fooba\?
2155*7c356e86SAndroid Build Coastguard Worker	echo "<${x%bar|baz},${y%bar|baz},${z%\?}>"
2156*7c356e86SAndroid Build Coastguard Worker	echo "<${x%ba(r|z)},${y%ba(r|z)}>"
2157*7c356e86SAndroid Build Coastguard Worker	set -o sh
2158*7c356e86SAndroid Build Coastguard Worker	echo "<${x%bar|baz},${y%bar|baz},${z%\?}>"
2159*7c356e86SAndroid Build Coastguard Worker	z='foo(bar'
2160*7c356e86SAndroid Build Coastguard Worker	echo "<${z%(*}>"
2161*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2162*7c356e86SAndroid Build Coastguard Worker	<foo,foo,fooba>
2163*7c356e86SAndroid Build Coastguard Worker	<foo,foo>
2164*7c356e86SAndroid Build Coastguard Worker	<foobar,foobaz,fooba>
2165*7c356e86SAndroid Build Coastguard Worker	<foo>
2166*7c356e86SAndroid Build Coastguard Worker---
2167*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-1
2168*7c356e86SAndroid Build Coastguard Workerdescription:
2169*7c356e86SAndroid Build Coastguard Worker	Check eglobbing works in substs... and they work at all
2170*7c356e86SAndroid Build Coastguard Workerstdin:
2171*7c356e86SAndroid Build Coastguard Worker	[[ -n $BASH_VERSION ]] && shopt -s extglob
2172*7c356e86SAndroid Build Coastguard Worker	x=1222321_ab/cde_b/c_1221
2173*7c356e86SAndroid Build Coastguard Worker	y=xyz
2174*7c356e86SAndroid Build Coastguard Worker	echo 1: ${x/2} . ${x/}
2175*7c356e86SAndroid Build Coastguard Worker	echo 2: ${x//2}
2176*7c356e86SAndroid Build Coastguard Worker	echo 3: ${x/+(2)}
2177*7c356e86SAndroid Build Coastguard Worker	echo 4: ${x//+(2)}
2178*7c356e86SAndroid Build Coastguard Worker	echo 5: ${x/2/4}
2179*7c356e86SAndroid Build Coastguard Worker	echo 6: ${x//2/4}
2180*7c356e86SAndroid Build Coastguard Worker	echo 7: ${x/+(2)/4}
2181*7c356e86SAndroid Build Coastguard Worker	echo 8: ${x//+(2)/4}
2182*7c356e86SAndroid Build Coastguard Worker	echo 9: ${x/b/c/e/f}
2183*7c356e86SAndroid Build Coastguard Worker	echo 10: ${x/b\/c/e/f}
2184*7c356e86SAndroid Build Coastguard Worker	echo 11: ${x/b\/c/e\/f}
2185*7c356e86SAndroid Build Coastguard Worker	echo 12: ${x/b\/c/e\\/f}
2186*7c356e86SAndroid Build Coastguard Worker	echo 13: ${x/b\\/c/e\\/f}
2187*7c356e86SAndroid Build Coastguard Worker	echo 14: ${x//b/c/e/f}
2188*7c356e86SAndroid Build Coastguard Worker	echo 15: ${x//b\/c/e/f}
2189*7c356e86SAndroid Build Coastguard Worker	echo 16: ${x//b\/c/e\/f}
2190*7c356e86SAndroid Build Coastguard Worker	echo 17: ${x//b\/c/e\\/f}
2191*7c356e86SAndroid Build Coastguard Worker	echo 18: ${x//b\\/c/e\\/f}
2192*7c356e86SAndroid Build Coastguard Worker	echo 19: ${x/b\/*\/c/x}
2193*7c356e86SAndroid Build Coastguard Worker	echo 20: ${x/\//.}
2194*7c356e86SAndroid Build Coastguard Worker	echo 21: ${x//\//.}
2195*7c356e86SAndroid Build Coastguard Worker	echo 22: ${x///.}
2196*7c356e86SAndroid Build Coastguard Worker	echo 23: ${x/#1/9}
2197*7c356e86SAndroid Build Coastguard Worker	echo 24: ${x//#1/9}
2198*7c356e86SAndroid Build Coastguard Worker	echo 25: ${x/%1/9}
2199*7c356e86SAndroid Build Coastguard Worker	echo 26: ${x//%1/9}
2200*7c356e86SAndroid Build Coastguard Worker	echo 27: ${x//\%1/9}
2201*7c356e86SAndroid Build Coastguard Worker	echo 28: ${x//\\%1/9}
2202*7c356e86SAndroid Build Coastguard Worker	echo 29: ${x//\a/9}
2203*7c356e86SAndroid Build Coastguard Worker	echo 30: ${x//\\a/9}
2204*7c356e86SAndroid Build Coastguard Worker	echo 31: ${x/2/$y}
2205*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2206*7c356e86SAndroid Build Coastguard Worker	1: 122321_ab/cde_b/c_1221 . 1222321_ab/cde_b/c_1221
2207*7c356e86SAndroid Build Coastguard Worker	2: 131_ab/cde_b/c_11
2208*7c356e86SAndroid Build Coastguard Worker	3: 1321_ab/cde_b/c_1221
2209*7c356e86SAndroid Build Coastguard Worker	4: 131_ab/cde_b/c_11
2210*7c356e86SAndroid Build Coastguard Worker	5: 1422321_ab/cde_b/c_1221
2211*7c356e86SAndroid Build Coastguard Worker	6: 1444341_ab/cde_b/c_1441
2212*7c356e86SAndroid Build Coastguard Worker	7: 14321_ab/cde_b/c_1221
2213*7c356e86SAndroid Build Coastguard Worker	8: 14341_ab/cde_b/c_141
2214*7c356e86SAndroid Build Coastguard Worker	9: 1222321_ac/e/f/cde_b/c_1221
2215*7c356e86SAndroid Build Coastguard Worker	10: 1222321_ae/fde_b/c_1221
2216*7c356e86SAndroid Build Coastguard Worker	11: 1222321_ae/fde_b/c_1221
2217*7c356e86SAndroid Build Coastguard Worker	12: 1222321_ae\/fde_b/c_1221
2218*7c356e86SAndroid Build Coastguard Worker	13: 1222321_ab/cde_b/c_1221
2219*7c356e86SAndroid Build Coastguard Worker	14: 1222321_ac/e/f/cde_c/e/f/c_1221
2220*7c356e86SAndroid Build Coastguard Worker	15: 1222321_ae/fde_e/f_1221
2221*7c356e86SAndroid Build Coastguard Worker	16: 1222321_ae/fde_e/f_1221
2222*7c356e86SAndroid Build Coastguard Worker	17: 1222321_ae\/fde_e\/f_1221
2223*7c356e86SAndroid Build Coastguard Worker	18: 1222321_ab/cde_b/c_1221
2224*7c356e86SAndroid Build Coastguard Worker	19: 1222321_ax_1221
2225*7c356e86SAndroid Build Coastguard Worker	20: 1222321_ab.cde_b/c_1221
2226*7c356e86SAndroid Build Coastguard Worker	21: 1222321_ab.cde_b.c_1221
2227*7c356e86SAndroid Build Coastguard Worker	22: 1222321_ab/cde_b/c_1221
2228*7c356e86SAndroid Build Coastguard Worker	23: 9222321_ab/cde_b/c_1221
2229*7c356e86SAndroid Build Coastguard Worker	24: 1222321_ab/cde_b/c_1221
2230*7c356e86SAndroid Build Coastguard Worker	25: 1222321_ab/cde_b/c_1229
2231*7c356e86SAndroid Build Coastguard Worker	26: 1222321_ab/cde_b/c_1221
2232*7c356e86SAndroid Build Coastguard Worker	27: 1222321_ab/cde_b/c_1221
2233*7c356e86SAndroid Build Coastguard Worker	28: 1222321_ab/cde_b/c_1221
2234*7c356e86SAndroid Build Coastguard Worker	29: 1222321_9b/cde_b/c_1221
2235*7c356e86SAndroid Build Coastguard Worker	30: 1222321_ab/cde_b/c_1221
2236*7c356e86SAndroid Build Coastguard Worker	31: 1xyz22321_ab/cde_b/c_1221
2237*7c356e86SAndroid Build Coastguard Worker---
2238*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-2
2239*7c356e86SAndroid Build Coastguard Workerdescription:
2240*7c356e86SAndroid Build Coastguard Worker	Check anchored substring replacement works, corner cases
2241*7c356e86SAndroid Build Coastguard Workerstdin:
2242*7c356e86SAndroid Build Coastguard Worker	foo=123
2243*7c356e86SAndroid Build Coastguard Worker	echo 1: ${foo/#/x}
2244*7c356e86SAndroid Build Coastguard Worker	echo 2: ${foo/%/x}
2245*7c356e86SAndroid Build Coastguard Worker	echo 3: ${foo/#/}
2246*7c356e86SAndroid Build Coastguard Worker	echo 4: ${foo/#}
2247*7c356e86SAndroid Build Coastguard Worker	echo 5: ${foo/%/}
2248*7c356e86SAndroid Build Coastguard Worker	echo 6: ${foo/%}
2249*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2250*7c356e86SAndroid Build Coastguard Worker	1: x123
2251*7c356e86SAndroid Build Coastguard Worker	2: 123x
2252*7c356e86SAndroid Build Coastguard Worker	3: 123
2253*7c356e86SAndroid Build Coastguard Worker	4: 123
2254*7c356e86SAndroid Build Coastguard Worker	5: 123
2255*7c356e86SAndroid Build Coastguard Worker	6: 123
2256*7c356e86SAndroid Build Coastguard Worker---
2257*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-3a
2258*7c356e86SAndroid Build Coastguard Workerdescription:
2259*7c356e86SAndroid Build Coastguard Worker	Check substring replacement works with variables and slashes, too
2260*7c356e86SAndroid Build Coastguard Workerstdin:
2261*7c356e86SAndroid Build Coastguard Worker	HOME=/etc
2262*7c356e86SAndroid Build Coastguard Worker	pfx=/home/user
2263*7c356e86SAndroid Build Coastguard Worker	wd=/home/user/tmp
2264*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#$pfx/~}"
2265*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#\$pfx/~}"
2266*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#"$pfx"/~}"
2267*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#'$pfx'/~}"
2268*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#"\$pfx"/~}"
2269*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#'\$pfx'/~}"
2270*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2271*7c356e86SAndroid Build Coastguard Worker	/etc/tmp
2272*7c356e86SAndroid Build Coastguard Worker	/home/user/tmp
2273*7c356e86SAndroid Build Coastguard Worker	/etc/tmp
2274*7c356e86SAndroid Build Coastguard Worker	/home/user/tmp
2275*7c356e86SAndroid Build Coastguard Worker	/home/user/tmp
2276*7c356e86SAndroid Build Coastguard Worker	/home/user/tmp
2277*7c356e86SAndroid Build Coastguard Worker---
2278*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-3b
2279*7c356e86SAndroid Build Coastguard Workerdescription:
2280*7c356e86SAndroid Build Coastguard Worker	More of this, bash fails it (bash4 passes)
2281*7c356e86SAndroid Build Coastguard Workerstdin:
2282*7c356e86SAndroid Build Coastguard Worker	HOME=/etc
2283*7c356e86SAndroid Build Coastguard Worker	pfx=/home/user
2284*7c356e86SAndroid Build Coastguard Worker	wd=/home/user/tmp
2285*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#$(echo /home/user)/~}"
2286*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#"$(echo /home/user)"/~}"
2287*7c356e86SAndroid Build Coastguard Worker	echo "${wd/#'$(echo /home/user)'/~}"
2288*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2289*7c356e86SAndroid Build Coastguard Worker	/etc/tmp
2290*7c356e86SAndroid Build Coastguard Worker	/etc/tmp
2291*7c356e86SAndroid Build Coastguard Worker	/home/user/tmp
2292*7c356e86SAndroid Build Coastguard Worker---
2293*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-3c
2294*7c356e86SAndroid Build Coastguard Workerdescription:
2295*7c356e86SAndroid Build Coastguard Worker	Even more weird cases
2296*7c356e86SAndroid Build Coastguard Workerstdin:
2297*7c356e86SAndroid Build Coastguard Worker	HOME=/etc
2298*7c356e86SAndroid Build Coastguard Worker	pfx=/home/user
2299*7c356e86SAndroid Build Coastguard Worker	wd='$pfx/tmp'
2300*7c356e86SAndroid Build Coastguard Worker	echo 1: ${wd/#$pfx/~}
2301*7c356e86SAndroid Build Coastguard Worker	echo 2: ${wd/#\$pfx/~}
2302*7c356e86SAndroid Build Coastguard Worker	echo 3: ${wd/#"$pfx"/~}
2303*7c356e86SAndroid Build Coastguard Worker	echo 4: ${wd/#'$pfx'/~}
2304*7c356e86SAndroid Build Coastguard Worker	echo 5: ${wd/#"\$pfx"/~}
2305*7c356e86SAndroid Build Coastguard Worker	echo 6: ${wd/#'\$pfx'/~}
2306*7c356e86SAndroid Build Coastguard Worker	ts='a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp)'
2307*7c356e86SAndroid Build Coastguard Worker	tp=a/b
2308*7c356e86SAndroid Build Coastguard Worker	tr=c/d
2309*7c356e86SAndroid Build Coastguard Worker	[[ -n $BASH_VERSION ]] && shopt -s extglob
2310*7c356e86SAndroid Build Coastguard Worker	echo 7: ${ts/a\/b/$tr}
2311*7c356e86SAndroid Build Coastguard Worker	echo 8: ${ts/a\/b/\$tr}
2312*7c356e86SAndroid Build Coastguard Worker	echo 9: ${ts/$tp/$tr}
2313*7c356e86SAndroid Build Coastguard Worker	echo 10: ${ts/\$tp/$tr}
2314*7c356e86SAndroid Build Coastguard Worker	echo 11: ${ts/\\$tp/$tr}
2315*7c356e86SAndroid Build Coastguard Worker	echo 12: ${ts/$tp/c/d}
2316*7c356e86SAndroid Build Coastguard Worker	echo 13: ${ts/$tp/c\/d}
2317*7c356e86SAndroid Build Coastguard Worker	echo 14: ${ts/$tp/c\\/d}
2318*7c356e86SAndroid Build Coastguard Worker	echo 15: ${ts/+(a\/b)/$tr}
2319*7c356e86SAndroid Build Coastguard Worker	echo 16: ${ts/+(a\/b)/\$tr}
2320*7c356e86SAndroid Build Coastguard Worker	echo 17: ${ts/+($tp)/$tr}
2321*7c356e86SAndroid Build Coastguard Worker	echo 18: ${ts/+($tp)/c/d}
2322*7c356e86SAndroid Build Coastguard Worker	echo 19: ${ts/+($tp)/c\/d}
2323*7c356e86SAndroid Build Coastguard Worker	echo 20: ${ts//a\/b/$tr}
2324*7c356e86SAndroid Build Coastguard Worker	echo 21: ${ts//a\/b/\$tr}
2325*7c356e86SAndroid Build Coastguard Worker	echo 22: ${ts//$tp/$tr}
2326*7c356e86SAndroid Build Coastguard Worker	echo 23: ${ts//$tp/c/d}
2327*7c356e86SAndroid Build Coastguard Worker	echo 24: ${ts//$tp/c\/d}
2328*7c356e86SAndroid Build Coastguard Worker	echo 25: ${ts//+(a\/b)/$tr}
2329*7c356e86SAndroid Build Coastguard Worker	echo 26: ${ts//+(a\/b)/\$tr}
2330*7c356e86SAndroid Build Coastguard Worker	echo 27: ${ts//+($tp)/$tr}
2331*7c356e86SAndroid Build Coastguard Worker	echo 28: ${ts//+($tp)/c/d}
2332*7c356e86SAndroid Build Coastguard Worker	echo 29: ${ts//+($tp)/c\/d}
2333*7c356e86SAndroid Build Coastguard Worker	tp="+($tp)"
2334*7c356e86SAndroid Build Coastguard Worker	echo 30: ${ts/$tp/$tr}
2335*7c356e86SAndroid Build Coastguard Worker	echo 31: ${ts//$tp/$tr}
2336*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2337*7c356e86SAndroid Build Coastguard Worker	1: $pfx/tmp
2338*7c356e86SAndroid Build Coastguard Worker	2: /etc/tmp
2339*7c356e86SAndroid Build Coastguard Worker	3: $pfx/tmp
2340*7c356e86SAndroid Build Coastguard Worker	4: /etc/tmp
2341*7c356e86SAndroid Build Coastguard Worker	5: /etc/tmp
2342*7c356e86SAndroid Build Coastguard Worker	6: $pfx/tmp
2343*7c356e86SAndroid Build Coastguard Worker	7: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2344*7c356e86SAndroid Build Coastguard Worker	8: $tra/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2345*7c356e86SAndroid Build Coastguard Worker	9: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2346*7c356e86SAndroid Build Coastguard Worker	10: a/ba/bc/d$tp_a/b$tp_*(a/b)_*($tp)
2347*7c356e86SAndroid Build Coastguard Worker	11: a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2348*7c356e86SAndroid Build Coastguard Worker	12: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2349*7c356e86SAndroid Build Coastguard Worker	13: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2350*7c356e86SAndroid Build Coastguard Worker	14: c\/da/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2351*7c356e86SAndroid Build Coastguard Worker	15: c/d$tp$tp_a/b$tp_*(a/b)_*($tp)
2352*7c356e86SAndroid Build Coastguard Worker	16: $tr$tp$tp_a/b$tp_*(a/b)_*($tp)
2353*7c356e86SAndroid Build Coastguard Worker	17: c/d$tp$tp_a/b$tp_*(a/b)_*($tp)
2354*7c356e86SAndroid Build Coastguard Worker	18: c/d$tp$tp_a/b$tp_*(a/b)_*($tp)
2355*7c356e86SAndroid Build Coastguard Worker	19: c/d$tp$tp_a/b$tp_*(a/b)_*($tp)
2356*7c356e86SAndroid Build Coastguard Worker	20: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2357*7c356e86SAndroid Build Coastguard Worker	21: $tr$tr$tp$tp_$tr$tp_*($tr)_*($tp)
2358*7c356e86SAndroid Build Coastguard Worker	22: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2359*7c356e86SAndroid Build Coastguard Worker	23: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2360*7c356e86SAndroid Build Coastguard Worker	24: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2361*7c356e86SAndroid Build Coastguard Worker	25: c/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2362*7c356e86SAndroid Build Coastguard Worker	26: $tr$tp$tp_$tr$tp_*($tr)_*($tp)
2363*7c356e86SAndroid Build Coastguard Worker	27: c/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2364*7c356e86SAndroid Build Coastguard Worker	28: c/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2365*7c356e86SAndroid Build Coastguard Worker	29: c/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2366*7c356e86SAndroid Build Coastguard Worker	30: a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2367*7c356e86SAndroid Build Coastguard Worker	31: a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp)
2368*7c356e86SAndroid Build Coastguard Worker#	This is what GNU bash does:
2369*7c356e86SAndroid Build Coastguard Worker#	30: c/d$tp$tp_a/b$tp_*(a/b)_*($tp)
2370*7c356e86SAndroid Build Coastguard Worker#	31: c/d$tp$tp_c/d$tp_*(c/d)_*($tp)
2371*7c356e86SAndroid Build Coastguard Worker---
2372*7c356e86SAndroid Build Coastguard Workername: eglob-utf8-1
2373*7c356e86SAndroid Build Coastguard Workerdescription:
2374*7c356e86SAndroid Build Coastguard Worker	UTF-8 mode differences for eglobbing
2375*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
2376*7c356e86SAndroid Build Coastguard Workerstdin:
2377*7c356e86SAndroid Build Coastguard Worker	s=blöd
2378*7c356e86SAndroid Build Coastguard Worker	set +U
2379*7c356e86SAndroid Build Coastguard Worker	print 1: ${s%???} .
2380*7c356e86SAndroid Build Coastguard Worker	print 2: ${s/b???d/x} .
2381*7c356e86SAndroid Build Coastguard Worker	set -U
2382*7c356e86SAndroid Build Coastguard Worker	print 3: ${s%???} .
2383*7c356e86SAndroid Build Coastguard Worker	print 4: ${s/b??d/x} .
2384*7c356e86SAndroid Build Coastguard Worker	x=nö
2385*7c356e86SAndroid Build Coastguard Worker	print 5: ${x%?} ${x%%?} .
2386*7c356e86SAndroid Build Coastguard Worker	x=äh
2387*7c356e86SAndroid Build Coastguard Worker	print 6: ${x#?} ${x##?} .
2388*7c356e86SAndroid Build Coastguard Worker	x=��
2389*7c356e86SAndroid Build Coastguard Worker	print 7: ${x%?} ${x%%?} .
2390*7c356e86SAndroid Build Coastguard Worker	x=mä�
2391*7c356e86SAndroid Build Coastguard Worker	print 8: ${x%?} ${x%%?} .
2392*7c356e86SAndroid Build Coastguard Worker	x=何
2393*7c356e86SAndroid Build Coastguard Worker	print 9: ${x%?} ${x%%?} .
2394*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2395*7c356e86SAndroid Build Coastguard Worker	1: bl .
2396*7c356e86SAndroid Build Coastguard Worker	2: x .
2397*7c356e86SAndroid Build Coastguard Worker	3: b .
2398*7c356e86SAndroid Build Coastguard Worker	4: x .
2399*7c356e86SAndroid Build Coastguard Worker	5: n n .
2400*7c356e86SAndroid Build Coastguard Worker	6: h h .
2401*7c356e86SAndroid Build Coastguard Worker	7: � � .
2402*7c356e86SAndroid Build Coastguard Worker	8: mä mä .
2403*7c356e86SAndroid Build Coastguard Worker	9: .
2404*7c356e86SAndroid Build Coastguard Worker---
2405*7c356e86SAndroid Build Coastguard Workername: glob-bad-1
2406*7c356e86SAndroid Build Coastguard Workerdescription:
2407*7c356e86SAndroid Build Coastguard Worker	Check that [ matches itself if it's not a valid bracket expr
2408*7c356e86SAndroid Build Coastguard Worker	but does not prevent globbing, while backslash-escaping does
2409*7c356e86SAndroid Build Coastguard Workerfile-setup: dir 755 "[x"
2410*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "[x/foo"
2411*7c356e86SAndroid Build Coastguard Workerstdin:
2412*7c356e86SAndroid Build Coastguard Worker	echo [*
2413*7c356e86SAndroid Build Coastguard Worker	echo *[x
2414*7c356e86SAndroid Build Coastguard Worker	echo [x/*
2415*7c356e86SAndroid Build Coastguard Worker	:>'ab[x'
2416*7c356e86SAndroid Build Coastguard Worker	:>'a[a-z][x'
2417*7c356e86SAndroid Build Coastguard Worker	echo a[a-z][*
2418*7c356e86SAndroid Build Coastguard Worker	echo a[a-z]*
2419*7c356e86SAndroid Build Coastguard Worker	echo a[a\-z]*
2420*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2421*7c356e86SAndroid Build Coastguard Worker	[x
2422*7c356e86SAndroid Build Coastguard Worker	[x
2423*7c356e86SAndroid Build Coastguard Worker	[x/foo
2424*7c356e86SAndroid Build Coastguard Worker	ab[x
2425*7c356e86SAndroid Build Coastguard Worker	ab[x
2426*7c356e86SAndroid Build Coastguard Worker	a[a-z]*
2427*7c356e86SAndroid Build Coastguard Worker---
2428*7c356e86SAndroid Build Coastguard Workername: glob-bad-2
2429*7c356e86SAndroid Build Coastguard Workerdescription:
2430*7c356e86SAndroid Build Coastguard Worker	Check that symbolic links aren't stat()'d
2431*7c356e86SAndroid Build Coastguard Worker# breaks on Dell UNIX 4.0 R2.2 (SVR4) where unlink also fails
2432*7c356e86SAndroid Build Coastguard Worker# breaks on FreeMiNT (cannot unlink dangling symlinks)
2433*7c356e86SAndroid Build Coastguard Worker# breaks on MSYS, OS/2 (do not support symlinks)
2434*7c356e86SAndroid Build Coastguard Workercategory: !os:mint,!os:msys,!os:svr4.0,!nosymlink
2435*7c356e86SAndroid Build Coastguard Workerfile-setup: dir 755 "dir"
2436*7c356e86SAndroid Build Coastguard Workerfile-setup: symlink 644 "dir/abc"
2437*7c356e86SAndroid Build Coastguard Worker	non-existent-file
2438*7c356e86SAndroid Build Coastguard Workerstdin:
2439*7c356e86SAndroid Build Coastguard Worker	echo d*/*
2440*7c356e86SAndroid Build Coastguard Worker	echo d*/abc
2441*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2442*7c356e86SAndroid Build Coastguard Worker	dir/abc
2443*7c356e86SAndroid Build Coastguard Worker	dir/abc
2444*7c356e86SAndroid Build Coastguard Worker---
2445*7c356e86SAndroid Build Coastguard Workername: glob-bad-3
2446*7c356e86SAndroid Build Coastguard Workerdescription:
2447*7c356e86SAndroid Build Coastguard Worker	Check that the slash is parsed before the glob
2448*7c356e86SAndroid Build Coastguard Workerstdin:
2449*7c356e86SAndroid Build Coastguard Worker	mkdir a 'a[b'
2450*7c356e86SAndroid Build Coastguard Worker	(cd 'a[b'; echo ok >'c]d')
2451*7c356e86SAndroid Build Coastguard Worker	echo nok >abd
2452*7c356e86SAndroid Build Coastguard Worker	echo fail >a/d
2453*7c356e86SAndroid Build Coastguard Worker	cat a[b/c]d
2454*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2455*7c356e86SAndroid Build Coastguard Worker	ok
2456*7c356e86SAndroid Build Coastguard Worker---
2457*7c356e86SAndroid Build Coastguard Workername: glob-range-1
2458*7c356e86SAndroid Build Coastguard Workerdescription:
2459*7c356e86SAndroid Build Coastguard Worker	Test range matching
2460*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".bc"
2461*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
2462*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "bbc"
2463*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "cbc"
2464*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "-bc"
2465*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "!bc"
2466*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "^bc"
2467*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "+bc"
2468*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ",bc"
2469*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "0bc"
2470*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "1bc"
2471*7c356e86SAndroid Build Coastguard Workerstdin:
2472*7c356e86SAndroid Build Coastguard Worker	echo [ab-]*
2473*7c356e86SAndroid Build Coastguard Worker	echo [-ab]*
2474*7c356e86SAndroid Build Coastguard Worker	echo [!-ab]*
2475*7c356e86SAndroid Build Coastguard Worker	echo [!ab]*
2476*7c356e86SAndroid Build Coastguard Worker	echo []ab]*
2477*7c356e86SAndroid Build Coastguard Worker	echo [^ab]*
2478*7c356e86SAndroid Build Coastguard Worker	echo [+--]*
2479*7c356e86SAndroid Build Coastguard Worker	echo [--1]*
2480*7c356e86SAndroid Build Coastguard Worker
2481*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2482*7c356e86SAndroid Build Coastguard Worker	-bc abc bbc
2483*7c356e86SAndroid Build Coastguard Worker	-bc abc bbc
2484*7c356e86SAndroid Build Coastguard Worker	!bc +bc ,bc 0bc 1bc ^bc cbc
2485*7c356e86SAndroid Build Coastguard Worker	!bc +bc ,bc -bc 0bc 1bc ^bc cbc
2486*7c356e86SAndroid Build Coastguard Worker	abc bbc
2487*7c356e86SAndroid Build Coastguard Worker	^bc abc bbc
2488*7c356e86SAndroid Build Coastguard Worker	+bc ,bc -bc
2489*7c356e86SAndroid Build Coastguard Worker	-bc 0bc 1bc
2490*7c356e86SAndroid Build Coastguard Worker---
2491*7c356e86SAndroid Build Coastguard Workername: glob-range-2
2492*7c356e86SAndroid Build Coastguard Workerdescription:
2493*7c356e86SAndroid Build Coastguard Worker	Test range matching
2494*7c356e86SAndroid Build Coastguard Worker	(AT&T ksh fails this; POSIX says invalid)
2495*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
2496*7c356e86SAndroid Build Coastguard Workerstdin:
2497*7c356e86SAndroid Build Coastguard Worker	echo [a--]*
2498*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2499*7c356e86SAndroid Build Coastguard Worker	[a--]*
2500*7c356e86SAndroid Build Coastguard Worker---
2501*7c356e86SAndroid Build Coastguard Workername: glob-range-3
2502*7c356e86SAndroid Build Coastguard Workerdescription:
2503*7c356e86SAndroid Build Coastguard Worker	Check that globbing matches the right things...
2504*7c356e86SAndroid Build Coastguard Worker# breaks on Mac OSX (HFS+ non-standard UTF-8 canonical decomposition)
2505*7c356e86SAndroid Build Coastguard Worker# breaks on Cygwin 1.7 (files are now UTF-16 or something)
2506*7c356e86SAndroid Build Coastguard Worker# breaks on QNX 6.4.1 (says RT)
2507*7c356e86SAndroid Build Coastguard Workercategory: !os:cygwin,!os:midipix,!os:darwin,!os:msys,!os:nto,!os:os2,!os:os390
2508*7c356e86SAndroid Build Coastguard Workerneed-pass: no
2509*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "a�c"
2510*7c356e86SAndroid Build Coastguard Workerstdin:
2511*7c356e86SAndroid Build Coastguard Worker	echo a[�-�]*
2512*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2513*7c356e86SAndroid Build Coastguard Worker	a�c
2514*7c356e86SAndroid Build Coastguard Worker---
2515*7c356e86SAndroid Build Coastguard Workername: glob-range-4
2516*7c356e86SAndroid Build Coastguard Workerdescription:
2517*7c356e86SAndroid Build Coastguard Worker	Results unspecified according to POSIX
2518*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".bc"
2519*7c356e86SAndroid Build Coastguard Workerstdin:
2520*7c356e86SAndroid Build Coastguard Worker	echo [a.]*
2521*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2522*7c356e86SAndroid Build Coastguard Worker	[a.]*
2523*7c356e86SAndroid Build Coastguard Worker---
2524*7c356e86SAndroid Build Coastguard Workername: glob-range-5
2525*7c356e86SAndroid Build Coastguard Workerdescription:
2526*7c356e86SAndroid Build Coastguard Worker	Results unspecified according to POSIX
2527*7c356e86SAndroid Build Coastguard Worker	(AT&T ksh treats this like [a-cc-e]*)
2528*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
2529*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "bbc"
2530*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "cbc"
2531*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dbc"
2532*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "ebc"
2533*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "-bc"
2534*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "@bc"
2535*7c356e86SAndroid Build Coastguard Workerstdin:
2536*7c356e86SAndroid Build Coastguard Worker	echo [a-c-e]*
2537*7c356e86SAndroid Build Coastguard Worker	echo [a--@]*
2538*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2539*7c356e86SAndroid Build Coastguard Worker	-bc abc bbc cbc ebc
2540*7c356e86SAndroid Build Coastguard Worker	@bc
2541*7c356e86SAndroid Build Coastguard Worker---
2542*7c356e86SAndroid Build Coastguard Workername: glob-range-6
2543*7c356e86SAndroid Build Coastguard Workerdescription:
2544*7c356e86SAndroid Build Coastguard Worker	ksh93 fails this but POSIX probably demands it
2545*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
2546*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "cbc"
2547*7c356e86SAndroid Build Coastguard Workerstdin:
2548*7c356e86SAndroid Build Coastguard Worker	echo *b*
2549*7c356e86SAndroid Build Coastguard Worker	[ '*b*' = *b* ] && echo yep; echo $?
2550*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2551*7c356e86SAndroid Build Coastguard Worker	abc cbc
2552*7c356e86SAndroid Build Coastguard Worker	2
2553*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
2554*7c356e86SAndroid Build Coastguard Worker---
2555*7c356e86SAndroid Build Coastguard Workername: glob-word-1
2556*7c356e86SAndroid Build Coastguard Workerdescription:
2557*7c356e86SAndroid Build Coastguard Worker	Check BSD word boundary matches
2558*7c356e86SAndroid Build Coastguard Workerstdin:
2559*7c356e86SAndroid Build Coastguard Worker	t() { [[ $1 = *[[:\<:]]bar[[:\>:]]* ]]; echo =$?; }
2560*7c356e86SAndroid Build Coastguard Worker	t 'foo bar baz'
2561*7c356e86SAndroid Build Coastguard Worker	t 'foobar baz'
2562*7c356e86SAndroid Build Coastguard Worker	t 'foo barbaz'
2563*7c356e86SAndroid Build Coastguard Worker	t 'bar'
2564*7c356e86SAndroid Build Coastguard Worker	t '_bar'
2565*7c356e86SAndroid Build Coastguard Worker	t 'bar_'
2566*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2567*7c356e86SAndroid Build Coastguard Worker	=0
2568*7c356e86SAndroid Build Coastguard Worker	=1
2569*7c356e86SAndroid Build Coastguard Worker	=1
2570*7c356e86SAndroid Build Coastguard Worker	=0
2571*7c356e86SAndroid Build Coastguard Worker	=1
2572*7c356e86SAndroid Build Coastguard Worker	=1
2573*7c356e86SAndroid Build Coastguard Worker---
2574*7c356e86SAndroid Build Coastguard Workername: glob-trim-1
2575*7c356e86SAndroid Build Coastguard Workerdescription:
2576*7c356e86SAndroid Build Coastguard Worker	Check against a regression from fixing IFS-subst-2
2577*7c356e86SAndroid Build Coastguard Workerstdin:
2578*7c356e86SAndroid Build Coastguard Worker	x='#foo'
2579*7c356e86SAndroid Build Coastguard Worker	print -r "before='$x'"
2580*7c356e86SAndroid Build Coastguard Worker	x=${x%%#*}
2581*7c356e86SAndroid Build Coastguard Worker	print -r "after ='$x'"
2582*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2583*7c356e86SAndroid Build Coastguard Worker	before='#foo'
2584*7c356e86SAndroid Build Coastguard Worker	after =''
2585*7c356e86SAndroid Build Coastguard Worker---
2586*7c356e86SAndroid Build Coastguard Workername: heredoc-1
2587*7c356e86SAndroid Build Coastguard Workerdescription:
2588*7c356e86SAndroid Build Coastguard Worker	Check ordering/content of redundent here documents.
2589*7c356e86SAndroid Build Coastguard Workerstdin:
2590*7c356e86SAndroid Build Coastguard Worker	cat << EOF1 << EOF2
2591*7c356e86SAndroid Build Coastguard Worker	hi
2592*7c356e86SAndroid Build Coastguard Worker	EOF1
2593*7c356e86SAndroid Build Coastguard Worker	there
2594*7c356e86SAndroid Build Coastguard Worker	EOF2
2595*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2596*7c356e86SAndroid Build Coastguard Worker	there
2597*7c356e86SAndroid Build Coastguard Worker---
2598*7c356e86SAndroid Build Coastguard Workername: heredoc-2
2599*7c356e86SAndroid Build Coastguard Workerdescription:
2600*7c356e86SAndroid Build Coastguard Worker	Check quoted here-doc is protected.
2601*7c356e86SAndroid Build Coastguard Workerstdin:
2602*7c356e86SAndroid Build Coastguard Worker	a=foo
2603*7c356e86SAndroid Build Coastguard Worker	cat << 'EOF'
2604*7c356e86SAndroid Build Coastguard Worker	hi\
2605*7c356e86SAndroid Build Coastguard Worker	there$a
2606*7c356e86SAndroid Build Coastguard Worker	stuff
2607*7c356e86SAndroid Build Coastguard Worker	EO\
2608*7c356e86SAndroid Build Coastguard Worker	F
2609*7c356e86SAndroid Build Coastguard Worker	EOF
2610*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2611*7c356e86SAndroid Build Coastguard Worker	hi\
2612*7c356e86SAndroid Build Coastguard Worker	there$a
2613*7c356e86SAndroid Build Coastguard Worker	stuff
2614*7c356e86SAndroid Build Coastguard Worker	EO\
2615*7c356e86SAndroid Build Coastguard Worker	F
2616*7c356e86SAndroid Build Coastguard Worker---
2617*7c356e86SAndroid Build Coastguard Workername: heredoc-3
2618*7c356e86SAndroid Build Coastguard Workerdescription:
2619*7c356e86SAndroid Build Coastguard Worker	Check that newline isn't needed after heredoc-delimiter marker.
2620*7c356e86SAndroid Build Coastguard Workerstdin: !
2621*7c356e86SAndroid Build Coastguard Worker	cat << EOF
2622*7c356e86SAndroid Build Coastguard Worker	hi
2623*7c356e86SAndroid Build Coastguard Worker	there
2624*7c356e86SAndroid Build Coastguard Worker	EOF
2625*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2626*7c356e86SAndroid Build Coastguard Worker	hi
2627*7c356e86SAndroid Build Coastguard Worker	there
2628*7c356e86SAndroid Build Coastguard Worker---
2629*7c356e86SAndroid Build Coastguard Workername: heredoc-4a
2630*7c356e86SAndroid Build Coastguard Workerdescription:
2631*7c356e86SAndroid Build Coastguard Worker	Check that an error occurs if the heredoc-delimiter is missing.
2632*7c356e86SAndroid Build Coastguard Workerstdin: !
2633*7c356e86SAndroid Build Coastguard Worker	cat << EOF
2634*7c356e86SAndroid Build Coastguard Worker	hi
2635*7c356e86SAndroid Build Coastguard Worker	there
2636*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0
2637*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
2638*7c356e86SAndroid Build Coastguard Worker---
2639*7c356e86SAndroid Build Coastguard Workername: heredoc-4an
2640*7c356e86SAndroid Build Coastguard Workerdescription:
2641*7c356e86SAndroid Build Coastguard Worker	Check that an error occurs if the heredoc-delimiter is missing.
2642*7c356e86SAndroid Build Coastguard Workerarguments: !-n!
2643*7c356e86SAndroid Build Coastguard Workerstdin: !
2644*7c356e86SAndroid Build Coastguard Worker	cat << EOF
2645*7c356e86SAndroid Build Coastguard Worker	hi
2646*7c356e86SAndroid Build Coastguard Worker	there
2647*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0
2648*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
2649*7c356e86SAndroid Build Coastguard Worker---
2650*7c356e86SAndroid Build Coastguard Workername: heredoc-4b
2651*7c356e86SAndroid Build Coastguard Workerdescription:
2652*7c356e86SAndroid Build Coastguard Worker	Check that an error occurs if the heredoc is missing.
2653*7c356e86SAndroid Build Coastguard Workerstdin: !
2654*7c356e86SAndroid Build Coastguard Worker	cat << EOF
2655*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0
2656*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
2657*7c356e86SAndroid Build Coastguard Worker---
2658*7c356e86SAndroid Build Coastguard Workername: heredoc-4bn
2659*7c356e86SAndroid Build Coastguard Workerdescription:
2660*7c356e86SAndroid Build Coastguard Worker	Check that an error occurs if the heredoc is missing.
2661*7c356e86SAndroid Build Coastguard Workerarguments: !-n!
2662*7c356e86SAndroid Build Coastguard Workerstdin: !
2663*7c356e86SAndroid Build Coastguard Worker	cat << EOF
2664*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0
2665*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
2666*7c356e86SAndroid Build Coastguard Worker---
2667*7c356e86SAndroid Build Coastguard Workername: heredoc-5
2668*7c356e86SAndroid Build Coastguard Workerdescription:
2669*7c356e86SAndroid Build Coastguard Worker	Check that backslash quotes a $, ` and \ and kills a \newline
2670*7c356e86SAndroid Build Coastguard Workerstdin:
2671*7c356e86SAndroid Build Coastguard Worker	a=BAD
2672*7c356e86SAndroid Build Coastguard Worker	b=ok
2673*7c356e86SAndroid Build Coastguard Worker	cat << EOF
2674*7c356e86SAndroid Build Coastguard Worker	h\${a}i
2675*7c356e86SAndroid Build Coastguard Worker	h\\${b}i
2676*7c356e86SAndroid Build Coastguard Worker	th\`echo not-run\`ere
2677*7c356e86SAndroid Build Coastguard Worker	th\\`echo is-run`ere
2678*7c356e86SAndroid Build Coastguard Worker	fol\\ks
2679*7c356e86SAndroid Build Coastguard Worker	more\\
2680*7c356e86SAndroid Build Coastguard Worker	last \
2681*7c356e86SAndroid Build Coastguard Worker	line
2682*7c356e86SAndroid Build Coastguard Worker	EOF
2683*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2684*7c356e86SAndroid Build Coastguard Worker	h${a}i
2685*7c356e86SAndroid Build Coastguard Worker	h\oki
2686*7c356e86SAndroid Build Coastguard Worker	th`echo not-run`ere
2687*7c356e86SAndroid Build Coastguard Worker	th\is-runere
2688*7c356e86SAndroid Build Coastguard Worker	fol\ks
2689*7c356e86SAndroid Build Coastguard Worker	more\
2690*7c356e86SAndroid Build Coastguard Worker	last line
2691*7c356e86SAndroid Build Coastguard Worker---
2692*7c356e86SAndroid Build Coastguard Workername: heredoc-6
2693*7c356e86SAndroid Build Coastguard Workerdescription:
2694*7c356e86SAndroid Build Coastguard Worker	Check that \newline in initial here-delim word doesn't imply
2695*7c356e86SAndroid Build Coastguard Worker	a quoted here-doc.
2696*7c356e86SAndroid Build Coastguard Workerstdin:
2697*7c356e86SAndroid Build Coastguard Worker	a=i
2698*7c356e86SAndroid Build Coastguard Worker	cat << EO\
2699*7c356e86SAndroid Build Coastguard Worker	F
2700*7c356e86SAndroid Build Coastguard Worker	h$a
2701*7c356e86SAndroid Build Coastguard Worker	there
2702*7c356e86SAndroid Build Coastguard Worker	EOF
2703*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2704*7c356e86SAndroid Build Coastguard Worker	hi
2705*7c356e86SAndroid Build Coastguard Worker	there
2706*7c356e86SAndroid Build Coastguard Worker---
2707*7c356e86SAndroid Build Coastguard Workername: heredoc-7
2708*7c356e86SAndroid Build Coastguard Workerdescription:
2709*7c356e86SAndroid Build Coastguard Worker	Check that double quoted $ expressions in here delimiters are
2710*7c356e86SAndroid Build Coastguard Worker	not expanded and match the delimiter.
2711*7c356e86SAndroid Build Coastguard Worker	POSIX says only quote removal is applied to the delimiter.
2712*7c356e86SAndroid Build Coastguard Workerstdin:
2713*7c356e86SAndroid Build Coastguard Worker	a=b
2714*7c356e86SAndroid Build Coastguard Worker	cat << "E$a"
2715*7c356e86SAndroid Build Coastguard Worker	hi
2716*7c356e86SAndroid Build Coastguard Worker	h$a
2717*7c356e86SAndroid Build Coastguard Worker	hb
2718*7c356e86SAndroid Build Coastguard Worker	E$a
2719*7c356e86SAndroid Build Coastguard Worker	echo done
2720*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2721*7c356e86SAndroid Build Coastguard Worker	hi
2722*7c356e86SAndroid Build Coastguard Worker	h$a
2723*7c356e86SAndroid Build Coastguard Worker	hb
2724*7c356e86SAndroid Build Coastguard Worker	done
2725*7c356e86SAndroid Build Coastguard Worker---
2726*7c356e86SAndroid Build Coastguard Workername: heredoc-8
2727*7c356e86SAndroid Build Coastguard Workerdescription:
2728*7c356e86SAndroid Build Coastguard Worker	Check that double quoted escaped $ expressions in here
2729*7c356e86SAndroid Build Coastguard Worker	delimiters are not expanded and match the delimiter.
2730*7c356e86SAndroid Build Coastguard Worker	POSIX says only quote removal is applied to the delimiter
2731*7c356e86SAndroid Build Coastguard Worker	(\ counts as a quote).
2732*7c356e86SAndroid Build Coastguard Workerstdin:
2733*7c356e86SAndroid Build Coastguard Worker	a=b
2734*7c356e86SAndroid Build Coastguard Worker	cat << "E\$a"
2735*7c356e86SAndroid Build Coastguard Worker	hi
2736*7c356e86SAndroid Build Coastguard Worker	h$a
2737*7c356e86SAndroid Build Coastguard Worker	h\$a
2738*7c356e86SAndroid Build Coastguard Worker	hb
2739*7c356e86SAndroid Build Coastguard Worker	h\b
2740*7c356e86SAndroid Build Coastguard Worker	E$a
2741*7c356e86SAndroid Build Coastguard Worker	echo done
2742*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2743*7c356e86SAndroid Build Coastguard Worker	hi
2744*7c356e86SAndroid Build Coastguard Worker	h$a
2745*7c356e86SAndroid Build Coastguard Worker	h\$a
2746*7c356e86SAndroid Build Coastguard Worker	hb
2747*7c356e86SAndroid Build Coastguard Worker	h\b
2748*7c356e86SAndroid Build Coastguard Worker	done
2749*7c356e86SAndroid Build Coastguard Worker---
2750*7c356e86SAndroid Build Coastguard Workername: heredoc-9
2751*7c356e86SAndroid Build Coastguard Workerdescription:
2752*7c356e86SAndroid Build Coastguard Worker	Check that here strings work.
2753*7c356e86SAndroid Build Coastguard Workerstdin:
2754*7c356e86SAndroid Build Coastguard Worker	bar="bar
2755*7c356e86SAndroid Build Coastguard Worker		baz"
2756*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<foo
2757*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c "tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<foo"
2758*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<"$bar"
2759*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<'$bar'
2760*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<\$bar
2761*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<-foo
2762*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<"$(echo "foo bar")"
2763*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<"A $(echo "foo bar") B"
2764*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<\$b\$b$bar
2765*7c356e86SAndroid Build Coastguard Worker	fnord=42
2766*7c356e86SAndroid Build Coastguard Worker	bar="bar
2767*7c356e86SAndroid Build Coastguard Worker		 \$fnord baz"
2768*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<$bar
2769*7c356e86SAndroid Build Coastguard Worker	tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<< bar
2770*7c356e86SAndroid Build Coastguard Worker	echo $(tr r z <<<'bar' 2>/dev/null)
2771*7c356e86SAndroid Build Coastguard Worker	cat <<< "$(  :                                                             )aa"
2772*7c356e86SAndroid Build Coastguard Worker	IFS=$'\n'
2773*7c356e86SAndroid Build Coastguard Worker	x=(a "b c")
2774*7c356e86SAndroid Build Coastguard Worker	tr ac 12 <<< ${x[*]}
2775*7c356e86SAndroid Build Coastguard Worker	tr ac 34 <<< "${x[*]}"
2776*7c356e86SAndroid Build Coastguard Worker	tr ac 56 <<< ${x[@]}
2777*7c356e86SAndroid Build Coastguard Worker	tr ac 78 <<< "${x[@]}"
2778*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2779*7c356e86SAndroid Build Coastguard Worker	sbb
2780*7c356e86SAndroid Build Coastguard Worker	sbb
2781*7c356e86SAndroid Build Coastguard Worker	one
2782*7c356e86SAndroid Build Coastguard Worker		onm
2783*7c356e86SAndroid Build Coastguard Worker	$one
2784*7c356e86SAndroid Build Coastguard Worker	$one
2785*7c356e86SAndroid Build Coastguard Worker	-sbb
2786*7c356e86SAndroid Build Coastguard Worker	sbb one
2787*7c356e86SAndroid Build Coastguard Worker	A sbb one B
2788*7c356e86SAndroid Build Coastguard Worker	$o$oone
2789*7c356e86SAndroid Build Coastguard Worker		onm
2790*7c356e86SAndroid Build Coastguard Worker	one
2791*7c356e86SAndroid Build Coastguard Worker		 $sabeq onm
2792*7c356e86SAndroid Build Coastguard Worker	one
2793*7c356e86SAndroid Build Coastguard Worker	baz
2794*7c356e86SAndroid Build Coastguard Worker	aa
2795*7c356e86SAndroid Build Coastguard Worker	1
2796*7c356e86SAndroid Build Coastguard Worker	b 2
2797*7c356e86SAndroid Build Coastguard Worker	3
2798*7c356e86SAndroid Build Coastguard Worker	b 4
2799*7c356e86SAndroid Build Coastguard Worker	5 b 6
2800*7c356e86SAndroid Build Coastguard Worker	7 b 8
2801*7c356e86SAndroid Build Coastguard Worker---
2802*7c356e86SAndroid Build Coastguard Workername: heredoc-10
2803*7c356e86SAndroid Build Coastguard Workerdescription:
2804*7c356e86SAndroid Build Coastguard Worker	Check direct here document assignment
2805*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
2806*7c356e86SAndroid Build Coastguard Workerstdin:
2807*7c356e86SAndroid Build Coastguard Worker	x=u
2808*7c356e86SAndroid Build Coastguard Worker	va=<<EOF
2809*7c356e86SAndroid Build Coastguard Worker	=a $x \x40=
2810*7c356e86SAndroid Build Coastguard Worker	EOF
2811*7c356e86SAndroid Build Coastguard Worker	vb=<<'EOF'
2812*7c356e86SAndroid Build Coastguard Worker	=b $x \x40=
2813*7c356e86SAndroid Build Coastguard Worker	EOF
2814*7c356e86SAndroid Build Coastguard Worker	function foo {
2815*7c356e86SAndroid Build Coastguard Worker		vc=<<-EOF
2816*7c356e86SAndroid Build Coastguard Worker			=c $x \x40=
2817*7c356e86SAndroid Build Coastguard Worker		EOF
2818*7c356e86SAndroid Build Coastguard Worker	}
2819*7c356e86SAndroid Build Coastguard Worker	fnd=$(typeset -f foo)
2820*7c356e86SAndroid Build Coastguard Worker	print -r -- "$fnd"
2821*7c356e86SAndroid Build Coastguard Worker	function foo {
2822*7c356e86SAndroid Build Coastguard Worker		echo blub
2823*7c356e86SAndroid Build Coastguard Worker	}
2824*7c356e86SAndroid Build Coastguard Worker	foo
2825*7c356e86SAndroid Build Coastguard Worker	eval "$fnd"
2826*7c356e86SAndroid Build Coastguard Worker	foo
2827*7c356e86SAndroid Build Coastguard Worker	# rather nonsensical, but…
2828*7c356e86SAndroid Build Coastguard Worker	vd=<<<"=d $x \x40="
2829*7c356e86SAndroid Build Coastguard Worker	ve=<<<'=e $x \x40='
2830*7c356e86SAndroid Build Coastguard Worker	vf=<<<$'=f $x \x40='
2831*7c356e86SAndroid Build Coastguard Worker	# now check
2832*7c356e86SAndroid Build Coastguard Worker	print -r -- "| va={$va} vb={$vb} vc={$vc} vd={$vd} ve={$ve} vf={$vf} |"
2833*7c356e86SAndroid Build Coastguard Worker	# check append
2834*7c356e86SAndroid Build Coastguard Worker	v=<<-EOF
2835*7c356e86SAndroid Build Coastguard Worker		vapp1
2836*7c356e86SAndroid Build Coastguard Worker	EOF
2837*7c356e86SAndroid Build Coastguard Worker	v+=<<-EOF
2838*7c356e86SAndroid Build Coastguard Worker		vapp2
2839*7c356e86SAndroid Build Coastguard Worker	EOF
2840*7c356e86SAndroid Build Coastguard Worker	print -r -- "| ${v//$'\n'/^} |"
2841*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2842*7c356e86SAndroid Build Coastguard Worker	function foo {
2843*7c356e86SAndroid Build Coastguard Worker		vc=<<-EOF
2844*7c356e86SAndroid Build Coastguard Worker	=c $x \x40=
2845*7c356e86SAndroid Build Coastguard Worker	EOF
2846*7c356e86SAndroid Build Coastguard Worker
2847*7c356e86SAndroid Build Coastguard Worker	}
2848*7c356e86SAndroid Build Coastguard Worker	blub
2849*7c356e86SAndroid Build Coastguard Worker	| va={=a u \x40=
2850*7c356e86SAndroid Build Coastguard Worker	} vb={=b $x \x40=
2851*7c356e86SAndroid Build Coastguard Worker	} vc={=c u \x40=
2852*7c356e86SAndroid Build Coastguard Worker	} vd={=d u \x40=
2853*7c356e86SAndroid Build Coastguard Worker	} ve={=e $x \x40=
2854*7c356e86SAndroid Build Coastguard Worker	} vf={=f $x @=
2855*7c356e86SAndroid Build Coastguard Worker	} |
2856*7c356e86SAndroid Build Coastguard Worker	| vapp1^vapp2^ |
2857*7c356e86SAndroid Build Coastguard Worker---
2858*7c356e86SAndroid Build Coastguard Workername: heredoc-10-ebcdic
2859*7c356e86SAndroid Build Coastguard Workerdescription:
2860*7c356e86SAndroid Build Coastguard Worker	Check direct here document assignment
2861*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
2862*7c356e86SAndroid Build Coastguard Workerstdin:
2863*7c356e86SAndroid Build Coastguard Worker	x=u
2864*7c356e86SAndroid Build Coastguard Worker	va=<<EOF
2865*7c356e86SAndroid Build Coastguard Worker	=a $x \x7C=
2866*7c356e86SAndroid Build Coastguard Worker	EOF
2867*7c356e86SAndroid Build Coastguard Worker	vb=<<'EOF'
2868*7c356e86SAndroid Build Coastguard Worker	=b $x \x7C=
2869*7c356e86SAndroid Build Coastguard Worker	EOF
2870*7c356e86SAndroid Build Coastguard Worker	function foo {
2871*7c356e86SAndroid Build Coastguard Worker		vc=<<-EOF
2872*7c356e86SAndroid Build Coastguard Worker			=c $x \x7C=
2873*7c356e86SAndroid Build Coastguard Worker		EOF
2874*7c356e86SAndroid Build Coastguard Worker	}
2875*7c356e86SAndroid Build Coastguard Worker	fnd=$(typeset -f foo)
2876*7c356e86SAndroid Build Coastguard Worker	print -r -- "$fnd"
2877*7c356e86SAndroid Build Coastguard Worker	function foo {
2878*7c356e86SAndroid Build Coastguard Worker		echo blub
2879*7c356e86SAndroid Build Coastguard Worker	}
2880*7c356e86SAndroid Build Coastguard Worker	foo
2881*7c356e86SAndroid Build Coastguard Worker	eval "$fnd"
2882*7c356e86SAndroid Build Coastguard Worker	foo
2883*7c356e86SAndroid Build Coastguard Worker	# rather nonsensical, but…
2884*7c356e86SAndroid Build Coastguard Worker	vd=<<<"=d $x \x7C="
2885*7c356e86SAndroid Build Coastguard Worker	ve=<<<'=e $x \x7C='
2886*7c356e86SAndroid Build Coastguard Worker	vf=<<<$'=f $x \x7C='
2887*7c356e86SAndroid Build Coastguard Worker	# now check
2888*7c356e86SAndroid Build Coastguard Worker	print -r -- "| va={$va} vb={$vb} vc={$vc} vd={$vd} ve={$ve} vf={$vf} |"
2889*7c356e86SAndroid Build Coastguard Worker	# check append
2890*7c356e86SAndroid Build Coastguard Worker	v=<<-EOF
2891*7c356e86SAndroid Build Coastguard Worker		vapp1
2892*7c356e86SAndroid Build Coastguard Worker	EOF
2893*7c356e86SAndroid Build Coastguard Worker	v+=<<-EOF
2894*7c356e86SAndroid Build Coastguard Worker		vapp2
2895*7c356e86SAndroid Build Coastguard Worker	EOF
2896*7c356e86SAndroid Build Coastguard Worker	print -r -- "| ${v//$'\n'/^} |"
2897*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2898*7c356e86SAndroid Build Coastguard Worker	function foo {
2899*7c356e86SAndroid Build Coastguard Worker		vc=<<-EOF
2900*7c356e86SAndroid Build Coastguard Worker	=c $x \x7C=
2901*7c356e86SAndroid Build Coastguard Worker	EOF
2902*7c356e86SAndroid Build Coastguard Worker
2903*7c356e86SAndroid Build Coastguard Worker	}
2904*7c356e86SAndroid Build Coastguard Worker	blub
2905*7c356e86SAndroid Build Coastguard Worker	| va={=a u \x7C=
2906*7c356e86SAndroid Build Coastguard Worker	} vb={=b $x \x7C=
2907*7c356e86SAndroid Build Coastguard Worker	} vc={=c u \x7C=
2908*7c356e86SAndroid Build Coastguard Worker	} vd={=d u \x7C=
2909*7c356e86SAndroid Build Coastguard Worker	} ve={=e $x \x7C=
2910*7c356e86SAndroid Build Coastguard Worker	} vf={=f $x @=
2911*7c356e86SAndroid Build Coastguard Worker	} |
2912*7c356e86SAndroid Build Coastguard Worker	| vapp1^vapp2^ |
2913*7c356e86SAndroid Build Coastguard Worker---
2914*7c356e86SAndroid Build Coastguard Workername: heredoc-11
2915*7c356e86SAndroid Build Coastguard Workerdescription:
2916*7c356e86SAndroid Build Coastguard Worker	Check here documents with no or empty delimiter
2917*7c356e86SAndroid Build Coastguard Workerstdin:
2918*7c356e86SAndroid Build Coastguard Worker	x=u
2919*7c356e86SAndroid Build Coastguard Worker	va=<<
2920*7c356e86SAndroid Build Coastguard Worker	=a $x \x40=
2921*7c356e86SAndroid Build Coastguard Worker	<<
2922*7c356e86SAndroid Build Coastguard Worker	vb=<<''
2923*7c356e86SAndroid Build Coastguard Worker	=b $x \x40=
2924*7c356e86SAndroid Build Coastguard Worker
2925*7c356e86SAndroid Build Coastguard Worker	function foo {
2926*7c356e86SAndroid Build Coastguard Worker		vc=<<-
2927*7c356e86SAndroid Build Coastguard Worker			=c $x \x40=
2928*7c356e86SAndroid Build Coastguard Worker		<<
2929*7c356e86SAndroid Build Coastguard Worker		vd=<<-''
2930*7c356e86SAndroid Build Coastguard Worker			=d $x \x40=
2931*7c356e86SAndroid Build Coastguard Worker
2932*7c356e86SAndroid Build Coastguard Worker	}
2933*7c356e86SAndroid Build Coastguard Worker	fnd=$(typeset -f foo)
2934*7c356e86SAndroid Build Coastguard Worker	print -r -- "$fnd"
2935*7c356e86SAndroid Build Coastguard Worker	function foo {
2936*7c356e86SAndroid Build Coastguard Worker		echo blub
2937*7c356e86SAndroid Build Coastguard Worker	}
2938*7c356e86SAndroid Build Coastguard Worker	foo
2939*7c356e86SAndroid Build Coastguard Worker	eval "$fnd"
2940*7c356e86SAndroid Build Coastguard Worker	foo
2941*7c356e86SAndroid Build Coastguard Worker	print -r -- "| va={$va} vb={$vb} vc={$vc} vd={$vd} |"
2942*7c356e86SAndroid Build Coastguard Worker	x=y
2943*7c356e86SAndroid Build Coastguard Worker	foo
2944*7c356e86SAndroid Build Coastguard Worker	typeset -f foo
2945*7c356e86SAndroid Build Coastguard Worker	print -r -- "| vc={$vc} vd={$vd} |"
2946*7c356e86SAndroid Build Coastguard Worker	# check append
2947*7c356e86SAndroid Build Coastguard Worker	v=<<-
2948*7c356e86SAndroid Build Coastguard Worker		vapp1
2949*7c356e86SAndroid Build Coastguard Worker	<<
2950*7c356e86SAndroid Build Coastguard Worker	v+=<<-''
2951*7c356e86SAndroid Build Coastguard Worker		vapp2
2952*7c356e86SAndroid Build Coastguard Worker
2953*7c356e86SAndroid Build Coastguard Worker	print -r -- "| ${v//$'\n'/^} |"
2954*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
2955*7c356e86SAndroid Build Coastguard Worker	function foo {
2956*7c356e86SAndroid Build Coastguard Worker		vc=<<-
2957*7c356e86SAndroid Build Coastguard Worker	=c $x \x40=
2958*7c356e86SAndroid Build Coastguard Worker	<<
2959*7c356e86SAndroid Build Coastguard Worker
2960*7c356e86SAndroid Build Coastguard Worker		vd=<<-""
2961*7c356e86SAndroid Build Coastguard Worker	=d $x \x40=
2962*7c356e86SAndroid Build Coastguard Worker
2963*7c356e86SAndroid Build Coastguard Worker
2964*7c356e86SAndroid Build Coastguard Worker	}
2965*7c356e86SAndroid Build Coastguard Worker	blub
2966*7c356e86SAndroid Build Coastguard Worker	| va={=a u \x40=
2967*7c356e86SAndroid Build Coastguard Worker	} vb={=b $x \x40=
2968*7c356e86SAndroid Build Coastguard Worker	} vc={=c u \x40=
2969*7c356e86SAndroid Build Coastguard Worker	} vd={=d $x \x40=
2970*7c356e86SAndroid Build Coastguard Worker	} |
2971*7c356e86SAndroid Build Coastguard Worker	function foo {
2972*7c356e86SAndroid Build Coastguard Worker		vc=<<-
2973*7c356e86SAndroid Build Coastguard Worker	=c $x \x40=
2974*7c356e86SAndroid Build Coastguard Worker	<<
2975*7c356e86SAndroid Build Coastguard Worker
2976*7c356e86SAndroid Build Coastguard Worker		vd=<<-""
2977*7c356e86SAndroid Build Coastguard Worker	=d $x \x40=
2978*7c356e86SAndroid Build Coastguard Worker
2979*7c356e86SAndroid Build Coastguard Worker
2980*7c356e86SAndroid Build Coastguard Worker	}
2981*7c356e86SAndroid Build Coastguard Worker	| vc={=c y \x40=
2982*7c356e86SAndroid Build Coastguard Worker	} vd={=d $x \x40=
2983*7c356e86SAndroid Build Coastguard Worker	} |
2984*7c356e86SAndroid Build Coastguard Worker	| vapp1^vapp2^ |
2985*7c356e86SAndroid Build Coastguard Worker---
2986*7c356e86SAndroid Build Coastguard Workername: heredoc-12
2987*7c356e86SAndroid Build Coastguard Workerdescription:
2988*7c356e86SAndroid Build Coastguard Worker	Check here documents can use $* and $@; note shells vary:
2989*7c356e86SAndroid Build Coastguard Worker	• pdksh 5.2.14 acts the same
2990*7c356e86SAndroid Build Coastguard Worker	• dash has 1 and 2 the same but 3 lacks the space
2991*7c356e86SAndroid Build Coastguard Worker	• ksh93, bash4 differ in 2 by using space ipv colon
2992*7c356e86SAndroid Build Coastguard Workerstdin:
2993*7c356e86SAndroid Build Coastguard Worker	set -- a b
2994*7c356e86SAndroid Build Coastguard Worker	nl='
2995*7c356e86SAndroid Build Coastguard Worker	'
2996*7c356e86SAndroid Build Coastguard Worker	IFS=" 	$nl"; n=1
2997*7c356e86SAndroid Build Coastguard Worker	cat <<EOF
2998*7c356e86SAndroid Build Coastguard Worker	$n foo $* foo
2999*7c356e86SAndroid Build Coastguard Worker	$n bar "$*" bar
3000*7c356e86SAndroid Build Coastguard Worker	$n baz $@ baz
3001*7c356e86SAndroid Build Coastguard Worker	$n bla "$@" bla
3002*7c356e86SAndroid Build Coastguard Worker	EOF
3003*7c356e86SAndroid Build Coastguard Worker	IFS=":"; n=2
3004*7c356e86SAndroid Build Coastguard Worker	cat <<EOF
3005*7c356e86SAndroid Build Coastguard Worker	$n foo $* foo
3006*7c356e86SAndroid Build Coastguard Worker	$n bar "$*" bar
3007*7c356e86SAndroid Build Coastguard Worker	$n baz $@ baz
3008*7c356e86SAndroid Build Coastguard Worker	$n bla "$@" bla
3009*7c356e86SAndroid Build Coastguard Worker	EOF
3010*7c356e86SAndroid Build Coastguard Worker	IFS=; n=3
3011*7c356e86SAndroid Build Coastguard Worker	cat <<EOF
3012*7c356e86SAndroid Build Coastguard Worker	$n foo $* foo
3013*7c356e86SAndroid Build Coastguard Worker	$n bar "$*" bar
3014*7c356e86SAndroid Build Coastguard Worker	$n baz $@ baz
3015*7c356e86SAndroid Build Coastguard Worker	$n bla "$@" bla
3016*7c356e86SAndroid Build Coastguard Worker	EOF
3017*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3018*7c356e86SAndroid Build Coastguard Worker	1 foo a b foo
3019*7c356e86SAndroid Build Coastguard Worker	1 bar "a b" bar
3020*7c356e86SAndroid Build Coastguard Worker	1 baz a b baz
3021*7c356e86SAndroid Build Coastguard Worker	1 bla "a b" bla
3022*7c356e86SAndroid Build Coastguard Worker	2 foo a:b foo
3023*7c356e86SAndroid Build Coastguard Worker	2 bar "a:b" bar
3024*7c356e86SAndroid Build Coastguard Worker	2 baz a:b baz
3025*7c356e86SAndroid Build Coastguard Worker	2 bla "a:b" bla
3026*7c356e86SAndroid Build Coastguard Worker	3 foo a b foo
3027*7c356e86SAndroid Build Coastguard Worker	3 bar "a b" bar
3028*7c356e86SAndroid Build Coastguard Worker	3 baz a b baz
3029*7c356e86SAndroid Build Coastguard Worker	3 bla "a b" bla
3030*7c356e86SAndroid Build Coastguard Worker---
3031*7c356e86SAndroid Build Coastguard Workername: heredoc-14
3032*7c356e86SAndroid Build Coastguard Workerdescription:
3033*7c356e86SAndroid Build Coastguard Worker	Check that using multiple here documents works
3034*7c356e86SAndroid Build Coastguard Workerstdin:
3035*7c356e86SAndroid Build Coastguard Worker	foo() {
3036*7c356e86SAndroid Build Coastguard Worker		echo "got $(cat) on stdin"
3037*7c356e86SAndroid Build Coastguard Worker		echo "got $(cat <&4) on fd#4"
3038*7c356e86SAndroid Build Coastguard Worker		echo "got $(cat <&5) on fd#5"
3039*7c356e86SAndroid Build Coastguard Worker	}
3040*7c356e86SAndroid Build Coastguard Worker	bar() {
3041*7c356e86SAndroid Build Coastguard Worker		foo 4<<-a <<-b 5<<-c
3042*7c356e86SAndroid Build Coastguard Worker		four
3043*7c356e86SAndroid Build Coastguard Worker		a
3044*7c356e86SAndroid Build Coastguard Worker		zero
3045*7c356e86SAndroid Build Coastguard Worker		b
3046*7c356e86SAndroid Build Coastguard Worker		five
3047*7c356e86SAndroid Build Coastguard Worker		c
3048*7c356e86SAndroid Build Coastguard Worker	}
3049*7c356e86SAndroid Build Coastguard Worker	x=$(typeset -f bar)
3050*7c356e86SAndroid Build Coastguard Worker	eval "$x"
3051*7c356e86SAndroid Build Coastguard Worker	y=$(typeset -f bar)
3052*7c356e86SAndroid Build Coastguard Worker	[[ $x = "$y" ]]; echo $?
3053*7c356e86SAndroid Build Coastguard Worker	typeset -f bar
3054*7c356e86SAndroid Build Coastguard Worker	bar
3055*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3056*7c356e86SAndroid Build Coastguard Worker	0
3057*7c356e86SAndroid Build Coastguard Worker	bar() {
3058*7c356e86SAndroid Build Coastguard Worker		\foo 4<<-a <<-b 5<<-c
3059*7c356e86SAndroid Build Coastguard Worker	four
3060*7c356e86SAndroid Build Coastguard Worker	a
3061*7c356e86SAndroid Build Coastguard Worker	zero
3062*7c356e86SAndroid Build Coastguard Worker	b
3063*7c356e86SAndroid Build Coastguard Worker	five
3064*7c356e86SAndroid Build Coastguard Worker	c
3065*7c356e86SAndroid Build Coastguard Worker
3066*7c356e86SAndroid Build Coastguard Worker	}
3067*7c356e86SAndroid Build Coastguard Worker	got zero on stdin
3068*7c356e86SAndroid Build Coastguard Worker	got four on fd#4
3069*7c356e86SAndroid Build Coastguard Worker	got five on fd#5
3070*7c356e86SAndroid Build Coastguard Worker---
3071*7c356e86SAndroid Build Coastguard Workername: heredoc-15
3072*7c356e86SAndroid Build Coastguard Workerdescription:
3073*7c356e86SAndroid Build Coastguard Worker	Check high-bit7 separators work
3074*7c356e86SAndroid Build Coastguard Workerstdin:
3075*7c356e86SAndroid Build Coastguard Worker	u=ä
3076*7c356e86SAndroid Build Coastguard Worker	tr a-z A-Z <<-…
3077*7c356e86SAndroid Build Coastguard Worker		m${u}h
3078*7c356e86SAndroid Build Coastguard Worker3079*7c356e86SAndroid Build Coastguard Worker	echo ok
3080*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3081*7c356e86SAndroid Build Coastguard Worker	MäH
3082*7c356e86SAndroid Build Coastguard Worker	ok
3083*7c356e86SAndroid Build Coastguard Worker---
3084*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-1
3085*7c356e86SAndroid Build Coastguard Workerdescription:
3086*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in COMSUB, taken from Austin ML
3087*7c356e86SAndroid Build Coastguard Workerstdin:
3088*7c356e86SAndroid Build Coastguard Worker	text=$(cat <<EOF
3089*7c356e86SAndroid Build Coastguard Worker	here is the text
3090*7c356e86SAndroid Build Coastguard Worker	EOF)
3091*7c356e86SAndroid Build Coastguard Worker	echo = $text =
3092*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3093*7c356e86SAndroid Build Coastguard Worker	= here is the text =
3094*7c356e86SAndroid Build Coastguard Worker---
3095*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-2
3096*7c356e86SAndroid Build Coastguard Workerdescription:
3097*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in COMSUB, taken from Austin ML
3098*7c356e86SAndroid Build Coastguard Workerstdin:
3099*7c356e86SAndroid Build Coastguard Worker	unbalanced=$(cat <<EOF
3100*7c356e86SAndroid Build Coastguard Worker	this paren ) is a problem
3101*7c356e86SAndroid Build Coastguard Worker	EOF)
3102*7c356e86SAndroid Build Coastguard Worker	echo = $unbalanced =
3103*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3104*7c356e86SAndroid Build Coastguard Worker	= this paren ) is a problem =
3105*7c356e86SAndroid Build Coastguard Worker---
3106*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-3
3107*7c356e86SAndroid Build Coastguard Workerdescription:
3108*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in COMSUB, taken from Austin ML
3109*7c356e86SAndroid Build Coastguard Workerstdin:
3110*7c356e86SAndroid Build Coastguard Worker	balanced=$(cat <<EOF
3111*7c356e86SAndroid Build Coastguard Worker	these parens ( ) are not a problem
3112*7c356e86SAndroid Build Coastguard Worker	EOF)
3113*7c356e86SAndroid Build Coastguard Worker	echo = $balanced =
3114*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3115*7c356e86SAndroid Build Coastguard Worker	= these parens ( ) are not a problem =
3116*7c356e86SAndroid Build Coastguard Worker---
3117*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-4
3118*7c356e86SAndroid Build Coastguard Workerdescription:
3119*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in COMSUB, taken from Austin ML
3120*7c356e86SAndroid Build Coastguard Workerstdin:
3121*7c356e86SAndroid Build Coastguard Worker	balanced=$(cat <<EOF
3122*7c356e86SAndroid Build Coastguard Worker	these parens \( ) are a problem
3123*7c356e86SAndroid Build Coastguard Worker	EOF)
3124*7c356e86SAndroid Build Coastguard Worker	echo = $balanced =
3125*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3126*7c356e86SAndroid Build Coastguard Worker	= these parens \( ) are a problem =
3127*7c356e86SAndroid Build Coastguard Worker---
3128*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-5
3129*7c356e86SAndroid Build Coastguard Workerdescription:
3130*7c356e86SAndroid Build Coastguard Worker	Check heredoc and COMSUB mixture in input
3131*7c356e86SAndroid Build Coastguard Workerstdin:
3132*7c356e86SAndroid Build Coastguard Worker	prefix() { sed -e "s/^/$1:/"; }
3133*7c356e86SAndroid Build Coastguard Worker	XXX() { echo x-en; }
3134*7c356e86SAndroid Build Coastguard Worker	YYY() { echo y-es; }
3135*7c356e86SAndroid Build Coastguard Worker
3136*7c356e86SAndroid Build Coastguard Worker	prefix A <<XXX && echo "$(prefix B <<XXX
3137*7c356e86SAndroid Build Coastguard Worker	echo line 1
3138*7c356e86SAndroid Build Coastguard Worker	XXX
3139*7c356e86SAndroid Build Coastguard Worker	echo line 2)" && prefix C <<YYY
3140*7c356e86SAndroid Build Coastguard Worker	echo line 3
3141*7c356e86SAndroid Build Coastguard Worker	XXX
3142*7c356e86SAndroid Build Coastguard Worker	echo line 4)"
3143*7c356e86SAndroid Build Coastguard Worker	echo line 5
3144*7c356e86SAndroid Build Coastguard Worker	YYY
3145*7c356e86SAndroid Build Coastguard Worker	XXX
3146*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3147*7c356e86SAndroid Build Coastguard Worker	A:echo line 3
3148*7c356e86SAndroid Build Coastguard Worker	B:echo line 1
3149*7c356e86SAndroid Build Coastguard Worker	line 2
3150*7c356e86SAndroid Build Coastguard Worker	C:echo line 4)"
3151*7c356e86SAndroid Build Coastguard Worker	C:echo line 5
3152*7c356e86SAndroid Build Coastguard Worker	x-en
3153*7c356e86SAndroid Build Coastguard Worker---
3154*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-6
3155*7c356e86SAndroid Build Coastguard Workerdescription:
3156*7c356e86SAndroid Build Coastguard Worker	Check here documents and here strings can be used
3157*7c356e86SAndroid Build Coastguard Worker	without a specific command, like $(<…) (extension)
3158*7c356e86SAndroid Build Coastguard Workerstdin:
3159*7c356e86SAndroid Build Coastguard Worker	foo=bar
3160*7c356e86SAndroid Build Coastguard Worker	x=$(<<<EO${foo}F)
3161*7c356e86SAndroid Build Coastguard Worker	echo "3<$x>"
3162*7c356e86SAndroid Build Coastguard Worker		y=$(<<-EOF
3163*7c356e86SAndroid Build Coastguard Worker			hi!
3164*7c356e86SAndroid Build Coastguard Worker
3165*7c356e86SAndroid Build Coastguard Worker			$foo) is not a problem
3166*7c356e86SAndroid Build Coastguard Worker
3167*7c356e86SAndroid Build Coastguard Worker
3168*7c356e86SAndroid Build Coastguard Worker		EOF)
3169*7c356e86SAndroid Build Coastguard Worker	echo "7<$y>"
3170*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3171*7c356e86SAndroid Build Coastguard Worker	3<EObarF>
3172*7c356e86SAndroid Build Coastguard Worker	7<hi!
3173*7c356e86SAndroid Build Coastguard Worker
3174*7c356e86SAndroid Build Coastguard Worker	bar) is not a problem>
3175*7c356e86SAndroid Build Coastguard Worker---
3176*7c356e86SAndroid Build Coastguard Workername: heredoc-subshell-1
3177*7c356e86SAndroid Build Coastguard Workerdescription:
3178*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in subshells, taken from Austin ML
3179*7c356e86SAndroid Build Coastguard Workerstdin:
3180*7c356e86SAndroid Build Coastguard Worker	(cat <<EOF
3181*7c356e86SAndroid Build Coastguard Worker	some text
3182*7c356e86SAndroid Build Coastguard Worker	EOF)
3183*7c356e86SAndroid Build Coastguard Worker	echo end
3184*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3185*7c356e86SAndroid Build Coastguard Worker	some text
3186*7c356e86SAndroid Build Coastguard Worker	end
3187*7c356e86SAndroid Build Coastguard Worker---
3188*7c356e86SAndroid Build Coastguard Workername: heredoc-subshell-2
3189*7c356e86SAndroid Build Coastguard Workerdescription:
3190*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in subshells, taken from Austin ML
3191*7c356e86SAndroid Build Coastguard Workerstdin:
3192*7c356e86SAndroid Build Coastguard Worker	(cat <<EOF
3193*7c356e86SAndroid Build Coastguard Worker	some text
3194*7c356e86SAndroid Build Coastguard Worker	EOF
3195*7c356e86SAndroid Build Coastguard Worker	)
3196*7c356e86SAndroid Build Coastguard Worker	echo end
3197*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3198*7c356e86SAndroid Build Coastguard Worker	some text
3199*7c356e86SAndroid Build Coastguard Worker	end
3200*7c356e86SAndroid Build Coastguard Worker---
3201*7c356e86SAndroid Build Coastguard Workername: heredoc-subshell-3
3202*7c356e86SAndroid Build Coastguard Workerdescription:
3203*7c356e86SAndroid Build Coastguard Worker	Tests for here documents in subshells, taken from Austin ML
3204*7c356e86SAndroid Build Coastguard Workerstdin:
3205*7c356e86SAndroid Build Coastguard Worker	(cat <<EOF; )
3206*7c356e86SAndroid Build Coastguard Worker	some text
3207*7c356e86SAndroid Build Coastguard Worker	EOF
3208*7c356e86SAndroid Build Coastguard Worker	echo end
3209*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3210*7c356e86SAndroid Build Coastguard Worker	some text
3211*7c356e86SAndroid Build Coastguard Worker	end
3212*7c356e86SAndroid Build Coastguard Worker---
3213*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-1
3214*7c356e86SAndroid Build Coastguard Workerdescription:
3215*7c356e86SAndroid Build Coastguard Worker	Tests for here documents, taken from Austin ML
3216*7c356e86SAndroid Build Coastguard Worker	Documents current state in mksh, *NOT* necessarily correct!
3217*7c356e86SAndroid Build Coastguard Workerstdin:
3218*7c356e86SAndroid Build Coastguard Worker	cat <<END
3219*7c356e86SAndroid Build Coastguard Worker	hello
3220*7c356e86SAndroid Build Coastguard Worker	END\
3221*7c356e86SAndroid Build Coastguard Worker	END
3222*7c356e86SAndroid Build Coastguard Worker	END
3223*7c356e86SAndroid Build Coastguard Worker	echo end
3224*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3225*7c356e86SAndroid Build Coastguard Worker	hello
3226*7c356e86SAndroid Build Coastguard Worker	ENDEND
3227*7c356e86SAndroid Build Coastguard Worker	end
3228*7c356e86SAndroid Build Coastguard Worker---
3229*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-2
3230*7c356e86SAndroid Build Coastguard Workerdescription:
3231*7c356e86SAndroid Build Coastguard Worker	Tests for here documents, taken from Austin ML
3232*7c356e86SAndroid Build Coastguard Workerstdin:
3233*7c356e86SAndroid Build Coastguard Worker	cat <<'    END    '
3234*7c356e86SAndroid Build Coastguard Worker	hello
3235*7c356e86SAndroid Build Coastguard Worker	    END
3236*7c356e86SAndroid Build Coastguard Worker	echo end
3237*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3238*7c356e86SAndroid Build Coastguard Worker	hello
3239*7c356e86SAndroid Build Coastguard Worker	end
3240*7c356e86SAndroid Build Coastguard Worker---
3241*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-4
3242*7c356e86SAndroid Build Coastguard Workerdescription:
3243*7c356e86SAndroid Build Coastguard Worker	Tests for here documents, taken from Austin ML
3244*7c356e86SAndroid Build Coastguard Worker	Documents current state in mksh, *NOT* necessarily correct!
3245*7c356e86SAndroid Build Coastguard Workerstdin:
3246*7c356e86SAndroid Build Coastguard Worker	cat <<END
3247*7c356e86SAndroid Build Coastguard Worker	hello\
3248*7c356e86SAndroid Build Coastguard Worker	END
3249*7c356e86SAndroid Build Coastguard Worker	END
3250*7c356e86SAndroid Build Coastguard Worker	echo end
3251*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3252*7c356e86SAndroid Build Coastguard Worker	helloEND
3253*7c356e86SAndroid Build Coastguard Worker	end
3254*7c356e86SAndroid Build Coastguard Worker---
3255*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-5
3256*7c356e86SAndroid Build Coastguard Workerdescription:
3257*7c356e86SAndroid Build Coastguard Worker	Tests for here documents, taken from Austin ML
3258*7c356e86SAndroid Build Coastguard Worker	Documents current state in mksh, *NOT* necessarily correct!
3259*7c356e86SAndroid Build Coastguard Workerstdin:
3260*7c356e86SAndroid Build Coastguard Worker	cat <<END
3261*7c356e86SAndroid Build Coastguard Worker	hello
3262*7c356e86SAndroid Build Coastguard Worker	\END
3263*7c356e86SAndroid Build Coastguard Worker	END
3264*7c356e86SAndroid Build Coastguard Worker	echo end
3265*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3266*7c356e86SAndroid Build Coastguard Worker	hello
3267*7c356e86SAndroid Build Coastguard Worker	\END
3268*7c356e86SAndroid Build Coastguard Worker	end
3269*7c356e86SAndroid Build Coastguard Worker---
3270*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-1
3271*7c356e86SAndroid Build Coastguard Workerdescription:
3272*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3273*7c356e86SAndroid Build Coastguard Worker	Heredoc in simple command.
3274*7c356e86SAndroid Build Coastguard Workerstdin:
3275*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3276*7c356e86SAndroid Build Coastguard Worker	eval '
3277*7c356e86SAndroid Build Coastguard Worker		cat <<- EOF
3278*7c356e86SAndroid Build Coastguard Worker		hi
3279*7c356e86SAndroid Build Coastguard Worker		EOF
3280*7c356e86SAndroid Build Coastguard Worker		for i in a b ; do
3281*7c356e86SAndroid Build Coastguard Worker			cat <<- EOF
3282*7c356e86SAndroid Build Coastguard Worker			more
3283*7c356e86SAndroid Build Coastguard Worker			EOF
3284*7c356e86SAndroid Build Coastguard Worker		done
3285*7c356e86SAndroid Build Coastguard Worker	    ' &
3286*7c356e86SAndroid Build Coastguard Worker	sleep 1
3287*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3288*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3289*7c356e86SAndroid Build Coastguard Worker	hi
3290*7c356e86SAndroid Build Coastguard Worker	more
3291*7c356e86SAndroid Build Coastguard Worker	more
3292*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3293*7c356e86SAndroid Build Coastguard Worker---
3294*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-2
3295*7c356e86SAndroid Build Coastguard Workerdescription:
3296*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3297*7c356e86SAndroid Build Coastguard Worker	Heredoc in function, multiple calls to function.
3298*7c356e86SAndroid Build Coastguard Workerstdin:
3299*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3300*7c356e86SAndroid Build Coastguard Worker	eval '
3301*7c356e86SAndroid Build Coastguard Worker		foo() {
3302*7c356e86SAndroid Build Coastguard Worker			cat <<- EOF
3303*7c356e86SAndroid Build Coastguard Worker			hi
3304*7c356e86SAndroid Build Coastguard Worker			EOF
3305*7c356e86SAndroid Build Coastguard Worker		}
3306*7c356e86SAndroid Build Coastguard Worker		foo
3307*7c356e86SAndroid Build Coastguard Worker		foo
3308*7c356e86SAndroid Build Coastguard Worker	    ' &
3309*7c356e86SAndroid Build Coastguard Worker	sleep 1
3310*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3311*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3312*7c356e86SAndroid Build Coastguard Worker	hi
3313*7c356e86SAndroid Build Coastguard Worker	hi
3314*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3315*7c356e86SAndroid Build Coastguard Worker---
3316*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-3
3317*7c356e86SAndroid Build Coastguard Workerdescription:
3318*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3319*7c356e86SAndroid Build Coastguard Worker	Heredoc in function in loop, multiple calls to function.
3320*7c356e86SAndroid Build Coastguard Workerstdin:
3321*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3322*7c356e86SAndroid Build Coastguard Worker	eval '
3323*7c356e86SAndroid Build Coastguard Worker		foo() {
3324*7c356e86SAndroid Build Coastguard Worker			cat <<- EOF
3325*7c356e86SAndroid Build Coastguard Worker			hi
3326*7c356e86SAndroid Build Coastguard Worker			EOF
3327*7c356e86SAndroid Build Coastguard Worker		}
3328*7c356e86SAndroid Build Coastguard Worker		for i in a b; do
3329*7c356e86SAndroid Build Coastguard Worker			foo
3330*7c356e86SAndroid Build Coastguard Worker			foo() {
3331*7c356e86SAndroid Build Coastguard Worker				cat <<- EOF
3332*7c356e86SAndroid Build Coastguard Worker				folks $i
3333*7c356e86SAndroid Build Coastguard Worker				EOF
3334*7c356e86SAndroid Build Coastguard Worker			}
3335*7c356e86SAndroid Build Coastguard Worker		done
3336*7c356e86SAndroid Build Coastguard Worker		foo
3337*7c356e86SAndroid Build Coastguard Worker	    ' &
3338*7c356e86SAndroid Build Coastguard Worker	sleep 1
3339*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3340*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3341*7c356e86SAndroid Build Coastguard Worker	hi
3342*7c356e86SAndroid Build Coastguard Worker	folks b
3343*7c356e86SAndroid Build Coastguard Worker	folks b
3344*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3345*7c356e86SAndroid Build Coastguard Worker---
3346*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-4
3347*7c356e86SAndroid Build Coastguard Workerdescription:
3348*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3349*7c356e86SAndroid Build Coastguard Worker	Backgrounded simple command with here doc
3350*7c356e86SAndroid Build Coastguard Workerstdin:
3351*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3352*7c356e86SAndroid Build Coastguard Worker	eval '
3353*7c356e86SAndroid Build Coastguard Worker		cat <<- EOF &
3354*7c356e86SAndroid Build Coastguard Worker		hi
3355*7c356e86SAndroid Build Coastguard Worker		EOF
3356*7c356e86SAndroid Build Coastguard Worker	    ' &
3357*7c356e86SAndroid Build Coastguard Worker	sleep 1
3358*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3359*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3360*7c356e86SAndroid Build Coastguard Worker	hi
3361*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3362*7c356e86SAndroid Build Coastguard Worker---
3363*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-5
3364*7c356e86SAndroid Build Coastguard Workerdescription:
3365*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3366*7c356e86SAndroid Build Coastguard Worker	Backgrounded subshell command with here doc
3367*7c356e86SAndroid Build Coastguard Workerstdin:
3368*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3369*7c356e86SAndroid Build Coastguard Worker	eval '
3370*7c356e86SAndroid Build Coastguard Worker	      (
3371*7c356e86SAndroid Build Coastguard Worker		sleep 1	# so parent exits
3372*7c356e86SAndroid Build Coastguard Worker		echo A
3373*7c356e86SAndroid Build Coastguard Worker		cat <<- EOF
3374*7c356e86SAndroid Build Coastguard Worker		hi
3375*7c356e86SAndroid Build Coastguard Worker		EOF
3376*7c356e86SAndroid Build Coastguard Worker		echo B
3377*7c356e86SAndroid Build Coastguard Worker	      ) &
3378*7c356e86SAndroid Build Coastguard Worker	    ' &
3379*7c356e86SAndroid Build Coastguard Worker	sleep 5
3380*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3381*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3382*7c356e86SAndroid Build Coastguard Worker	A
3383*7c356e86SAndroid Build Coastguard Worker	hi
3384*7c356e86SAndroid Build Coastguard Worker	B
3385*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3386*7c356e86SAndroid Build Coastguard Worker---
3387*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-6
3388*7c356e86SAndroid Build Coastguard Workerdescription:
3389*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3390*7c356e86SAndroid Build Coastguard Worker	Heredoc in pipeline.
3391*7c356e86SAndroid Build Coastguard Workerstdin:
3392*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3393*7c356e86SAndroid Build Coastguard Worker	eval '
3394*7c356e86SAndroid Build Coastguard Worker		cat <<- EOF | sed "s/hi/HI/"
3395*7c356e86SAndroid Build Coastguard Worker		hi
3396*7c356e86SAndroid Build Coastguard Worker		EOF
3397*7c356e86SAndroid Build Coastguard Worker	    ' &
3398*7c356e86SAndroid Build Coastguard Worker	sleep 1
3399*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3400*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3401*7c356e86SAndroid Build Coastguard Worker	HI
3402*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3403*7c356e86SAndroid Build Coastguard Worker---
3404*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-7
3405*7c356e86SAndroid Build Coastguard Workerdescription:
3406*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too late.
3407*7c356e86SAndroid Build Coastguard Worker	Heredoc in backgrounded pipeline.
3408*7c356e86SAndroid Build Coastguard Workerstdin:
3409*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3410*7c356e86SAndroid Build Coastguard Worker	eval '
3411*7c356e86SAndroid Build Coastguard Worker		cat <<- EOF | sed 's/hi/HI/' &
3412*7c356e86SAndroid Build Coastguard Worker		hi
3413*7c356e86SAndroid Build Coastguard Worker		EOF
3414*7c356e86SAndroid Build Coastguard Worker	    ' &
3415*7c356e86SAndroid Build Coastguard Worker	sleep 1
3416*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3417*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3418*7c356e86SAndroid Build Coastguard Worker	HI
3419*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3420*7c356e86SAndroid Build Coastguard Worker---
3421*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-8
3422*7c356e86SAndroid Build Coastguard Workerdescription:
3423*7c356e86SAndroid Build Coastguard Worker	Check that heredoc temp files aren't removed too soon or too
3424*7c356e86SAndroid Build Coastguard Worker	late. Heredoc in function, backgrounded call to function.
3425*7c356e86SAndroid Build Coastguard Worker	This check can fail on slow machines (<100 MHz), or Cygwin,
3426*7c356e86SAndroid Build Coastguard Worker	that's normal.
3427*7c356e86SAndroid Build Coastguard Workerneed-pass: no
3428*7c356e86SAndroid Build Coastguard Workerstdin:
3429*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD
3430*7c356e86SAndroid Build Coastguard Worker	# Background eval so main shell doesn't do parsing
3431*7c356e86SAndroid Build Coastguard Worker	eval '
3432*7c356e86SAndroid Build Coastguard Worker		foo() {
3433*7c356e86SAndroid Build Coastguard Worker			cat <<- EOF
3434*7c356e86SAndroid Build Coastguard Worker			hi
3435*7c356e86SAndroid Build Coastguard Worker			EOF
3436*7c356e86SAndroid Build Coastguard Worker		}
3437*7c356e86SAndroid Build Coastguard Worker		foo
3438*7c356e86SAndroid Build Coastguard Worker		# sleep so eval can die
3439*7c356e86SAndroid Build Coastguard Worker		(sleep 1; foo) &
3440*7c356e86SAndroid Build Coastguard Worker		(sleep 1; foo) &
3441*7c356e86SAndroid Build Coastguard Worker		foo
3442*7c356e86SAndroid Build Coastguard Worker	    ' &
3443*7c356e86SAndroid Build Coastguard Worker	sleep 5
3444*7c356e86SAndroid Build Coastguard Worker	echo Left overs: *
3445*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3446*7c356e86SAndroid Build Coastguard Worker	hi
3447*7c356e86SAndroid Build Coastguard Worker	hi
3448*7c356e86SAndroid Build Coastguard Worker	hi
3449*7c356e86SAndroid Build Coastguard Worker	hi
3450*7c356e86SAndroid Build Coastguard Worker	Left overs: *
3451*7c356e86SAndroid Build Coastguard Worker---
3452*7c356e86SAndroid Build Coastguard Workername: heredoc-quoting-unsubst
3453*7c356e86SAndroid Build Coastguard Workerdescription:
3454*7c356e86SAndroid Build Coastguard Worker	Check for correct handling of quoted characters in
3455*7c356e86SAndroid Build Coastguard Worker	here documents without substitution (marker is quoted).
3456*7c356e86SAndroid Build Coastguard Workerstdin:
3457*7c356e86SAndroid Build Coastguard Worker	foo=bar
3458*7c356e86SAndroid Build Coastguard Worker	cat <<-'EOF'
3459*7c356e86SAndroid Build Coastguard Worker		x " \" \ \\ $ \$ `echo baz` \`echo baz\` $foo \$foo x
3460*7c356e86SAndroid Build Coastguard Worker	EOF
3461*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3462*7c356e86SAndroid Build Coastguard Worker	x " \" \ \\ $ \$ `echo baz` \`echo baz\` $foo \$foo x
3463*7c356e86SAndroid Build Coastguard Worker---
3464*7c356e86SAndroid Build Coastguard Workername: heredoc-quoting-subst
3465*7c356e86SAndroid Build Coastguard Workerdescription:
3466*7c356e86SAndroid Build Coastguard Worker	Check for correct handling of quoted characters in
3467*7c356e86SAndroid Build Coastguard Worker	here documents with substitution (marker is not quoted).
3468*7c356e86SAndroid Build Coastguard Workerstdin:
3469*7c356e86SAndroid Build Coastguard Worker	foo=bar
3470*7c356e86SAndroid Build Coastguard Worker	cat <<-EOF
3471*7c356e86SAndroid Build Coastguard Worker		x " \" \ \\ $ \$ `echo baz` \`echo baz\` $foo \$foo x
3472*7c356e86SAndroid Build Coastguard Worker	EOF
3473*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3474*7c356e86SAndroid Build Coastguard Worker	x " \" \ \ $ $ baz `echo baz` bar $foo x
3475*7c356e86SAndroid Build Coastguard Worker---
3476*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-braces
3477*7c356e86SAndroid Build Coastguard Workerdescription:
3478*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside unquoted {} are treated as quotes
3479*7c356e86SAndroid Build Coastguard Workerstdin:
3480*7c356e86SAndroid Build Coastguard Worker	foo=1
3481*7c356e86SAndroid Build Coastguard Worker	echo ${foo:+'blah  $foo'}
3482*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3483*7c356e86SAndroid Build Coastguard Worker	blah  $foo
3484*7c356e86SAndroid Build Coastguard Worker---
3485*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-quoted-braces
3486*7c356e86SAndroid Build Coastguard Workerdescription:
3487*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside quoted {} are treated as
3488*7c356e86SAndroid Build Coastguard Worker	normal char
3489*7c356e86SAndroid Build Coastguard Workerstdin:
3490*7c356e86SAndroid Build Coastguard Worker	foo=1
3491*7c356e86SAndroid Build Coastguard Worker	echo "${foo:+'blah  $foo'}"
3492*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3493*7c356e86SAndroid Build Coastguard Worker	'blah  1'
3494*7c356e86SAndroid Build Coastguard Worker---
3495*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-braces-nested
3496*7c356e86SAndroid Build Coastguard Workerdescription:
3497*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside unquoted {} are treated as quotes,
3498*7c356e86SAndroid Build Coastguard Worker	even if that's inside a double-quoted command expansion
3499*7c356e86SAndroid Build Coastguard Workerstdin:
3500*7c356e86SAndroid Build Coastguard Worker	foo=1
3501*7c356e86SAndroid Build Coastguard Worker	echo "$( echo ${foo:+'blah  $foo'})"
3502*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3503*7c356e86SAndroid Build Coastguard Worker	blah  $foo
3504*7c356e86SAndroid Build Coastguard Worker---
3505*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-brace-pattern
3506*7c356e86SAndroid Build Coastguard Workerdescription:
3507*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside {} pattern are treated as quotes
3508*7c356e86SAndroid Build Coastguard Workerstdin:
3509*7c356e86SAndroid Build Coastguard Worker	foo=1234
3510*7c356e86SAndroid Build Coastguard Worker	echo ${foo%'2'*} "${foo%'2'*}" ${foo%2'*'} "${foo%2'*'}"
3511*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3512*7c356e86SAndroid Build Coastguard Worker	1 1 1234 1234
3513*7c356e86SAndroid Build Coastguard Worker---
3514*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-heredoc-braces
3515*7c356e86SAndroid Build Coastguard Workerdescription:
3516*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside {} in heredoc are treated
3517*7c356e86SAndroid Build Coastguard Worker	as normal char
3518*7c356e86SAndroid Build Coastguard Workerstdin:
3519*7c356e86SAndroid Build Coastguard Worker	foo=1
3520*7c356e86SAndroid Build Coastguard Worker	cat <<EOM
3521*7c356e86SAndroid Build Coastguard Worker	${foo:+'blah  $foo'}
3522*7c356e86SAndroid Build Coastguard Worker	EOM
3523*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3524*7c356e86SAndroid Build Coastguard Worker	'blah  1'
3525*7c356e86SAndroid Build Coastguard Worker---
3526*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-braces
3527*7c356e86SAndroid Build Coastguard Workerdescription:
3528*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside nested unquoted {} are
3529*7c356e86SAndroid Build Coastguard Worker	treated as quotes
3530*7c356e86SAndroid Build Coastguard Workerstdin:
3531*7c356e86SAndroid Build Coastguard Worker	foo=1
3532*7c356e86SAndroid Build Coastguard Worker	echo ${foo:+${foo:+'blah  $foo'}}
3533*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3534*7c356e86SAndroid Build Coastguard Worker	blah  $foo
3535*7c356e86SAndroid Build Coastguard Worker---
3536*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-quoted-braces
3537*7c356e86SAndroid Build Coastguard Workerdescription:
3538*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside nested quoted {} are treated
3539*7c356e86SAndroid Build Coastguard Worker	as normal char
3540*7c356e86SAndroid Build Coastguard Workerstdin:
3541*7c356e86SAndroid Build Coastguard Worker	foo=1
3542*7c356e86SAndroid Build Coastguard Worker	echo "${foo:+${foo:+'blah  $foo'}}"
3543*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3544*7c356e86SAndroid Build Coastguard Worker	'blah  1'
3545*7c356e86SAndroid Build Coastguard Worker---
3546*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-braces-nested
3547*7c356e86SAndroid Build Coastguard Workerdescription:
3548*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside nested unquoted {} are treated
3549*7c356e86SAndroid Build Coastguard Worker	as quotes, even if that's inside a double-quoted command expansion
3550*7c356e86SAndroid Build Coastguard Workerstdin:
3551*7c356e86SAndroid Build Coastguard Worker	foo=1
3552*7c356e86SAndroid Build Coastguard Worker	echo "$( echo ${foo:+${foo:+'blah  $foo'}})"
3553*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3554*7c356e86SAndroid Build Coastguard Worker	blah  $foo
3555*7c356e86SAndroid Build Coastguard Worker---
3556*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-brace-pattern
3557*7c356e86SAndroid Build Coastguard Workerdescription:
3558*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside nested {} pattern are treated as quotes
3559*7c356e86SAndroid Build Coastguard Workerstdin:
3560*7c356e86SAndroid Build Coastguard Worker	foo=1234
3561*7c356e86SAndroid Build Coastguard Worker	echo ${foo:+${foo%'2'*}} "${foo:+${foo%'2'*}}" ${foo:+${foo%2'*'}} "${foo:+${foo%2'*'}}"
3562*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3563*7c356e86SAndroid Build Coastguard Worker	1 1 1234 1234
3564*7c356e86SAndroid Build Coastguard Worker---
3565*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-heredoc-nested-braces
3566*7c356e86SAndroid Build Coastguard Workerdescription:
3567*7c356e86SAndroid Build Coastguard Worker	Check that single quotes inside nested {} in heredoc are treated
3568*7c356e86SAndroid Build Coastguard Worker	as normal char
3569*7c356e86SAndroid Build Coastguard Workerstdin:
3570*7c356e86SAndroid Build Coastguard Worker	foo=1
3571*7c356e86SAndroid Build Coastguard Worker	cat <<EOM
3572*7c356e86SAndroid Build Coastguard Worker	${foo:+${foo:+'blah  $foo'}}
3573*7c356e86SAndroid Build Coastguard Worker	EOM
3574*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3575*7c356e86SAndroid Build Coastguard Worker	'blah  1'
3576*7c356e86SAndroid Build Coastguard Worker---
3577*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-heredoc-trim
3578*7c356e86SAndroid Build Coastguard Workerdescription:
3579*7c356e86SAndroid Build Coastguard Worker	In some cases, single quotes inside {} in heredoc are not normal
3580*7c356e86SAndroid Build Coastguard Workerstdin:
3581*7c356e86SAndroid Build Coastguard Worker	x=notOK
3582*7c356e86SAndroid Build Coastguard Worker	cat <<EOF
3583*7c356e86SAndroid Build Coastguard Worker	1: ${x#not} ${x:+${x#not}}
3584*7c356e86SAndroid Build Coastguard Worker	2: ${x#\n\o\t} ${x:+${x#\n\o\t}}
3585*7c356e86SAndroid Build Coastguard Worker	3: ${x#"not"} ${x:+${x#"not"}}
3586*7c356e86SAndroid Build Coastguard Worker	4: ${x#'not'} ${x:+${x#'not'}}
3587*7c356e86SAndroid Build Coastguard Worker	5: ${x#$'not'} ${x:+${x#$'not'}}
3588*7c356e86SAndroid Build Coastguard Worker	EOF
3589*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3590*7c356e86SAndroid Build Coastguard Worker	1: OK OK
3591*7c356e86SAndroid Build Coastguard Worker	2: OK OK
3592*7c356e86SAndroid Build Coastguard Worker	3: OK OK
3593*7c356e86SAndroid Build Coastguard Worker	4: OK OK
3594*7c356e86SAndroid Build Coastguard Worker	5: OK OK
3595*7c356e86SAndroid Build Coastguard Worker---
3596*7c356e86SAndroid Build Coastguard Workername: history-basic
3597*7c356e86SAndroid Build Coastguard Workerdescription:
3598*7c356e86SAndroid Build Coastguard Worker	See if we can test history at all
3599*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3600*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3601*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3602*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3603*7c356e86SAndroid Build Coastguard Worker	PS1=X
3604*7c356e86SAndroid Build Coastguard Workerstdin:
3605*7c356e86SAndroid Build Coastguard Worker	echo hi
3606*7c356e86SAndroid Build Coastguard Worker	fc -l
3607*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3608*7c356e86SAndroid Build Coastguard Worker	hi
3609*7c356e86SAndroid Build Coastguard Worker	1	echo hi
3610*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3611*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3612*7c356e86SAndroid Build Coastguard Worker---
3613*7c356e86SAndroid Build Coastguard Workername: history-dups
3614*7c356e86SAndroid Build Coastguard Workerdescription:
3615*7c356e86SAndroid Build Coastguard Worker	Verify duplicates and spaces are not entered
3616*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3617*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3618*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3619*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3620*7c356e86SAndroid Build Coastguard Worker	PS1=X
3621*7c356e86SAndroid Build Coastguard Workerstdin:
3622*7c356e86SAndroid Build Coastguard Worker	echo hi
3623*7c356e86SAndroid Build Coastguard Worker	 echo yo
3624*7c356e86SAndroid Build Coastguard Worker	echo hi
3625*7c356e86SAndroid Build Coastguard Worker	fc -l
3626*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3627*7c356e86SAndroid Build Coastguard Worker	hi
3628*7c356e86SAndroid Build Coastguard Worker	yo
3629*7c356e86SAndroid Build Coastguard Worker	hi
3630*7c356e86SAndroid Build Coastguard Worker	1	echo hi
3631*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3632*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3633*7c356e86SAndroid Build Coastguard Worker---
3634*7c356e86SAndroid Build Coastguard Workername: history-unlink
3635*7c356e86SAndroid Build Coastguard Workerdescription:
3636*7c356e86SAndroid Build Coastguard Worker	Check if broken HISTFILEs do not cause trouble
3637*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3638*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3639*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=foo/hist.file!
3640*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3641*7c356e86SAndroid Build Coastguard Worker	PS1=X
3642*7c356e86SAndroid Build Coastguard Workerfile-setup: dir 755 "foo"
3643*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "foo/hist.file"
3644*7c356e86SAndroid Build Coastguard Worker	sometext
3645*7c356e86SAndroid Build Coastguard Workertime-limit: 5
3646*7c356e86SAndroid Build Coastguard Workerperl-setup: chmod(0555, "foo");
3647*7c356e86SAndroid Build Coastguard Workerstdin:
3648*7c356e86SAndroid Build Coastguard Worker	echo hi
3649*7c356e86SAndroid Build Coastguard Worker	fc -l
3650*7c356e86SAndroid Build Coastguard Worker	chmod 0755 foo
3651*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3652*7c356e86SAndroid Build Coastguard Worker	hi
3653*7c356e86SAndroid Build Coastguard Worker	1	echo hi
3654*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3655*7c356e86SAndroid Build Coastguard Worker	/(.*can't unlink HISTFILE.*\n)?X*$/
3656*7c356e86SAndroid Build Coastguard Worker---
3657*7c356e86SAndroid Build Coastguard Workername: history-multiline
3658*7c356e86SAndroid Build Coastguard Workerdescription:
3659*7c356e86SAndroid Build Coastguard Worker	Check correct multiline history, Debian #783978
3660*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3661*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3662*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!
3663*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3664*7c356e86SAndroid Build Coastguard Worker	PS1=X
3665*7c356e86SAndroid Build Coastguard Worker	PS2=Y
3666*7c356e86SAndroid Build Coastguard Workerstdin:
3667*7c356e86SAndroid Build Coastguard Worker	for i in A B C
3668*7c356e86SAndroid Build Coastguard Worker	do
3669*7c356e86SAndroid Build Coastguard Worker	   print $i
3670*7c356e86SAndroid Build Coastguard Worker	   print $i
3671*7c356e86SAndroid Build Coastguard Worker	done
3672*7c356e86SAndroid Build Coastguard Worker	fc -l
3673*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3674*7c356e86SAndroid Build Coastguard Worker	A
3675*7c356e86SAndroid Build Coastguard Worker	A
3676*7c356e86SAndroid Build Coastguard Worker	B
3677*7c356e86SAndroid Build Coastguard Worker	B
3678*7c356e86SAndroid Build Coastguard Worker	C
3679*7c356e86SAndroid Build Coastguard Worker	C
3680*7c356e86SAndroid Build Coastguard Worker	1	for i in A B C
3681*7c356e86SAndroid Build Coastguard Worker		do
3682*7c356e86SAndroid Build Coastguard Worker		   print $i
3683*7c356e86SAndroid Build Coastguard Worker		   print $i
3684*7c356e86SAndroid Build Coastguard Worker		done
3685*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3686*7c356e86SAndroid Build Coastguard Worker	/^XYYYYXX$/
3687*7c356e86SAndroid Build Coastguard Worker---
3688*7c356e86SAndroid Build Coastguard Workername: history-e-minus-1
3689*7c356e86SAndroid Build Coastguard Workerdescription:
3690*7c356e86SAndroid Build Coastguard Worker	Check if more recent command is executed
3691*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3692*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3693*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3694*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3695*7c356e86SAndroid Build Coastguard Worker	PS1=X
3696*7c356e86SAndroid Build Coastguard Workerstdin:
3697*7c356e86SAndroid Build Coastguard Worker	echo hi
3698*7c356e86SAndroid Build Coastguard Worker	echo there
3699*7c356e86SAndroid Build Coastguard Worker	fc -e -
3700*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3701*7c356e86SAndroid Build Coastguard Worker	hi
3702*7c356e86SAndroid Build Coastguard Worker	there
3703*7c356e86SAndroid Build Coastguard Worker	there
3704*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3705*7c356e86SAndroid Build Coastguard Worker	/^X*echo there\nX*$/
3706*7c356e86SAndroid Build Coastguard Worker---
3707*7c356e86SAndroid Build Coastguard Workername: history-e-minus-2
3708*7c356e86SAndroid Build Coastguard Workerdescription:
3709*7c356e86SAndroid Build Coastguard Worker	Check that repeated command is printed before command
3710*7c356e86SAndroid Build Coastguard Worker	is re-executed.
3711*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3712*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3713*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3714*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3715*7c356e86SAndroid Build Coastguard Worker	PS1=X
3716*7c356e86SAndroid Build Coastguard Workerstdin:
3717*7c356e86SAndroid Build Coastguard Worker	exec 2>&1
3718*7c356e86SAndroid Build Coastguard Worker	echo hi
3719*7c356e86SAndroid Build Coastguard Worker	echo there
3720*7c356e86SAndroid Build Coastguard Worker	fc -e -
3721*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern:
3722*7c356e86SAndroid Build Coastguard Worker	/X*hi\nX*there\nX*echo there\nthere\nX*/
3723*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3724*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3725*7c356e86SAndroid Build Coastguard Worker---
3726*7c356e86SAndroid Build Coastguard Workername: history-e-minus-3
3727*7c356e86SAndroid Build Coastguard Workerdescription:
3728*7c356e86SAndroid Build Coastguard Worker	fc -e - fails when there is no history
3729*7c356e86SAndroid Build Coastguard Worker	(ksh93 has a bug that causes this to fail)
3730*7c356e86SAndroid Build Coastguard Worker	(ksh88 loops on this)
3731*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3732*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3733*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3734*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3735*7c356e86SAndroid Build Coastguard Worker	PS1=X
3736*7c356e86SAndroid Build Coastguard Workerstdin:
3737*7c356e86SAndroid Build Coastguard Worker	fc -e -
3738*7c356e86SAndroid Build Coastguard Worker	echo ok
3739*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3740*7c356e86SAndroid Build Coastguard Worker	ok
3741*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3742*7c356e86SAndroid Build Coastguard Worker	/^X*.*:.*history.*\nX*$/
3743*7c356e86SAndroid Build Coastguard Worker---
3744*7c356e86SAndroid Build Coastguard Workername: history-e-minus-4
3745*7c356e86SAndroid Build Coastguard Workerdescription:
3746*7c356e86SAndroid Build Coastguard Worker	Check if "fc -e -" command output goes to stdout.
3747*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3748*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3749*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3750*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3751*7c356e86SAndroid Build Coastguard Worker	PS1=X
3752*7c356e86SAndroid Build Coastguard Workerstdin:
3753*7c356e86SAndroid Build Coastguard Worker	echo abc
3754*7c356e86SAndroid Build Coastguard Worker	fc -e - | (read x; echo "A $x")
3755*7c356e86SAndroid Build Coastguard Worker	echo ok
3756*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3757*7c356e86SAndroid Build Coastguard Worker	abc
3758*7c356e86SAndroid Build Coastguard Worker	A abc
3759*7c356e86SAndroid Build Coastguard Worker	ok
3760*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3761*7c356e86SAndroid Build Coastguard Worker	/^X*echo abc\nX*/
3762*7c356e86SAndroid Build Coastguard Worker---
3763*7c356e86SAndroid Build Coastguard Workername: history-e-minus-5
3764*7c356e86SAndroid Build Coastguard Workerdescription:
3765*7c356e86SAndroid Build Coastguard Worker	fc is replaced in history by new command.
3766*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3767*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3768*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3769*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3770*7c356e86SAndroid Build Coastguard Worker	PS1=X
3771*7c356e86SAndroid Build Coastguard Workerstdin:
3772*7c356e86SAndroid Build Coastguard Worker	echo abc def
3773*7c356e86SAndroid Build Coastguard Worker	echo ghi jkl
3774*7c356e86SAndroid Build Coastguard Worker	:
3775*7c356e86SAndroid Build Coastguard Worker	fc -e - echo
3776*7c356e86SAndroid Build Coastguard Worker	fc -l 2 5
3777*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3778*7c356e86SAndroid Build Coastguard Worker	abc def
3779*7c356e86SAndroid Build Coastguard Worker	ghi jkl
3780*7c356e86SAndroid Build Coastguard Worker	ghi jkl
3781*7c356e86SAndroid Build Coastguard Worker	2	echo ghi jkl
3782*7c356e86SAndroid Build Coastguard Worker	3	:
3783*7c356e86SAndroid Build Coastguard Worker	4	echo ghi jkl
3784*7c356e86SAndroid Build Coastguard Worker	5	fc -l 2 5
3785*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3786*7c356e86SAndroid Build Coastguard Worker	/^X*echo ghi jkl\nX*$/
3787*7c356e86SAndroid Build Coastguard Worker---
3788*7c356e86SAndroid Build Coastguard Workername: history-list-1
3789*7c356e86SAndroid Build Coastguard Workerdescription:
3790*7c356e86SAndroid Build Coastguard Worker	List lists correct range
3791*7c356e86SAndroid Build Coastguard Worker	(ksh88 fails 'cause it lists the fc command)
3792*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3793*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3794*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3795*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3796*7c356e86SAndroid Build Coastguard Worker	PS1=X
3797*7c356e86SAndroid Build Coastguard Workerstdin:
3798*7c356e86SAndroid Build Coastguard Worker	echo line 1
3799*7c356e86SAndroid Build Coastguard Worker	echo line 2
3800*7c356e86SAndroid Build Coastguard Worker	echo line 3
3801*7c356e86SAndroid Build Coastguard Worker	fc -l -- -2
3802*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3803*7c356e86SAndroid Build Coastguard Worker	line 1
3804*7c356e86SAndroid Build Coastguard Worker	line 2
3805*7c356e86SAndroid Build Coastguard Worker	line 3
3806*7c356e86SAndroid Build Coastguard Worker	2	echo line 2
3807*7c356e86SAndroid Build Coastguard Worker	3	echo line 3
3808*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3809*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3810*7c356e86SAndroid Build Coastguard Worker---
3811*7c356e86SAndroid Build Coastguard Workername: history-list-2
3812*7c356e86SAndroid Build Coastguard Workerdescription:
3813*7c356e86SAndroid Build Coastguard Worker	Lists oldest history if given pre-historic number
3814*7c356e86SAndroid Build Coastguard Worker	(ksh93 has a bug that causes this to fail)
3815*7c356e86SAndroid Build Coastguard Worker	(ksh88 fails 'cause it lists the fc command)
3816*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3817*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3818*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3819*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3820*7c356e86SAndroid Build Coastguard Worker	PS1=X
3821*7c356e86SAndroid Build Coastguard Workerstdin:
3822*7c356e86SAndroid Build Coastguard Worker	echo line 1
3823*7c356e86SAndroid Build Coastguard Worker	echo line 2
3824*7c356e86SAndroid Build Coastguard Worker	echo line 3
3825*7c356e86SAndroid Build Coastguard Worker	fc -l -- -40
3826*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3827*7c356e86SAndroid Build Coastguard Worker	line 1
3828*7c356e86SAndroid Build Coastguard Worker	line 2
3829*7c356e86SAndroid Build Coastguard Worker	line 3
3830*7c356e86SAndroid Build Coastguard Worker	1	echo line 1
3831*7c356e86SAndroid Build Coastguard Worker	2	echo line 2
3832*7c356e86SAndroid Build Coastguard Worker	3	echo line 3
3833*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3834*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3835*7c356e86SAndroid Build Coastguard Worker---
3836*7c356e86SAndroid Build Coastguard Workername: history-list-3
3837*7c356e86SAndroid Build Coastguard Workerdescription:
3838*7c356e86SAndroid Build Coastguard Worker	Can give number 'options' to fc
3839*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3840*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3841*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3842*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3843*7c356e86SAndroid Build Coastguard Worker	PS1=X
3844*7c356e86SAndroid Build Coastguard Workerstdin:
3845*7c356e86SAndroid Build Coastguard Worker	echo line 1
3846*7c356e86SAndroid Build Coastguard Worker	echo line 2
3847*7c356e86SAndroid Build Coastguard Worker	echo line 3
3848*7c356e86SAndroid Build Coastguard Worker	echo line 4
3849*7c356e86SAndroid Build Coastguard Worker	fc -l -3 -2
3850*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3851*7c356e86SAndroid Build Coastguard Worker	line 1
3852*7c356e86SAndroid Build Coastguard Worker	line 2
3853*7c356e86SAndroid Build Coastguard Worker	line 3
3854*7c356e86SAndroid Build Coastguard Worker	line 4
3855*7c356e86SAndroid Build Coastguard Worker	2	echo line 2
3856*7c356e86SAndroid Build Coastguard Worker	3	echo line 3
3857*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3858*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3859*7c356e86SAndroid Build Coastguard Worker---
3860*7c356e86SAndroid Build Coastguard Workername: history-list-4
3861*7c356e86SAndroid Build Coastguard Workerdescription:
3862*7c356e86SAndroid Build Coastguard Worker	-1 refers to previous command
3863*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3864*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3865*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3866*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3867*7c356e86SAndroid Build Coastguard Worker	PS1=X
3868*7c356e86SAndroid Build Coastguard Workerstdin:
3869*7c356e86SAndroid Build Coastguard Worker	echo line 1
3870*7c356e86SAndroid Build Coastguard Worker	echo line 2
3871*7c356e86SAndroid Build Coastguard Worker	echo line 3
3872*7c356e86SAndroid Build Coastguard Worker	echo line 4
3873*7c356e86SAndroid Build Coastguard Worker	fc -l -1 -1
3874*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3875*7c356e86SAndroid Build Coastguard Worker	line 1
3876*7c356e86SAndroid Build Coastguard Worker	line 2
3877*7c356e86SAndroid Build Coastguard Worker	line 3
3878*7c356e86SAndroid Build Coastguard Worker	line 4
3879*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
3880*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3881*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3882*7c356e86SAndroid Build Coastguard Worker---
3883*7c356e86SAndroid Build Coastguard Workername: history-list-5
3884*7c356e86SAndroid Build Coastguard Workerdescription:
3885*7c356e86SAndroid Build Coastguard Worker	List command stays in history
3886*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3887*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3888*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3889*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3890*7c356e86SAndroid Build Coastguard Worker	PS1=X
3891*7c356e86SAndroid Build Coastguard Workerstdin:
3892*7c356e86SAndroid Build Coastguard Worker	echo line 1
3893*7c356e86SAndroid Build Coastguard Worker	echo line 2
3894*7c356e86SAndroid Build Coastguard Worker	echo line 3
3895*7c356e86SAndroid Build Coastguard Worker	echo line 4
3896*7c356e86SAndroid Build Coastguard Worker	fc -l -1 -1
3897*7c356e86SAndroid Build Coastguard Worker	fc -l -2 -1
3898*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3899*7c356e86SAndroid Build Coastguard Worker	line 1
3900*7c356e86SAndroid Build Coastguard Worker	line 2
3901*7c356e86SAndroid Build Coastguard Worker	line 3
3902*7c356e86SAndroid Build Coastguard Worker	line 4
3903*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
3904*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
3905*7c356e86SAndroid Build Coastguard Worker	5	fc -l -1 -1
3906*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3907*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3908*7c356e86SAndroid Build Coastguard Worker---
3909*7c356e86SAndroid Build Coastguard Workername: history-list-6
3910*7c356e86SAndroid Build Coastguard Workerdescription:
3911*7c356e86SAndroid Build Coastguard Worker	HISTSIZE limits about of history kept.
3912*7c356e86SAndroid Build Coastguard Worker	(ksh88 fails 'cause it lists the fc command)
3913*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3914*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3915*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!HISTSIZE=3!
3916*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3917*7c356e86SAndroid Build Coastguard Worker	PS1=X
3918*7c356e86SAndroid Build Coastguard Workerstdin:
3919*7c356e86SAndroid Build Coastguard Worker	echo line 1
3920*7c356e86SAndroid Build Coastguard Worker	echo line 2
3921*7c356e86SAndroid Build Coastguard Worker	echo line 3
3922*7c356e86SAndroid Build Coastguard Worker	echo line 4
3923*7c356e86SAndroid Build Coastguard Worker	echo line 5
3924*7c356e86SAndroid Build Coastguard Worker	fc -l
3925*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3926*7c356e86SAndroid Build Coastguard Worker	line 1
3927*7c356e86SAndroid Build Coastguard Worker	line 2
3928*7c356e86SAndroid Build Coastguard Worker	line 3
3929*7c356e86SAndroid Build Coastguard Worker	line 4
3930*7c356e86SAndroid Build Coastguard Worker	line 5
3931*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
3932*7c356e86SAndroid Build Coastguard Worker	5	echo line 5
3933*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3934*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3935*7c356e86SAndroid Build Coastguard Worker---
3936*7c356e86SAndroid Build Coastguard Workername: history-list-7
3937*7c356e86SAndroid Build Coastguard Workerdescription:
3938*7c356e86SAndroid Build Coastguard Worker	fc allows too old/new errors in range specification
3939*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3940*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3941*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!HISTSIZE=3!
3942*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3943*7c356e86SAndroid Build Coastguard Worker	PS1=X
3944*7c356e86SAndroid Build Coastguard Workerstdin:
3945*7c356e86SAndroid Build Coastguard Worker	echo line 1
3946*7c356e86SAndroid Build Coastguard Worker	echo line 2
3947*7c356e86SAndroid Build Coastguard Worker	echo line 3
3948*7c356e86SAndroid Build Coastguard Worker	echo line 4
3949*7c356e86SAndroid Build Coastguard Worker	echo line 5
3950*7c356e86SAndroid Build Coastguard Worker	fc -l 1 30
3951*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3952*7c356e86SAndroid Build Coastguard Worker	line 1
3953*7c356e86SAndroid Build Coastguard Worker	line 2
3954*7c356e86SAndroid Build Coastguard Worker	line 3
3955*7c356e86SAndroid Build Coastguard Worker	line 4
3956*7c356e86SAndroid Build Coastguard Worker	line 5
3957*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
3958*7c356e86SAndroid Build Coastguard Worker	5	echo line 5
3959*7c356e86SAndroid Build Coastguard Worker	6	fc -l 1 30
3960*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3961*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3962*7c356e86SAndroid Build Coastguard Worker---
3963*7c356e86SAndroid Build Coastguard Workername: history-list-r-1
3964*7c356e86SAndroid Build Coastguard Workerdescription:
3965*7c356e86SAndroid Build Coastguard Worker	test -r flag in history
3966*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3967*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3968*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3969*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3970*7c356e86SAndroid Build Coastguard Worker	PS1=X
3971*7c356e86SAndroid Build Coastguard Workerstdin:
3972*7c356e86SAndroid Build Coastguard Worker	echo line 1
3973*7c356e86SAndroid Build Coastguard Worker	echo line 2
3974*7c356e86SAndroid Build Coastguard Worker	echo line 3
3975*7c356e86SAndroid Build Coastguard Worker	echo line 4
3976*7c356e86SAndroid Build Coastguard Worker	echo line 5
3977*7c356e86SAndroid Build Coastguard Worker	fc -l -r 2 4
3978*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
3979*7c356e86SAndroid Build Coastguard Worker	line 1
3980*7c356e86SAndroid Build Coastguard Worker	line 2
3981*7c356e86SAndroid Build Coastguard Worker	line 3
3982*7c356e86SAndroid Build Coastguard Worker	line 4
3983*7c356e86SAndroid Build Coastguard Worker	line 5
3984*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
3985*7c356e86SAndroid Build Coastguard Worker	3	echo line 3
3986*7c356e86SAndroid Build Coastguard Worker	2	echo line 2
3987*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
3988*7c356e86SAndroid Build Coastguard Worker	/^X*$/
3989*7c356e86SAndroid Build Coastguard Worker---
3990*7c356e86SAndroid Build Coastguard Workername: history-list-r-2
3991*7c356e86SAndroid Build Coastguard Workerdescription:
3992*7c356e86SAndroid Build Coastguard Worker	If first is newer than last, -r is implied.
3993*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
3994*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
3995*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
3996*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
3997*7c356e86SAndroid Build Coastguard Worker	PS1=X
3998*7c356e86SAndroid Build Coastguard Workerstdin:
3999*7c356e86SAndroid Build Coastguard Worker	echo line 1
4000*7c356e86SAndroid Build Coastguard Worker	echo line 2
4001*7c356e86SAndroid Build Coastguard Worker	echo line 3
4002*7c356e86SAndroid Build Coastguard Worker	echo line 4
4003*7c356e86SAndroid Build Coastguard Worker	echo line 5
4004*7c356e86SAndroid Build Coastguard Worker	fc -l 4 2
4005*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4006*7c356e86SAndroid Build Coastguard Worker	line 1
4007*7c356e86SAndroid Build Coastguard Worker	line 2
4008*7c356e86SAndroid Build Coastguard Worker	line 3
4009*7c356e86SAndroid Build Coastguard Worker	line 4
4010*7c356e86SAndroid Build Coastguard Worker	line 5
4011*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
4012*7c356e86SAndroid Build Coastguard Worker	3	echo line 3
4013*7c356e86SAndroid Build Coastguard Worker	2	echo line 2
4014*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4015*7c356e86SAndroid Build Coastguard Worker	/^X*$/
4016*7c356e86SAndroid Build Coastguard Worker---
4017*7c356e86SAndroid Build Coastguard Workername: history-list-r-3
4018*7c356e86SAndroid Build Coastguard Workerdescription:
4019*7c356e86SAndroid Build Coastguard Worker	If first is newer than last, -r is cancelled.
4020*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4021*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4022*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4023*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4024*7c356e86SAndroid Build Coastguard Worker	PS1=X
4025*7c356e86SAndroid Build Coastguard Workerstdin:
4026*7c356e86SAndroid Build Coastguard Worker	echo line 1
4027*7c356e86SAndroid Build Coastguard Worker	echo line 2
4028*7c356e86SAndroid Build Coastguard Worker	echo line 3
4029*7c356e86SAndroid Build Coastguard Worker	echo line 4
4030*7c356e86SAndroid Build Coastguard Worker	echo line 5
4031*7c356e86SAndroid Build Coastguard Worker	fc -l -r 4 2
4032*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4033*7c356e86SAndroid Build Coastguard Worker	line 1
4034*7c356e86SAndroid Build Coastguard Worker	line 2
4035*7c356e86SAndroid Build Coastguard Worker	line 3
4036*7c356e86SAndroid Build Coastguard Worker	line 4
4037*7c356e86SAndroid Build Coastguard Worker	line 5
4038*7c356e86SAndroid Build Coastguard Worker	2	echo line 2
4039*7c356e86SAndroid Build Coastguard Worker	3	echo line 3
4040*7c356e86SAndroid Build Coastguard Worker	4	echo line 4
4041*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4042*7c356e86SAndroid Build Coastguard Worker	/^X*$/
4043*7c356e86SAndroid Build Coastguard Worker---
4044*7c356e86SAndroid Build Coastguard Workername: history-subst-1
4045*7c356e86SAndroid Build Coastguard Workerdescription:
4046*7c356e86SAndroid Build Coastguard Worker	Basic substitution
4047*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4048*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4049*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4050*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4051*7c356e86SAndroid Build Coastguard Worker	PS1=X
4052*7c356e86SAndroid Build Coastguard Workerstdin:
4053*7c356e86SAndroid Build Coastguard Worker	echo abc def
4054*7c356e86SAndroid Build Coastguard Worker	echo ghi jkl
4055*7c356e86SAndroid Build Coastguard Worker	fc -e - abc=AB 'echo a'
4056*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4057*7c356e86SAndroid Build Coastguard Worker	abc def
4058*7c356e86SAndroid Build Coastguard Worker	ghi jkl
4059*7c356e86SAndroid Build Coastguard Worker	AB def
4060*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4061*7c356e86SAndroid Build Coastguard Worker	/^X*echo AB def\nX*$/
4062*7c356e86SAndroid Build Coastguard Worker---
4063*7c356e86SAndroid Build Coastguard Workername: history-subst-2
4064*7c356e86SAndroid Build Coastguard Workerdescription:
4065*7c356e86SAndroid Build Coastguard Worker	Does subst find previous command?
4066*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4067*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4068*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4069*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4070*7c356e86SAndroid Build Coastguard Worker	PS1=X
4071*7c356e86SAndroid Build Coastguard Workerstdin:
4072*7c356e86SAndroid Build Coastguard Worker	echo abc def
4073*7c356e86SAndroid Build Coastguard Worker	echo ghi jkl
4074*7c356e86SAndroid Build Coastguard Worker	fc -e - jkl=XYZQRT 'echo g'
4075*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4076*7c356e86SAndroid Build Coastguard Worker	abc def
4077*7c356e86SAndroid Build Coastguard Worker	ghi jkl
4078*7c356e86SAndroid Build Coastguard Worker	ghi XYZQRT
4079*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4080*7c356e86SAndroid Build Coastguard Worker	/^X*echo ghi XYZQRT\nX*$/
4081*7c356e86SAndroid Build Coastguard Worker---
4082*7c356e86SAndroid Build Coastguard Workername: history-subst-3
4083*7c356e86SAndroid Build Coastguard Workerdescription:
4084*7c356e86SAndroid Build Coastguard Worker	Does subst find previous command when no arguments given
4085*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4086*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4087*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4088*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4089*7c356e86SAndroid Build Coastguard Worker	PS1=X
4090*7c356e86SAndroid Build Coastguard Workerstdin:
4091*7c356e86SAndroid Build Coastguard Worker	echo abc def
4092*7c356e86SAndroid Build Coastguard Worker	echo ghi jkl
4093*7c356e86SAndroid Build Coastguard Worker	fc -e - jkl=XYZQRT
4094*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4095*7c356e86SAndroid Build Coastguard Worker	abc def
4096*7c356e86SAndroid Build Coastguard Worker	ghi jkl
4097*7c356e86SAndroid Build Coastguard Worker	ghi XYZQRT
4098*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4099*7c356e86SAndroid Build Coastguard Worker	/^X*echo ghi XYZQRT\nX*$/
4100*7c356e86SAndroid Build Coastguard Worker---
4101*7c356e86SAndroid Build Coastguard Workername: history-subst-4
4102*7c356e86SAndroid Build Coastguard Workerdescription:
4103*7c356e86SAndroid Build Coastguard Worker	Global substitutions work
4104*7c356e86SAndroid Build Coastguard Worker	(ksh88 and ksh93 do not have -g option)
4105*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4106*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4107*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4108*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4109*7c356e86SAndroid Build Coastguard Worker	PS1=X
4110*7c356e86SAndroid Build Coastguard Workerstdin:
4111*7c356e86SAndroid Build Coastguard Worker	echo abc def asjj sadjhasdjh asdjhasd
4112*7c356e86SAndroid Build Coastguard Worker	fc -e - -g a=FooBAR
4113*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4114*7c356e86SAndroid Build Coastguard Worker	abc def asjj sadjhasdjh asdjhasd
4115*7c356e86SAndroid Build Coastguard Worker	FooBARbc def FooBARsjj sFooBARdjhFooBARsdjh FooBARsdjhFooBARsd
4116*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4117*7c356e86SAndroid Build Coastguard Worker	/^X*echo FooBARbc def FooBARsjj sFooBARdjhFooBARsdjh FooBARsdjhFooBARsd\nX*$/
4118*7c356e86SAndroid Build Coastguard Worker---
4119*7c356e86SAndroid Build Coastguard Workername: history-subst-5
4120*7c356e86SAndroid Build Coastguard Workerdescription:
4121*7c356e86SAndroid Build Coastguard Worker	Make sure searches don't find current (fc) command
4122*7c356e86SAndroid Build Coastguard Worker	(ksh88/ksh93 don't have the ? prefix thing so they fail this test)
4123*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4124*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4125*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4126*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4127*7c356e86SAndroid Build Coastguard Worker	PS1=X
4128*7c356e86SAndroid Build Coastguard Workerstdin:
4129*7c356e86SAndroid Build Coastguard Worker	echo abc def
4130*7c356e86SAndroid Build Coastguard Worker	echo ghi jkl
4131*7c356e86SAndroid Build Coastguard Worker	fc -e - abc=AB \?abc
4132*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4133*7c356e86SAndroid Build Coastguard Worker	abc def
4134*7c356e86SAndroid Build Coastguard Worker	ghi jkl
4135*7c356e86SAndroid Build Coastguard Worker	AB def
4136*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4137*7c356e86SAndroid Build Coastguard Worker	/^X*echo AB def\nX*$/
4138*7c356e86SAndroid Build Coastguard Worker---
4139*7c356e86SAndroid Build Coastguard Workername: history-ed-1-old
4140*7c356e86SAndroid Build Coastguard Workerdescription:
4141*7c356e86SAndroid Build Coastguard Worker	Basic (ed) editing works (assumes you have generic ed editor
4142*7c356e86SAndroid Build Coastguard Worker	that prints no prompts). This is for oldish ed(1) which write
4143*7c356e86SAndroid Build Coastguard Worker	the character count to stdout.
4144*7c356e86SAndroid Build Coastguard Workercategory: stdout-ed
4145*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4146*7c356e86SAndroid Build Coastguard Workerneed-pass: no
4147*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4148*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4149*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4150*7c356e86SAndroid Build Coastguard Worker	PS1=X
4151*7c356e86SAndroid Build Coastguard Workerstdin:
4152*7c356e86SAndroid Build Coastguard Worker	echo abc def
4153*7c356e86SAndroid Build Coastguard Worker	fc echo
4154*7c356e86SAndroid Build Coastguard Worker	s/abc/FOOBAR/
4155*7c356e86SAndroid Build Coastguard Worker	w
4156*7c356e86SAndroid Build Coastguard Worker	q
4157*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4158*7c356e86SAndroid Build Coastguard Worker	abc def
4159*7c356e86SAndroid Build Coastguard Worker	13
4160*7c356e86SAndroid Build Coastguard Worker	16
4161*7c356e86SAndroid Build Coastguard Worker	FOOBAR def
4162*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4163*7c356e86SAndroid Build Coastguard Worker	/^X*echo FOOBAR def\nX*$/
4164*7c356e86SAndroid Build Coastguard Worker---
4165*7c356e86SAndroid Build Coastguard Workername: history-ed-2-old
4166*7c356e86SAndroid Build Coastguard Workerdescription:
4167*7c356e86SAndroid Build Coastguard Worker	Correct command is edited when number given
4168*7c356e86SAndroid Build Coastguard Workercategory: stdout-ed
4169*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4170*7c356e86SAndroid Build Coastguard Workerneed-pass: no
4171*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4172*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4173*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4174*7c356e86SAndroid Build Coastguard Worker	PS1=X
4175*7c356e86SAndroid Build Coastguard Workerstdin:
4176*7c356e86SAndroid Build Coastguard Worker	echo line 1
4177*7c356e86SAndroid Build Coastguard Worker	echo line 2 is here
4178*7c356e86SAndroid Build Coastguard Worker	echo line 3
4179*7c356e86SAndroid Build Coastguard Worker	echo line 4
4180*7c356e86SAndroid Build Coastguard Worker	fc 2
4181*7c356e86SAndroid Build Coastguard Worker	s/is here/is changed/
4182*7c356e86SAndroid Build Coastguard Worker	w
4183*7c356e86SAndroid Build Coastguard Worker	q
4184*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4185*7c356e86SAndroid Build Coastguard Worker	line 1
4186*7c356e86SAndroid Build Coastguard Worker	line 2 is here
4187*7c356e86SAndroid Build Coastguard Worker	line 3
4188*7c356e86SAndroid Build Coastguard Worker	line 4
4189*7c356e86SAndroid Build Coastguard Worker	20
4190*7c356e86SAndroid Build Coastguard Worker	23
4191*7c356e86SAndroid Build Coastguard Worker	line 2 is changed
4192*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4193*7c356e86SAndroid Build Coastguard Worker	/^X*echo line 2 is changed\nX*$/
4194*7c356e86SAndroid Build Coastguard Worker---
4195*7c356e86SAndroid Build Coastguard Workername: history-ed-3-old
4196*7c356e86SAndroid Build Coastguard Workerdescription:
4197*7c356e86SAndroid Build Coastguard Worker	Newly created multi line commands show up as single command
4198*7c356e86SAndroid Build Coastguard Worker	in history.
4199*7c356e86SAndroid Build Coastguard Worker	(ksh88 fails 'cause it lists the fc command)
4200*7c356e86SAndroid Build Coastguard Workercategory: stdout-ed
4201*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4202*7c356e86SAndroid Build Coastguard Workerneed-pass: no
4203*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4204*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4205*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4206*7c356e86SAndroid Build Coastguard Worker	PS1=X
4207*7c356e86SAndroid Build Coastguard Workerstdin:
4208*7c356e86SAndroid Build Coastguard Worker	echo abc def
4209*7c356e86SAndroid Build Coastguard Worker	fc echo
4210*7c356e86SAndroid Build Coastguard Worker	s/abc/FOOBAR/
4211*7c356e86SAndroid Build Coastguard Worker	$a
4212*7c356e86SAndroid Build Coastguard Worker	echo a new line
4213*7c356e86SAndroid Build Coastguard Worker	.
4214*7c356e86SAndroid Build Coastguard Worker	w
4215*7c356e86SAndroid Build Coastguard Worker	q
4216*7c356e86SAndroid Build Coastguard Worker	fc -l
4217*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4218*7c356e86SAndroid Build Coastguard Worker	abc def
4219*7c356e86SAndroid Build Coastguard Worker	13
4220*7c356e86SAndroid Build Coastguard Worker	32
4221*7c356e86SAndroid Build Coastguard Worker	FOOBAR def
4222*7c356e86SAndroid Build Coastguard Worker	a new line
4223*7c356e86SAndroid Build Coastguard Worker	1	echo abc def
4224*7c356e86SAndroid Build Coastguard Worker	2	echo FOOBAR def
4225*7c356e86SAndroid Build Coastguard Worker		echo a new line
4226*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4227*7c356e86SAndroid Build Coastguard Worker	/^X*echo FOOBAR def\necho a new line\nX*$/
4228*7c356e86SAndroid Build Coastguard Worker---
4229*7c356e86SAndroid Build Coastguard Workername: history-ed-1
4230*7c356e86SAndroid Build Coastguard Workerdescription:
4231*7c356e86SAndroid Build Coastguard Worker	Basic (ed) editing works (assumes you have generic ed editor
4232*7c356e86SAndroid Build Coastguard Worker	that prints no prompts). This is for newish ed(1) and stderr.
4233*7c356e86SAndroid Build Coastguard Workercategory: !no-stderr-ed
4234*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4235*7c356e86SAndroid Build Coastguard Workerneed-pass: no
4236*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4237*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4238*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4239*7c356e86SAndroid Build Coastguard Worker	PS1=X
4240*7c356e86SAndroid Build Coastguard Workerstdin:
4241*7c356e86SAndroid Build Coastguard Worker	echo abc def
4242*7c356e86SAndroid Build Coastguard Worker	fc echo
4243*7c356e86SAndroid Build Coastguard Worker	s/abc/FOOBAR/
4244*7c356e86SAndroid Build Coastguard Worker	w
4245*7c356e86SAndroid Build Coastguard Worker	q
4246*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4247*7c356e86SAndroid Build Coastguard Worker	abc def
4248*7c356e86SAndroid Build Coastguard Worker	FOOBAR def
4249*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4250*7c356e86SAndroid Build Coastguard Worker	/^X*13\n16\necho FOOBAR def\nX*$/
4251*7c356e86SAndroid Build Coastguard Worker---
4252*7c356e86SAndroid Build Coastguard Workername: history-ed-2
4253*7c356e86SAndroid Build Coastguard Workerdescription:
4254*7c356e86SAndroid Build Coastguard Worker	Correct command is edited when number given
4255*7c356e86SAndroid Build Coastguard Workercategory: !no-stderr-ed
4256*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4257*7c356e86SAndroid Build Coastguard Workerneed-pass: no
4258*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4259*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4260*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4261*7c356e86SAndroid Build Coastguard Worker	PS1=X
4262*7c356e86SAndroid Build Coastguard Workerstdin:
4263*7c356e86SAndroid Build Coastguard Worker	echo line 1
4264*7c356e86SAndroid Build Coastguard Worker	echo line 2 is here
4265*7c356e86SAndroid Build Coastguard Worker	echo line 3
4266*7c356e86SAndroid Build Coastguard Worker	echo line 4
4267*7c356e86SAndroid Build Coastguard Worker	fc 2
4268*7c356e86SAndroid Build Coastguard Worker	s/is here/is changed/
4269*7c356e86SAndroid Build Coastguard Worker	w
4270*7c356e86SAndroid Build Coastguard Worker	q
4271*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4272*7c356e86SAndroid Build Coastguard Worker	line 1
4273*7c356e86SAndroid Build Coastguard Worker	line 2 is here
4274*7c356e86SAndroid Build Coastguard Worker	line 3
4275*7c356e86SAndroid Build Coastguard Worker	line 4
4276*7c356e86SAndroid Build Coastguard Worker	line 2 is changed
4277*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4278*7c356e86SAndroid Build Coastguard Worker	/^X*20\n23\necho line 2 is changed\nX*$/
4279*7c356e86SAndroid Build Coastguard Worker---
4280*7c356e86SAndroid Build Coastguard Workername: history-ed-3
4281*7c356e86SAndroid Build Coastguard Workerdescription:
4282*7c356e86SAndroid Build Coastguard Worker	Newly created multi line commands show up as single command
4283*7c356e86SAndroid Build Coastguard Worker	in history.
4284*7c356e86SAndroid Build Coastguard Workercategory: !no-stderr-ed
4285*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
4286*7c356e86SAndroid Build Coastguard Workerneed-pass: no
4287*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
4288*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
4289*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
4290*7c356e86SAndroid Build Coastguard Worker	PS1=X
4291*7c356e86SAndroid Build Coastguard Workerstdin:
4292*7c356e86SAndroid Build Coastguard Worker	echo abc def
4293*7c356e86SAndroid Build Coastguard Worker	fc echo
4294*7c356e86SAndroid Build Coastguard Worker	s/abc/FOOBAR/
4295*7c356e86SAndroid Build Coastguard Worker	$a
4296*7c356e86SAndroid Build Coastguard Worker	echo a new line
4297*7c356e86SAndroid Build Coastguard Worker	.
4298*7c356e86SAndroid Build Coastguard Worker	w
4299*7c356e86SAndroid Build Coastguard Worker	q
4300*7c356e86SAndroid Build Coastguard Worker	fc -l
4301*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4302*7c356e86SAndroid Build Coastguard Worker	abc def
4303*7c356e86SAndroid Build Coastguard Worker	FOOBAR def
4304*7c356e86SAndroid Build Coastguard Worker	a new line
4305*7c356e86SAndroid Build Coastguard Worker	1	echo abc def
4306*7c356e86SAndroid Build Coastguard Worker	2	echo FOOBAR def
4307*7c356e86SAndroid Build Coastguard Worker		echo a new line
4308*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4309*7c356e86SAndroid Build Coastguard Worker	/^X*13\n32\necho FOOBAR def\necho a new line\nX*$/
4310*7c356e86SAndroid Build Coastguard Worker---
4311*7c356e86SAndroid Build Coastguard Workername: IFS-space-1
4312*7c356e86SAndroid Build Coastguard Workerdescription:
4313*7c356e86SAndroid Build Coastguard Worker	Simple test, default IFS
4314*7c356e86SAndroid Build Coastguard Workerstdin:
4315*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4316*7c356e86SAndroid Build Coastguard Worker	set -- A B C
4317*7c356e86SAndroid Build Coastguard Worker	showargs 1 $*
4318*7c356e86SAndroid Build Coastguard Worker	showargs 2 "$*"
4319*7c356e86SAndroid Build Coastguard Worker	showargs 3 $@
4320*7c356e86SAndroid Build Coastguard Worker	showargs 4 "$@"
4321*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4322*7c356e86SAndroid Build Coastguard Worker	<1> <A> <B> <C> .
4323*7c356e86SAndroid Build Coastguard Worker	<2> <A B C> .
4324*7c356e86SAndroid Build Coastguard Worker	<3> <A> <B> <C> .
4325*7c356e86SAndroid Build Coastguard Worker	<4> <A> <B> <C> .
4326*7c356e86SAndroid Build Coastguard Worker---
4327*7c356e86SAndroid Build Coastguard Workername: IFS-colon-1
4328*7c356e86SAndroid Build Coastguard Workerdescription:
4329*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=:
4330*7c356e86SAndroid Build Coastguard Workerstdin:
4331*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4332*7c356e86SAndroid Build Coastguard Worker	IFS=:
4333*7c356e86SAndroid Build Coastguard Worker	set -- A B C
4334*7c356e86SAndroid Build Coastguard Worker	showargs 1 $*
4335*7c356e86SAndroid Build Coastguard Worker	showargs 2 "$*"
4336*7c356e86SAndroid Build Coastguard Worker	showargs 3 $@
4337*7c356e86SAndroid Build Coastguard Worker	showargs 4 "$@"
4338*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4339*7c356e86SAndroid Build Coastguard Worker	<1> <A> <B> <C> .
4340*7c356e86SAndroid Build Coastguard Worker	<2> <A:B:C> .
4341*7c356e86SAndroid Build Coastguard Worker	<3> <A> <B> <C> .
4342*7c356e86SAndroid Build Coastguard Worker	<4> <A> <B> <C> .
4343*7c356e86SAndroid Build Coastguard Worker---
4344*7c356e86SAndroid Build Coastguard Workername: IFS-null-1
4345*7c356e86SAndroid Build Coastguard Workerdescription:
4346*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=""
4347*7c356e86SAndroid Build Coastguard Workerstdin:
4348*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4349*7c356e86SAndroid Build Coastguard Worker	IFS=""
4350*7c356e86SAndroid Build Coastguard Worker	set -- A B C
4351*7c356e86SAndroid Build Coastguard Worker	showargs 1 $*
4352*7c356e86SAndroid Build Coastguard Worker	showargs 2 "$*"
4353*7c356e86SAndroid Build Coastguard Worker	showargs 3 $@
4354*7c356e86SAndroid Build Coastguard Worker	showargs 4 "$@"
4355*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4356*7c356e86SAndroid Build Coastguard Worker	<1> <A> <B> <C> .
4357*7c356e86SAndroid Build Coastguard Worker	<2> <ABC> .
4358*7c356e86SAndroid Build Coastguard Worker	<3> <A> <B> <C> .
4359*7c356e86SAndroid Build Coastguard Worker	<4> <A> <B> <C> .
4360*7c356e86SAndroid Build Coastguard Worker---
4361*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-1
4362*7c356e86SAndroid Build Coastguard Workerdescription:
4363*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=<white-space>:
4364*7c356e86SAndroid Build Coastguard Workerstdin:
4365*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4366*7c356e86SAndroid Build Coastguard Worker	IFS="$IFS:"
4367*7c356e86SAndroid Build Coastguard Worker	set --
4368*7c356e86SAndroid Build Coastguard Worker	showargs 1 $*
4369*7c356e86SAndroid Build Coastguard Worker	showargs 2 "$*"
4370*7c356e86SAndroid Build Coastguard Worker	showargs 3 $@
4371*7c356e86SAndroid Build Coastguard Worker	showargs 4 "$@"
4372*7c356e86SAndroid Build Coastguard Worker	showargs 5 : "$@"
4373*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4374*7c356e86SAndroid Build Coastguard Worker	<1> .
4375*7c356e86SAndroid Build Coastguard Worker	<2> <> .
4376*7c356e86SAndroid Build Coastguard Worker	<3> .
4377*7c356e86SAndroid Build Coastguard Worker	<4> .
4378*7c356e86SAndroid Build Coastguard Worker	<5> <:> .
4379*7c356e86SAndroid Build Coastguard Worker---
4380*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-2
4381*7c356e86SAndroid Build Coastguard Workerdescription:
4382*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=<white-space>:
4383*7c356e86SAndroid Build Coastguard Worker	AT&T ksh fails this, POSIX says the test is correct.
4384*7c356e86SAndroid Build Coastguard Workerstdin:
4385*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4386*7c356e86SAndroid Build Coastguard Worker	IFS="$IFS:"
4387*7c356e86SAndroid Build Coastguard Worker	set --
4388*7c356e86SAndroid Build Coastguard Worker	showargs :"$@"
4389*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4390*7c356e86SAndroid Build Coastguard Worker	<:> .
4391*7c356e86SAndroid Build Coastguard Worker---
4392*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-4
4393*7c356e86SAndroid Build Coastguard Workerdescription:
4394*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=<white-space>:
4395*7c356e86SAndroid Build Coastguard Workerstdin:
4396*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4397*7c356e86SAndroid Build Coastguard Worker	IFS="$IFS:"
4398*7c356e86SAndroid Build Coastguard Worker	set --
4399*7c356e86SAndroid Build Coastguard Worker	showargs "$@$@"
4400*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4401*7c356e86SAndroid Build Coastguard Worker	.
4402*7c356e86SAndroid Build Coastguard Worker---
4403*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-5
4404*7c356e86SAndroid Build Coastguard Workerdescription:
4405*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=<white-space>:
4406*7c356e86SAndroid Build Coastguard Worker	Don't know what POSIX thinks of this.  AT&T ksh does not do this.
4407*7c356e86SAndroid Build Coastguard Workerstdin:
4408*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4409*7c356e86SAndroid Build Coastguard Worker	IFS="$IFS:"
4410*7c356e86SAndroid Build Coastguard Worker	set --
4411*7c356e86SAndroid Build Coastguard Worker	showargs "${@:-}"
4412*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4413*7c356e86SAndroid Build Coastguard Worker	<> .
4414*7c356e86SAndroid Build Coastguard Worker---
4415*7c356e86SAndroid Build Coastguard Workername: IFS-subst-1
4416*7c356e86SAndroid Build Coastguard Workerdescription:
4417*7c356e86SAndroid Build Coastguard Worker	Simple test, IFS=<white-space>:
4418*7c356e86SAndroid Build Coastguard Workerstdin:
4419*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4420*7c356e86SAndroid Build Coastguard Worker	IFS="$IFS:"
4421*7c356e86SAndroid Build Coastguard Worker	x=":b: :"
4422*7c356e86SAndroid Build Coastguard Worker	echo -n '1:'; for i in $x ; do echo -n " [$i]" ; done ; echo
4423*7c356e86SAndroid Build Coastguard Worker	echo -n '2:'; for i in :b:: ; do echo -n " [$i]" ; done ; echo
4424*7c356e86SAndroid Build Coastguard Worker	showargs 3 $x
4425*7c356e86SAndroid Build Coastguard Worker	showargs 4 :b::
4426*7c356e86SAndroid Build Coastguard Worker	x="a:b:"
4427*7c356e86SAndroid Build Coastguard Worker	echo -n '5:'; for i in $x ; do echo -n " [$i]" ; done ; echo
4428*7c356e86SAndroid Build Coastguard Worker	showargs 6 $x
4429*7c356e86SAndroid Build Coastguard Worker	x="a::c"
4430*7c356e86SAndroid Build Coastguard Worker	echo -n '7:'; for i in $x ; do echo -n " [$i]" ; done ; echo
4431*7c356e86SAndroid Build Coastguard Worker	showargs 8 $x
4432*7c356e86SAndroid Build Coastguard Worker	echo -n '9:'; for i in ${FOO-`echo -n h:i`th:ere} ; do echo -n " [$i]" ; done ; echo
4433*7c356e86SAndroid Build Coastguard Worker	showargs 10 ${FOO-`echo -n h:i`th:ere}
4434*7c356e86SAndroid Build Coastguard Worker	showargs 11 "${FOO-`echo -n h:i`th:ere}"
4435*7c356e86SAndroid Build Coastguard Worker	x=" A :  B::D"
4436*7c356e86SAndroid Build Coastguard Worker	echo -n '12:'; for i in $x ; do echo -n " [$i]" ; done ; echo
4437*7c356e86SAndroid Build Coastguard Worker	showargs 13 $x
4438*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4439*7c356e86SAndroid Build Coastguard Worker	1: [] [b] []
4440*7c356e86SAndroid Build Coastguard Worker	2: [:b::]
4441*7c356e86SAndroid Build Coastguard Worker	<3> <> <b> <> .
4442*7c356e86SAndroid Build Coastguard Worker	<4> <:b::> .
4443*7c356e86SAndroid Build Coastguard Worker	5: [a] [b]
4444*7c356e86SAndroid Build Coastguard Worker	<6> <a> <b> .
4445*7c356e86SAndroid Build Coastguard Worker	7: [a] [] [c]
4446*7c356e86SAndroid Build Coastguard Worker	<8> <a> <> <c> .
4447*7c356e86SAndroid Build Coastguard Worker	9: [h] [ith] [ere]
4448*7c356e86SAndroid Build Coastguard Worker	<10> <h> <ith> <ere> .
4449*7c356e86SAndroid Build Coastguard Worker	<11> <h:ith:ere> .
4450*7c356e86SAndroid Build Coastguard Worker	12: [A] [B] [] [D]
4451*7c356e86SAndroid Build Coastguard Worker	<13> <A> <B> <> <D> .
4452*7c356e86SAndroid Build Coastguard Worker---
4453*7c356e86SAndroid Build Coastguard Workername: IFS-subst-2
4454*7c356e86SAndroid Build Coastguard Workerdescription:
4455*7c356e86SAndroid Build Coastguard Worker	Check leading whitespace after trim does not make a field
4456*7c356e86SAndroid Build Coastguard Workerstdin:
4457*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4458*7c356e86SAndroid Build Coastguard Worker	x="X 1 2"
4459*7c356e86SAndroid Build Coastguard Worker	showargs 1 shift ${x#X}
4460*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4461*7c356e86SAndroid Build Coastguard Worker	<1> <shift> <1> <2> .
4462*7c356e86SAndroid Build Coastguard Worker---
4463*7c356e86SAndroid Build Coastguard Workername: IFS-subst-3-arr
4464*7c356e86SAndroid Build Coastguard Workerdescription:
4465*7c356e86SAndroid Build Coastguard Worker	Check leading IFS non-whitespace after trim does make a field
4466*7c356e86SAndroid Build Coastguard Worker	but leading IFS whitespace does not, nor empty replacements
4467*7c356e86SAndroid Build Coastguard Workerstdin:
4468*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4469*7c356e86SAndroid Build Coastguard Worker	showargs 0 ${-+}
4470*7c356e86SAndroid Build Coastguard Worker	IFS=:
4471*7c356e86SAndroid Build Coastguard Worker	showargs 1 ${-+:foo:bar}
4472*7c356e86SAndroid Build Coastguard Worker	IFS=' '
4473*7c356e86SAndroid Build Coastguard Worker	showargs 2 ${-+ foo bar}
4474*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4475*7c356e86SAndroid Build Coastguard Worker	<0> .
4476*7c356e86SAndroid Build Coastguard Worker	<1> <> <foo> <bar> .
4477*7c356e86SAndroid Build Coastguard Worker	<2> <foo> <bar> .
4478*7c356e86SAndroid Build Coastguard Worker---
4479*7c356e86SAndroid Build Coastguard Workername: IFS-subst-3-ass
4480*7c356e86SAndroid Build Coastguard Workerdescription:
4481*7c356e86SAndroid Build Coastguard Worker	Check non-field semantics
4482*7c356e86SAndroid Build Coastguard Workerstdin:
4483*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4484*7c356e86SAndroid Build Coastguard Worker	showargs 0 x=${-+}
4485*7c356e86SAndroid Build Coastguard Worker	IFS=:
4486*7c356e86SAndroid Build Coastguard Worker	showargs 1 x=${-+:foo:bar}
4487*7c356e86SAndroid Build Coastguard Worker	IFS=' '
4488*7c356e86SAndroid Build Coastguard Worker	showargs 2 x=${-+ foo bar}
4489*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4490*7c356e86SAndroid Build Coastguard Worker	<0> <x=> .
4491*7c356e86SAndroid Build Coastguard Worker	<1> <x=> <foo> <bar> .
4492*7c356e86SAndroid Build Coastguard Worker	<2> <x=> <foo> <bar> .
4493*7c356e86SAndroid Build Coastguard Worker---
4494*7c356e86SAndroid Build Coastguard Workername: IFS-subst-3-lcl
4495*7c356e86SAndroid Build Coastguard Workerdescription:
4496*7c356e86SAndroid Build Coastguard Worker	Check non-field semantics, smaller corner case (LP#1381965)
4497*7c356e86SAndroid Build Coastguard Workerstdin:
4498*7c356e86SAndroid Build Coastguard Worker	set -x
4499*7c356e86SAndroid Build Coastguard Worker	local regex=${2:-}
4500*7c356e86SAndroid Build Coastguard Worker	exit 1
4501*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
4502*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
4503*7c356e86SAndroid Build Coastguard Worker	/regex=/
4504*7c356e86SAndroid Build Coastguard Worker---
4505*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-1
4506*7c356e86SAndroid Build Coastguard Workerdescription:
4507*7c356e86SAndroid Build Coastguard Worker	reported by mikeserv
4508*7c356e86SAndroid Build Coastguard Workerstdin:
4509*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4510*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4511*7c356e86SAndroid Build Coastguard Worker	here'
4512*7c356e86SAndroid Build Coastguard Worker	IFS=\  ; set -- $a
4513*7c356e86SAndroid Build Coastguard Worker	IFS= ; q="$*" ; nq=$*
4514*7c356e86SAndroid Build Coastguard Worker	pfn "$*" $* "$q" "$nq"
4515*7c356e86SAndroid Build Coastguard Worker	[ "$q" = "$nq" ] && echo =true || echo =false
4516*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4517*7c356e86SAndroid Build Coastguard Worker	<spacedivdedargument
4518*7c356e86SAndroid Build Coastguard Worker	here>
4519*7c356e86SAndroid Build Coastguard Worker	<space>
4520*7c356e86SAndroid Build Coastguard Worker	<divded>
4521*7c356e86SAndroid Build Coastguard Worker	<argument
4522*7c356e86SAndroid Build Coastguard Worker	here>
4523*7c356e86SAndroid Build Coastguard Worker	<spacedivdedargument
4524*7c356e86SAndroid Build Coastguard Worker	here>
4525*7c356e86SAndroid Build Coastguard Worker	<spacedivdedargument
4526*7c356e86SAndroid Build Coastguard Worker	here>
4527*7c356e86SAndroid Build Coastguard Worker	=true
4528*7c356e86SAndroid Build Coastguard Worker---
4529*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-2
4530*7c356e86SAndroid Build Coastguard Workerdescription:
4531*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on problem by mikeserv
4532*7c356e86SAndroid Build Coastguard Workerstdin:
4533*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4534*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4535*7c356e86SAndroid Build Coastguard Worker	here'
4536*7c356e86SAndroid Build Coastguard Worker	IFS=\  ; set -- $a
4537*7c356e86SAndroid Build Coastguard Worker	IFS= ; q="$@" ; nq=$@
4538*7c356e86SAndroid Build Coastguard Worker	pfn "$*" $* "$q" "$nq"
4539*7c356e86SAndroid Build Coastguard Worker	[ "$q" = "$nq" ] && echo =true || echo =false
4540*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4541*7c356e86SAndroid Build Coastguard Worker	<spacedivdedargument
4542*7c356e86SAndroid Build Coastguard Worker	here>
4543*7c356e86SAndroid Build Coastguard Worker	<space>
4544*7c356e86SAndroid Build Coastguard Worker	<divded>
4545*7c356e86SAndroid Build Coastguard Worker	<argument
4546*7c356e86SAndroid Build Coastguard Worker	here>
4547*7c356e86SAndroid Build Coastguard Worker	<space divded argument
4548*7c356e86SAndroid Build Coastguard Worker	here>
4549*7c356e86SAndroid Build Coastguard Worker	<space divded argument
4550*7c356e86SAndroid Build Coastguard Worker	here>
4551*7c356e86SAndroid Build Coastguard Worker	=true
4552*7c356e86SAndroid Build Coastguard Worker---
4553*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-3
4554*7c356e86SAndroid Build Coastguard Workerdescription:
4555*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on problem by mikeserv
4556*7c356e86SAndroid Build Coastguard Workerstdin:
4557*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4558*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4559*7c356e86SAndroid Build Coastguard Worker	here'
4560*7c356e86SAndroid Build Coastguard Worker	IFS=\ ; set -- $a; IFS=
4561*7c356e86SAndroid Build Coastguard Worker	qs="$*"
4562*7c356e86SAndroid Build Coastguard Worker	nqs=$*
4563*7c356e86SAndroid Build Coastguard Worker	qk="$@"
4564*7c356e86SAndroid Build Coastguard Worker	nqk=$@
4565*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qs '; pfn "$qs"
4566*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqs '; pfn "$nqs"
4567*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qk '; pfn "$qk"
4568*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqk '; pfn "$nqk"
4569*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qs '; pfn "$*"
4570*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqs '; pfn $*
4571*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qk '; pfn "$@"
4572*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqk '; pfn $@
4573*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4574*7c356e86SAndroid Build Coastguard Worker	= qs <spacedivdedargument
4575*7c356e86SAndroid Build Coastguard Worker	here>
4576*7c356e86SAndroid Build Coastguard Worker	=nqs <spacedivdedargument
4577*7c356e86SAndroid Build Coastguard Worker	here>
4578*7c356e86SAndroid Build Coastguard Worker	= qk <space divded argument
4579*7c356e86SAndroid Build Coastguard Worker	here>
4580*7c356e86SAndroid Build Coastguard Worker	=nqk <space divded argument
4581*7c356e86SAndroid Build Coastguard Worker	here>
4582*7c356e86SAndroid Build Coastguard Worker	~ qs <spacedivdedargument
4583*7c356e86SAndroid Build Coastguard Worker	here>
4584*7c356e86SAndroid Build Coastguard Worker	~nqs <space>
4585*7c356e86SAndroid Build Coastguard Worker	<divded>
4586*7c356e86SAndroid Build Coastguard Worker	<argument
4587*7c356e86SAndroid Build Coastguard Worker	here>
4588*7c356e86SAndroid Build Coastguard Worker	~ qk <space>
4589*7c356e86SAndroid Build Coastguard Worker	<divded>
4590*7c356e86SAndroid Build Coastguard Worker	<argument
4591*7c356e86SAndroid Build Coastguard Worker	here>
4592*7c356e86SAndroid Build Coastguard Worker	~nqk <space>
4593*7c356e86SAndroid Build Coastguard Worker	<divded>
4594*7c356e86SAndroid Build Coastguard Worker	<argument
4595*7c356e86SAndroid Build Coastguard Worker	here>
4596*7c356e86SAndroid Build Coastguard Worker---
4597*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-4
4598*7c356e86SAndroid Build Coastguard Workerdescription:
4599*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on problem by mikeserv
4600*7c356e86SAndroid Build Coastguard Workerstdin:
4601*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4602*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4603*7c356e86SAndroid Build Coastguard Worker	here'
4604*7c356e86SAndroid Build Coastguard Worker	IFS=\ ; set -- $a; IFS=
4605*7c356e86SAndroid Build Coastguard Worker	qs="$*"
4606*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qs '; pfn "$qs"
4607*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qs '; pfn "$*"
4608*7c356e86SAndroid Build Coastguard Worker	nqs=$*
4609*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqs '; pfn "$nqs"
4610*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqs '; pfn $*
4611*7c356e86SAndroid Build Coastguard Worker	qk="$@"
4612*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qk '; pfn "$qk"
4613*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qk '; pfn "$@"
4614*7c356e86SAndroid Build Coastguard Worker	nqk=$@
4615*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqk '; pfn "$nqk"
4616*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqk '; pfn $@
4617*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4618*7c356e86SAndroid Build Coastguard Worker	= qs <spacedivdedargument
4619*7c356e86SAndroid Build Coastguard Worker	here>
4620*7c356e86SAndroid Build Coastguard Worker	~ qs <spacedivdedargument
4621*7c356e86SAndroid Build Coastguard Worker	here>
4622*7c356e86SAndroid Build Coastguard Worker	=nqs <spacedivdedargument
4623*7c356e86SAndroid Build Coastguard Worker	here>
4624*7c356e86SAndroid Build Coastguard Worker	~nqs <space>
4625*7c356e86SAndroid Build Coastguard Worker	<divded>
4626*7c356e86SAndroid Build Coastguard Worker	<argument
4627*7c356e86SAndroid Build Coastguard Worker	here>
4628*7c356e86SAndroid Build Coastguard Worker	= qk <space divded argument
4629*7c356e86SAndroid Build Coastguard Worker	here>
4630*7c356e86SAndroid Build Coastguard Worker	~ qk <space>
4631*7c356e86SAndroid Build Coastguard Worker	<divded>
4632*7c356e86SAndroid Build Coastguard Worker	<argument
4633*7c356e86SAndroid Build Coastguard Worker	here>
4634*7c356e86SAndroid Build Coastguard Worker	=nqk <space divded argument
4635*7c356e86SAndroid Build Coastguard Worker	here>
4636*7c356e86SAndroid Build Coastguard Worker	~nqk <space>
4637*7c356e86SAndroid Build Coastguard Worker	<divded>
4638*7c356e86SAndroid Build Coastguard Worker	<argument
4639*7c356e86SAndroid Build Coastguard Worker	here>
4640*7c356e86SAndroid Build Coastguard Worker---
4641*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-4p
4642*7c356e86SAndroid Build Coastguard Workerdescription:
4643*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on problem by mikeserv
4644*7c356e86SAndroid Build Coastguard Workerstdin:
4645*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4646*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4647*7c356e86SAndroid Build Coastguard Worker	here'
4648*7c356e86SAndroid Build Coastguard Worker	IFS=\ ; set -- $a; IFS=
4649*7c356e86SAndroid Build Coastguard Worker	unset v
4650*7c356e86SAndroid Build Coastguard Worker	qs=${v:-"$*"}
4651*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qs '; pfn "$qs"
4652*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qs '; pfn ${v:-"$*"}
4653*7c356e86SAndroid Build Coastguard Worker	nqs=${v:-$*}
4654*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqs '; pfn "$nqs"
4655*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqs '; pfn ${v:-$*}
4656*7c356e86SAndroid Build Coastguard Worker	qk=${v:-"$@"}
4657*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qk '; pfn "$qk"
4658*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qk '; pfn ${v:-"$@"}
4659*7c356e86SAndroid Build Coastguard Worker	nqk=${v:-$@}
4660*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqk '; pfn "$nqk"
4661*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqk '; pfn ${v:-$@}
4662*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4663*7c356e86SAndroid Build Coastguard Worker	= qs <spacedivdedargument
4664*7c356e86SAndroid Build Coastguard Worker	here>
4665*7c356e86SAndroid Build Coastguard Worker	~ qs <spacedivdedargument
4666*7c356e86SAndroid Build Coastguard Worker	here>
4667*7c356e86SAndroid Build Coastguard Worker	=nqs <spacedivdedargument
4668*7c356e86SAndroid Build Coastguard Worker	here>
4669*7c356e86SAndroid Build Coastguard Worker	~nqs <space>
4670*7c356e86SAndroid Build Coastguard Worker	<divded>
4671*7c356e86SAndroid Build Coastguard Worker	<argument
4672*7c356e86SAndroid Build Coastguard Worker	here>
4673*7c356e86SAndroid Build Coastguard Worker	= qk <space divded argument
4674*7c356e86SAndroid Build Coastguard Worker	here>
4675*7c356e86SAndroid Build Coastguard Worker	~ qk <space>
4676*7c356e86SAndroid Build Coastguard Worker	<divded>
4677*7c356e86SAndroid Build Coastguard Worker	<argument
4678*7c356e86SAndroid Build Coastguard Worker	here>
4679*7c356e86SAndroid Build Coastguard Worker	=nqk <space divded argument
4680*7c356e86SAndroid Build Coastguard Worker	here>
4681*7c356e86SAndroid Build Coastguard Worker	~nqk <space>
4682*7c356e86SAndroid Build Coastguard Worker	<divded>
4683*7c356e86SAndroid Build Coastguard Worker	<argument
4684*7c356e86SAndroid Build Coastguard Worker	here>
4685*7c356e86SAndroid Build Coastguard Worker---
4686*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-5
4687*7c356e86SAndroid Build Coastguard Workerdescription:
4688*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on problem by mikeserv
4689*7c356e86SAndroid Build Coastguard Workerstdin:
4690*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4691*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4692*7c356e86SAndroid Build Coastguard Worker	here'
4693*7c356e86SAndroid Build Coastguard Worker	IFS=\ ; set -- $a; IFS=,
4694*7c356e86SAndroid Build Coastguard Worker	qs="$*"
4695*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qs '; pfn "$qs"
4696*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qs '; pfn "$*"
4697*7c356e86SAndroid Build Coastguard Worker	nqs=$*
4698*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqs '; pfn "$nqs"
4699*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqs '; pfn $*
4700*7c356e86SAndroid Build Coastguard Worker	qk="$@"
4701*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qk '; pfn "$qk"
4702*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qk '; pfn "$@"
4703*7c356e86SAndroid Build Coastguard Worker	nqk=$@
4704*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqk '; pfn "$nqk"
4705*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqk '; pfn $@
4706*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4707*7c356e86SAndroid Build Coastguard Worker	= qs <space,divded,argument
4708*7c356e86SAndroid Build Coastguard Worker	here>
4709*7c356e86SAndroid Build Coastguard Worker	~ qs <space,divded,argument
4710*7c356e86SAndroid Build Coastguard Worker	here>
4711*7c356e86SAndroid Build Coastguard Worker	=nqs <space,divded,argument
4712*7c356e86SAndroid Build Coastguard Worker	here>
4713*7c356e86SAndroid Build Coastguard Worker	~nqs <space>
4714*7c356e86SAndroid Build Coastguard Worker	<divded>
4715*7c356e86SAndroid Build Coastguard Worker	<argument
4716*7c356e86SAndroid Build Coastguard Worker	here>
4717*7c356e86SAndroid Build Coastguard Worker	= qk <space divded argument
4718*7c356e86SAndroid Build Coastguard Worker	here>
4719*7c356e86SAndroid Build Coastguard Worker	~ qk <space>
4720*7c356e86SAndroid Build Coastguard Worker	<divded>
4721*7c356e86SAndroid Build Coastguard Worker	<argument
4722*7c356e86SAndroid Build Coastguard Worker	here>
4723*7c356e86SAndroid Build Coastguard Worker	=nqk <space divded argument
4724*7c356e86SAndroid Build Coastguard Worker	here>
4725*7c356e86SAndroid Build Coastguard Worker	~nqk <space>
4726*7c356e86SAndroid Build Coastguard Worker	<divded>
4727*7c356e86SAndroid Build Coastguard Worker	<argument
4728*7c356e86SAndroid Build Coastguard Worker	here>
4729*7c356e86SAndroid Build Coastguard Worker---
4730*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-5p
4731*7c356e86SAndroid Build Coastguard Workerdescription:
4732*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on problem by mikeserv
4733*7c356e86SAndroid Build Coastguard Workerstdin:
4734*7c356e86SAndroid Build Coastguard Worker	pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }
4735*7c356e86SAndroid Build Coastguard Worker	a='space divded  argument
4736*7c356e86SAndroid Build Coastguard Worker	here'
4737*7c356e86SAndroid Build Coastguard Worker	IFS=\ ; set -- $a; IFS=,
4738*7c356e86SAndroid Build Coastguard Worker	unset v
4739*7c356e86SAndroid Build Coastguard Worker	qs=${v:-"$*"}
4740*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qs '; pfn "$qs"
4741*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qs '; pfn ${v:-"$*"}
4742*7c356e86SAndroid Build Coastguard Worker	nqs=${v:-$*}
4743*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqs '; pfn "$nqs"
4744*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqs '; pfn ${v:-$*}
4745*7c356e86SAndroid Build Coastguard Worker	qk=${v:-"$@"}
4746*7c356e86SAndroid Build Coastguard Worker	print -nr -- '= qk '; pfn "$qk"
4747*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~ qk '; pfn ${v:-"$@"}
4748*7c356e86SAndroid Build Coastguard Worker	nqk=${v:-$@}
4749*7c356e86SAndroid Build Coastguard Worker	print -nr -- '=nqk '; pfn "$nqk"
4750*7c356e86SAndroid Build Coastguard Worker	print -nr -- '~nqk '; pfn ${v:-$@}
4751*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4752*7c356e86SAndroid Build Coastguard Worker	= qs <space,divded,argument
4753*7c356e86SAndroid Build Coastguard Worker	here>
4754*7c356e86SAndroid Build Coastguard Worker	~ qs <space,divded,argument
4755*7c356e86SAndroid Build Coastguard Worker	here>
4756*7c356e86SAndroid Build Coastguard Worker	=nqs <space,divded,argument
4757*7c356e86SAndroid Build Coastguard Worker	here>
4758*7c356e86SAndroid Build Coastguard Worker	~nqs <space>
4759*7c356e86SAndroid Build Coastguard Worker	<divded>
4760*7c356e86SAndroid Build Coastguard Worker	<argument
4761*7c356e86SAndroid Build Coastguard Worker	here>
4762*7c356e86SAndroid Build Coastguard Worker	= qk <space divded argument
4763*7c356e86SAndroid Build Coastguard Worker	here>
4764*7c356e86SAndroid Build Coastguard Worker	~ qk <space>
4765*7c356e86SAndroid Build Coastguard Worker	<divded>
4766*7c356e86SAndroid Build Coastguard Worker	<argument
4767*7c356e86SAndroid Build Coastguard Worker	here>
4768*7c356e86SAndroid Build Coastguard Worker	=nqk <space divded argument
4769*7c356e86SAndroid Build Coastguard Worker	here>
4770*7c356e86SAndroid Build Coastguard Worker	~nqk <space>
4771*7c356e86SAndroid Build Coastguard Worker	<divded>
4772*7c356e86SAndroid Build Coastguard Worker	<argument
4773*7c356e86SAndroid Build Coastguard Worker	here>
4774*7c356e86SAndroid Build Coastguard Worker---
4775*7c356e86SAndroid Build Coastguard Workername: IFS-subst-5
4776*7c356e86SAndroid Build Coastguard Workerdescription:
4777*7c356e86SAndroid Build Coastguard Worker	extended testsuite based on IFS-subst-3
4778*7c356e86SAndroid Build Coastguard Worker	differs slightly from ksh93:
4779*7c356e86SAndroid Build Coastguard Worker	- omit trailing field in a3zna, a7ina (unquoted $@ expansion)
4780*7c356e86SAndroid Build Coastguard Worker	- has extra middle fields in b5ins, b7ina (IFS_NWS unquoted expansion)
4781*7c356e86SAndroid Build Coastguard Worker	differs slightly from bash:
4782*7c356e86SAndroid Build Coastguard Worker	- omit leading field in a5ins, a7ina (IFS_NWS unquoted expansion)
4783*7c356e86SAndroid Build Coastguard Worker	differs slightly from zsh:
4784*7c356e86SAndroid Build Coastguard Worker	- differs in assignment, not expansion; probably zsh bug
4785*7c356e86SAndroid Build Coastguard Worker	- has extra middle fields in b5ins, b7ina (IFS_NWS unquoted expansion)
4786*7c356e86SAndroid Build Coastguard Worker	'emulate sh' zsh has extra fields in
4787*7c356e86SAndroid Build Coastguard Worker	- a5ins (IFS_NWS unquoted $*)
4788*7c356e86SAndroid Build Coastguard Worker	- b5ins, matching mksh’s
4789*7c356e86SAndroid Build Coastguard Worker	!!WARNING!! more to come: http://austingroupbugs.net/view.php?id=888
4790*7c356e86SAndroid Build Coastguard Workerstdin:
4791*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4792*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- "" 2 ""; pfb $*; x=$*; pfn "$x"'
4793*7c356e86SAndroid Build Coastguard Worker	echo '=a1zns'
4794*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4795*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- "" 2 ""; pfb "$*"; x="$*"; pfn "$x"'
4796*7c356e86SAndroid Build Coastguard Worker	echo '=a2zqs'
4797*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4798*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- "" 2 ""; pfb $@; x=$@; pfn "$x"'
4799*7c356e86SAndroid Build Coastguard Worker	echo '=a3zna'
4800*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4801*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- "" 2 ""; pfb "$@"; x="$@"; pfn "$x"'
4802*7c356e86SAndroid Build Coastguard Worker	echo '=a4zqa'
4803*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4804*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- "" 2 ""; pfb $*; x=$*; pfn "$x"'
4805*7c356e86SAndroid Build Coastguard Worker	echo '=a5ins'
4806*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4807*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- "" 2 ""; pfb "$*"; x="$*"; pfn "$x"'
4808*7c356e86SAndroid Build Coastguard Worker	echo '=a6iqs'
4809*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4810*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- "" 2 ""; pfb $@; x=$@; pfn "$x"'
4811*7c356e86SAndroid Build Coastguard Worker	echo '=a7ina'
4812*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4813*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- "" 2 ""; pfb "$@"; x="$@"; pfn "$x"'
4814*7c356e86SAndroid Build Coastguard Worker	echo '=a8iqa'
4815*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4816*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- A B "" "" C; pfb $*; x=$*; pfn "$x"'
4817*7c356e86SAndroid Build Coastguard Worker	echo '=b1zns'
4818*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4819*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- A B "" "" C; pfb "$*"; x="$*"; pfn "$x"'
4820*7c356e86SAndroid Build Coastguard Worker	echo '=b2zqs'
4821*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4822*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- A B "" "" C; pfb $@; x=$@; pfn "$x"'
4823*7c356e86SAndroid Build Coastguard Worker	echo '=b3zna'
4824*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4825*7c356e86SAndroid Build Coastguard Worker		IFS=; set -- A B "" "" C; pfb "$@"; x="$@"; pfn "$x"'
4826*7c356e86SAndroid Build Coastguard Worker	echo '=b4zqa'
4827*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4828*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- A B "" "" C; pfb $*; x=$*; pfn "$x"'
4829*7c356e86SAndroid Build Coastguard Worker	echo '=b5ins'
4830*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4831*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- A B "" "" C; pfb "$*"; x="$*"; pfn "$x"'
4832*7c356e86SAndroid Build Coastguard Worker	echo '=b6iqs'
4833*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4834*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- A B "" "" C; pfb $@; x=$@; pfn "$x"'
4835*7c356e86SAndroid Build Coastguard Worker	echo '=b7ina'
4836*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; };
4837*7c356e86SAndroid Build Coastguard Worker		IFS=,; set -- A B "" "" C; pfb "$@"; x="$@"; pfn "$x"'
4838*7c356e86SAndroid Build Coastguard Worker	echo '=b8iqa'
4839*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4840*7c356e86SAndroid Build Coastguard Worker	[2]
4841*7c356e86SAndroid Build Coastguard Worker	<2>
4842*7c356e86SAndroid Build Coastguard Worker	=a1zns
4843*7c356e86SAndroid Build Coastguard Worker	[2]
4844*7c356e86SAndroid Build Coastguard Worker	<2>
4845*7c356e86SAndroid Build Coastguard Worker	=a2zqs
4846*7c356e86SAndroid Build Coastguard Worker	[2]
4847*7c356e86SAndroid Build Coastguard Worker	< 2 >
4848*7c356e86SAndroid Build Coastguard Worker	=a3zna
4849*7c356e86SAndroid Build Coastguard Worker	[]
4850*7c356e86SAndroid Build Coastguard Worker	[2]
4851*7c356e86SAndroid Build Coastguard Worker	[]
4852*7c356e86SAndroid Build Coastguard Worker	< 2 >
4853*7c356e86SAndroid Build Coastguard Worker	=a4zqa
4854*7c356e86SAndroid Build Coastguard Worker	[2]
4855*7c356e86SAndroid Build Coastguard Worker	<,2,>
4856*7c356e86SAndroid Build Coastguard Worker	=a5ins
4857*7c356e86SAndroid Build Coastguard Worker	[,2,]
4858*7c356e86SAndroid Build Coastguard Worker	<,2,>
4859*7c356e86SAndroid Build Coastguard Worker	=a6iqs
4860*7c356e86SAndroid Build Coastguard Worker	[2]
4861*7c356e86SAndroid Build Coastguard Worker	< 2 >
4862*7c356e86SAndroid Build Coastguard Worker	=a7ina
4863*7c356e86SAndroid Build Coastguard Worker	[]
4864*7c356e86SAndroid Build Coastguard Worker	[2]
4865*7c356e86SAndroid Build Coastguard Worker	[]
4866*7c356e86SAndroid Build Coastguard Worker	< 2 >
4867*7c356e86SAndroid Build Coastguard Worker	=a8iqa
4868*7c356e86SAndroid Build Coastguard Worker	[A]
4869*7c356e86SAndroid Build Coastguard Worker	[B]
4870*7c356e86SAndroid Build Coastguard Worker	[C]
4871*7c356e86SAndroid Build Coastguard Worker	<ABC>
4872*7c356e86SAndroid Build Coastguard Worker	=b1zns
4873*7c356e86SAndroid Build Coastguard Worker	[ABC]
4874*7c356e86SAndroid Build Coastguard Worker	<ABC>
4875*7c356e86SAndroid Build Coastguard Worker	=b2zqs
4876*7c356e86SAndroid Build Coastguard Worker	[A]
4877*7c356e86SAndroid Build Coastguard Worker	[B]
4878*7c356e86SAndroid Build Coastguard Worker	[C]
4879*7c356e86SAndroid Build Coastguard Worker	<A B   C>
4880*7c356e86SAndroid Build Coastguard Worker	=b3zna
4881*7c356e86SAndroid Build Coastguard Worker	[A]
4882*7c356e86SAndroid Build Coastguard Worker	[B]
4883*7c356e86SAndroid Build Coastguard Worker	[]
4884*7c356e86SAndroid Build Coastguard Worker	[]
4885*7c356e86SAndroid Build Coastguard Worker	[C]
4886*7c356e86SAndroid Build Coastguard Worker	<A B   C>
4887*7c356e86SAndroid Build Coastguard Worker	=b4zqa
4888*7c356e86SAndroid Build Coastguard Worker	[A]
4889*7c356e86SAndroid Build Coastguard Worker	[B]
4890*7c356e86SAndroid Build Coastguard Worker	[]
4891*7c356e86SAndroid Build Coastguard Worker	[]
4892*7c356e86SAndroid Build Coastguard Worker	[C]
4893*7c356e86SAndroid Build Coastguard Worker	<A,B,,,C>
4894*7c356e86SAndroid Build Coastguard Worker	=b5ins
4895*7c356e86SAndroid Build Coastguard Worker	[A,B,,,C]
4896*7c356e86SAndroid Build Coastguard Worker	<A,B,,,C>
4897*7c356e86SAndroid Build Coastguard Worker	=b6iqs
4898*7c356e86SAndroid Build Coastguard Worker	[A]
4899*7c356e86SAndroid Build Coastguard Worker	[B]
4900*7c356e86SAndroid Build Coastguard Worker	[]
4901*7c356e86SAndroid Build Coastguard Worker	[]
4902*7c356e86SAndroid Build Coastguard Worker	[C]
4903*7c356e86SAndroid Build Coastguard Worker	<A B   C>
4904*7c356e86SAndroid Build Coastguard Worker	=b7ina
4905*7c356e86SAndroid Build Coastguard Worker	[A]
4906*7c356e86SAndroid Build Coastguard Worker	[B]
4907*7c356e86SAndroid Build Coastguard Worker	[]
4908*7c356e86SAndroid Build Coastguard Worker	[]
4909*7c356e86SAndroid Build Coastguard Worker	[C]
4910*7c356e86SAndroid Build Coastguard Worker	<A B   C>
4911*7c356e86SAndroid Build Coastguard Worker	=b8iqa
4912*7c356e86SAndroid Build Coastguard Worker---
4913*7c356e86SAndroid Build Coastguard Workername: IFS-subst-6
4914*7c356e86SAndroid Build Coastguard Workerdescription:
4915*7c356e86SAndroid Build Coastguard Worker	Regression wrt. vector expansion in trim
4916*7c356e86SAndroid Build Coastguard Workerstdin:
4917*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4918*7c356e86SAndroid Build Coastguard Worker	IFS=
4919*7c356e86SAndroid Build Coastguard Worker	x=abc
4920*7c356e86SAndroid Build Coastguard Worker	set -- a b
4921*7c356e86SAndroid Build Coastguard Worker	showargs ${x#$*}
4922*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4923*7c356e86SAndroid Build Coastguard Worker	<c> .
4924*7c356e86SAndroid Build Coastguard Worker---
4925*7c356e86SAndroid Build Coastguard Workername: IFS-subst-7
4926*7c356e86SAndroid Build Coastguard Workerdescription:
4927*7c356e86SAndroid Build Coastguard Worker	ksh93 bug wrt. vector expansion in trim
4928*7c356e86SAndroid Build Coastguard Workerstdin:
4929*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4930*7c356e86SAndroid Build Coastguard Worker	IFS="*"
4931*7c356e86SAndroid Build Coastguard Worker	a=abcd
4932*7c356e86SAndroid Build Coastguard Worker	set -- '' c
4933*7c356e86SAndroid Build Coastguard Worker	showargs "$*" ${a##"$*"}
4934*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4935*7c356e86SAndroid Build Coastguard Worker	<*c> <abcd> .
4936*7c356e86SAndroid Build Coastguard Worker---
4937*7c356e86SAndroid Build Coastguard Workername: IFS-subst-8
4938*7c356e86SAndroid Build Coastguard Workerdescription:
4939*7c356e86SAndroid Build Coastguard Worker	http://austingroupbugs.net/view.php?id=221
4940*7c356e86SAndroid Build Coastguard Workerstdin:
4941*7c356e86SAndroid Build Coastguard Worker	n() { echo "$#"; }; n "${foo-$@}"
4942*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4943*7c356e86SAndroid Build Coastguard Worker	1
4944*7c356e86SAndroid Build Coastguard Worker---
4945*7c356e86SAndroid Build Coastguard Workername: IFS-subst-9
4946*7c356e86SAndroid Build Coastguard Workerdescription:
4947*7c356e86SAndroid Build Coastguard Worker	Scalar context for $*/$@ in [[ and case
4948*7c356e86SAndroid Build Coastguard Workerstdin:
4949*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; set a b; [[ $* = "$1$2" ]]; echo 1 $?' sh a b
4950*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; [[ $* = ab ]]; echo 2 "$?"' sh a b
4951*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; [[ "$*" = ab ]]; echo 3 "$?"' sh a b
4952*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; [[ $* = a ]]; echo 4 "$?"' sh a b
4953*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; [[ "$*" = a ]]; echo 5 "$?"' sh a b
4954*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; [[ "$@" = a ]]; echo 6 "$?"' sh a b
4955*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; case "$@" in a) echo 7 a;; ab) echo 7 b;; a\ b) echo 7 ok;; esac' sh a b
4956*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'IFS=; case $* in a) echo 8 a;; ab) echo 8 ok;; esac' sh a b
4957*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'pfsp() { for s_arg in "$@"; do print -nr -- "<$s_arg> "; done; print .; }; IFS=; star=$* at="$@"; pfsp 9 "$star" "$at"' sh a b
4958*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4959*7c356e86SAndroid Build Coastguard Worker	1 0
4960*7c356e86SAndroid Build Coastguard Worker	2 0
4961*7c356e86SAndroid Build Coastguard Worker	3 0
4962*7c356e86SAndroid Build Coastguard Worker	4 1
4963*7c356e86SAndroid Build Coastguard Worker	5 1
4964*7c356e86SAndroid Build Coastguard Worker	6 1
4965*7c356e86SAndroid Build Coastguard Worker	7 ok
4966*7c356e86SAndroid Build Coastguard Worker	8 ok
4967*7c356e86SAndroid Build Coastguard Worker	<9> <ab> <a b> .
4968*7c356e86SAndroid Build Coastguard Worker---
4969*7c356e86SAndroid Build Coastguard Workername: IFS-subst-10
4970*7c356e86SAndroid Build Coastguard Workerdescription:
4971*7c356e86SAndroid Build Coastguard Worker	Scalar context in ${var=$subst}
4972*7c356e86SAndroid Build Coastguard Workerstdin:
4973*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4974*7c356e86SAndroid Build Coastguard Worker	set -- one "two three" four
4975*7c356e86SAndroid Build Coastguard Worker	unset -v var
4976*7c356e86SAndroid Build Coastguard Worker	save_IFS=$IFS
4977*7c356e86SAndroid Build Coastguard Worker	IFS=
4978*7c356e86SAndroid Build Coastguard Worker	set -- ${var=$*}
4979*7c356e86SAndroid Build Coastguard Worker	IFS=$save_IFS
4980*7c356e86SAndroid Build Coastguard Worker	echo "var=$var"
4981*7c356e86SAndroid Build Coastguard Worker	showargs "$@"
4982*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4983*7c356e86SAndroid Build Coastguard Worker	var=onetwo threefour
4984*7c356e86SAndroid Build Coastguard Worker	<onetwo threefour> .
4985*7c356e86SAndroid Build Coastguard Worker---
4986*7c356e86SAndroid Build Coastguard Workername: IFS-subst-11
4987*7c356e86SAndroid Build Coastguard Workerdescription:
4988*7c356e86SAndroid Build Coastguard Worker	Check leading non-whitespace after trim makes only one field
4989*7c356e86SAndroid Build Coastguard Workerstdin:
4990*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
4991*7c356e86SAndroid Build Coastguard Worker	v="foo!one!two!three"
4992*7c356e86SAndroid Build Coastguard Worker	IFS="!"
4993*7c356e86SAndroid Build Coastguard Worker	showargs x ${v:3} y
4994*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
4995*7c356e86SAndroid Build Coastguard Worker	<x> <> <one> <two> <three> <y> .
4996*7c356e86SAndroid Build Coastguard Worker---
4997*7c356e86SAndroid Build Coastguard Workername: IFS-arith-1
4998*7c356e86SAndroid Build Coastguard Workerdescription:
4999*7c356e86SAndroid Build Coastguard Worker	http://austingroupbugs.net/view.php?id=832
5000*7c356e86SAndroid Build Coastguard Workerstdin:
5001*7c356e86SAndroid Build Coastguard Worker	${ZSH_VERSION+false} || emulate sh
5002*7c356e86SAndroid Build Coastguard Worker	${BASH_VERSION+set -o posix}
5003*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
5004*7c356e86SAndroid Build Coastguard Worker	IFS=0
5005*7c356e86SAndroid Build Coastguard Worker	showargs $((1230456))
5006*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5007*7c356e86SAndroid Build Coastguard Worker	<123> <456> .
5008*7c356e86SAndroid Build Coastguard Worker---
5009*7c356e86SAndroid Build Coastguard Workername: integer-base-err-1
5010*7c356e86SAndroid Build Coastguard Workerdescription:
5011*7c356e86SAndroid Build Coastguard Worker	Can't have 0 base (causes shell to exit)
5012*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
5013*7c356e86SAndroid Build Coastguard Workerstdin:
5014*7c356e86SAndroid Build Coastguard Worker	typeset -i i
5015*7c356e86SAndroid Build Coastguard Worker	i=3
5016*7c356e86SAndroid Build Coastguard Worker	i=0#4
5017*7c356e86SAndroid Build Coastguard Worker	echo $i
5018*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
5019*7c356e86SAndroid Build Coastguard Worker	/^.*:.*0#4.*\n$/
5020*7c356e86SAndroid Build Coastguard Worker---
5021*7c356e86SAndroid Build Coastguard Workername: integer-base-err-2
5022*7c356e86SAndroid Build Coastguard Workerdescription:
5023*7c356e86SAndroid Build Coastguard Worker	Can't have multiple bases in a 'constant' (causes shell to exit)
5024*7c356e86SAndroid Build Coastguard Worker	(ksh88 fails this test)
5025*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
5026*7c356e86SAndroid Build Coastguard Workerstdin:
5027*7c356e86SAndroid Build Coastguard Worker	typeset -i i
5028*7c356e86SAndroid Build Coastguard Worker	i=3
5029*7c356e86SAndroid Build Coastguard Worker	i=2#110#11
5030*7c356e86SAndroid Build Coastguard Worker	echo $i
5031*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
5032*7c356e86SAndroid Build Coastguard Worker	/^.*:.*2#110#11.*\n$/
5033*7c356e86SAndroid Build Coastguard Worker---
5034*7c356e86SAndroid Build Coastguard Workername: integer-base-err-3
5035*7c356e86SAndroid Build Coastguard Workerdescription:
5036*7c356e86SAndroid Build Coastguard Worker	Syntax errors in expressions and effects on bases
5037*7c356e86SAndroid Build Coastguard Worker	(interactive so errors don't cause exits)
5038*7c356e86SAndroid Build Coastguard Worker	(ksh88 fails this test - shell exits, even with -i)
5039*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
5040*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
5041*7c356e86SAndroid Build Coastguard Workerstdin:
5042*7c356e86SAndroid Build Coastguard Worker	PS1= # minimise prompt hassles
5043*7c356e86SAndroid Build Coastguard Worker	typeset -i4 a=10
5044*7c356e86SAndroid Build Coastguard Worker	typeset -i a=2+
5045*7c356e86SAndroid Build Coastguard Worker	echo $a
5046*7c356e86SAndroid Build Coastguard Worker	typeset -i4 a=10
5047*7c356e86SAndroid Build Coastguard Worker	typeset -i2 a=2+
5048*7c356e86SAndroid Build Coastguard Worker	echo $a
5049*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
5050*7c356e86SAndroid Build Coastguard Worker	/^([#\$] )?.*:.*2+.*\n.*:.*2+.*\n$/
5051*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5052*7c356e86SAndroid Build Coastguard Worker	4#22
5053*7c356e86SAndroid Build Coastguard Worker	4#22
5054*7c356e86SAndroid Build Coastguard Worker---
5055*7c356e86SAndroid Build Coastguard Workername: integer-base-err-4
5056*7c356e86SAndroid Build Coastguard Workerdescription:
5057*7c356e86SAndroid Build Coastguard Worker	Are invalid digits (according to base) errors?
5058*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this test)
5059*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
5060*7c356e86SAndroid Build Coastguard Workerstdin:
5061*7c356e86SAndroid Build Coastguard Worker	typeset -i i;
5062*7c356e86SAndroid Build Coastguard Worker	i=3#4
5063*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
5064*7c356e86SAndroid Build Coastguard Worker	/^([#\$] )?.*:.*3#4.*\n$/
5065*7c356e86SAndroid Build Coastguard Worker---
5066*7c356e86SAndroid Build Coastguard Workername: integer-base-1
5067*7c356e86SAndroid Build Coastguard Workerdescription:
5068*7c356e86SAndroid Build Coastguard Worker	Missing number after base is treated as 0.
5069*7c356e86SAndroid Build Coastguard Workerstdin:
5070*7c356e86SAndroid Build Coastguard Worker	typeset -i i
5071*7c356e86SAndroid Build Coastguard Worker	i=3
5072*7c356e86SAndroid Build Coastguard Worker	i=2#
5073*7c356e86SAndroid Build Coastguard Worker	echo $i
5074*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5075*7c356e86SAndroid Build Coastguard Worker	0
5076*7c356e86SAndroid Build Coastguard Worker---
5077*7c356e86SAndroid Build Coastguard Workername: integer-base-2
5078*7c356e86SAndroid Build Coastguard Workerdescription:
5079*7c356e86SAndroid Build Coastguard Worker	Check 'stickyness' of base in various situations
5080*7c356e86SAndroid Build Coastguard Workerstdin:
5081*7c356e86SAndroid Build Coastguard Worker	typeset -i i=8
5082*7c356e86SAndroid Build Coastguard Worker	echo $i
5083*7c356e86SAndroid Build Coastguard Worker	echo ---------- A
5084*7c356e86SAndroid Build Coastguard Worker	typeset -i4 j=8
5085*7c356e86SAndroid Build Coastguard Worker	echo $j
5086*7c356e86SAndroid Build Coastguard Worker	echo ---------- B
5087*7c356e86SAndroid Build Coastguard Worker	typeset -i k=8
5088*7c356e86SAndroid Build Coastguard Worker	typeset -i4 k=8
5089*7c356e86SAndroid Build Coastguard Worker	echo $k
5090*7c356e86SAndroid Build Coastguard Worker	echo ---------- C
5091*7c356e86SAndroid Build Coastguard Worker	typeset -i4 l
5092*7c356e86SAndroid Build Coastguard Worker	l=3#10
5093*7c356e86SAndroid Build Coastguard Worker	echo $l
5094*7c356e86SAndroid Build Coastguard Worker	echo ---------- D
5095*7c356e86SAndroid Build Coastguard Worker	typeset -i m
5096*7c356e86SAndroid Build Coastguard Worker	m=3#10
5097*7c356e86SAndroid Build Coastguard Worker	echo $m
5098*7c356e86SAndroid Build Coastguard Worker	echo ---------- E
5099*7c356e86SAndroid Build Coastguard Worker	n=2#11
5100*7c356e86SAndroid Build Coastguard Worker	typeset -i n
5101*7c356e86SAndroid Build Coastguard Worker	echo $n
5102*7c356e86SAndroid Build Coastguard Worker	n=10
5103*7c356e86SAndroid Build Coastguard Worker	echo $n
5104*7c356e86SAndroid Build Coastguard Worker	echo ---------- F
5105*7c356e86SAndroid Build Coastguard Worker	typeset -i8 o=12
5106*7c356e86SAndroid Build Coastguard Worker	typeset -i4 o
5107*7c356e86SAndroid Build Coastguard Worker	echo $o
5108*7c356e86SAndroid Build Coastguard Worker	echo ---------- G
5109*7c356e86SAndroid Build Coastguard Worker	typeset -i p
5110*7c356e86SAndroid Build Coastguard Worker	let p=8#12
5111*7c356e86SAndroid Build Coastguard Worker	echo $p
5112*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5113*7c356e86SAndroid Build Coastguard Worker	8
5114*7c356e86SAndroid Build Coastguard Worker	---------- A
5115*7c356e86SAndroid Build Coastguard Worker	4#20
5116*7c356e86SAndroid Build Coastguard Worker	---------- B
5117*7c356e86SAndroid Build Coastguard Worker	4#20
5118*7c356e86SAndroid Build Coastguard Worker	---------- C
5119*7c356e86SAndroid Build Coastguard Worker	4#3
5120*7c356e86SAndroid Build Coastguard Worker	---------- D
5121*7c356e86SAndroid Build Coastguard Worker	3#10
5122*7c356e86SAndroid Build Coastguard Worker	---------- E
5123*7c356e86SAndroid Build Coastguard Worker	2#11
5124*7c356e86SAndroid Build Coastguard Worker	2#1010
5125*7c356e86SAndroid Build Coastguard Worker	---------- F
5126*7c356e86SAndroid Build Coastguard Worker	4#30
5127*7c356e86SAndroid Build Coastguard Worker	---------- G
5128*7c356e86SAndroid Build Coastguard Worker	8#12
5129*7c356e86SAndroid Build Coastguard Worker---
5130*7c356e86SAndroid Build Coastguard Workername: integer-base-3
5131*7c356e86SAndroid Build Coastguard Workerdescription:
5132*7c356e86SAndroid Build Coastguard Worker	More base parsing (hmm doesn't test much..)
5133*7c356e86SAndroid Build Coastguard Workerstdin:
5134*7c356e86SAndroid Build Coastguard Worker	typeset -i aa
5135*7c356e86SAndroid Build Coastguard Worker	aa=1+12#10+2
5136*7c356e86SAndroid Build Coastguard Worker	echo $aa
5137*7c356e86SAndroid Build Coastguard Worker	typeset -i bb
5138*7c356e86SAndroid Build Coastguard Worker	bb=1+$aa
5139*7c356e86SAndroid Build Coastguard Worker	echo $bb
5140*7c356e86SAndroid Build Coastguard Worker	typeset -i bb
5141*7c356e86SAndroid Build Coastguard Worker	bb=$aa
5142*7c356e86SAndroid Build Coastguard Worker	echo $bb
5143*7c356e86SAndroid Build Coastguard Worker	typeset -i cc
5144*7c356e86SAndroid Build Coastguard Worker	cc=$aa
5145*7c356e86SAndroid Build Coastguard Worker	echo $cc
5146*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5147*7c356e86SAndroid Build Coastguard Worker	15
5148*7c356e86SAndroid Build Coastguard Worker	16
5149*7c356e86SAndroid Build Coastguard Worker	15
5150*7c356e86SAndroid Build Coastguard Worker	15
5151*7c356e86SAndroid Build Coastguard Worker---
5152*7c356e86SAndroid Build Coastguard Workername: integer-base-4
5153*7c356e86SAndroid Build Coastguard Workerdescription:
5154*7c356e86SAndroid Build Coastguard Worker	Check that things not declared as integers are not made integers,
5155*7c356e86SAndroid Build Coastguard Worker	also, check if base is not reset by -i with no arguments.
5156*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails - prints 10#20 - go figure)
5157*7c356e86SAndroid Build Coastguard Workerstdin:
5158*7c356e86SAndroid Build Coastguard Worker	xx=20
5159*7c356e86SAndroid Build Coastguard Worker	let xx=10
5160*7c356e86SAndroid Build Coastguard Worker	typeset -i | grep '^xx='
5161*7c356e86SAndroid Build Coastguard Worker	typeset -i4 a=10
5162*7c356e86SAndroid Build Coastguard Worker	typeset -i a=20
5163*7c356e86SAndroid Build Coastguard Worker	echo $a
5164*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5165*7c356e86SAndroid Build Coastguard Worker	4#110
5166*7c356e86SAndroid Build Coastguard Worker---
5167*7c356e86SAndroid Build Coastguard Workername: integer-base-5
5168*7c356e86SAndroid Build Coastguard Workerdescription:
5169*7c356e86SAndroid Build Coastguard Worker	More base stuff
5170*7c356e86SAndroid Build Coastguard Workerstdin:
5171*7c356e86SAndroid Build Coastguard Worker	typeset -i4 a=3#10
5172*7c356e86SAndroid Build Coastguard Worker	echo $a
5173*7c356e86SAndroid Build Coastguard Worker	echo --
5174*7c356e86SAndroid Build Coastguard Worker	typeset -i j=3
5175*7c356e86SAndroid Build Coastguard Worker	j='~3'
5176*7c356e86SAndroid Build Coastguard Worker	echo $j
5177*7c356e86SAndroid Build Coastguard Worker	echo --
5178*7c356e86SAndroid Build Coastguard Worker	typeset -i k=1
5179*7c356e86SAndroid Build Coastguard Worker	x[k=k+1]=3
5180*7c356e86SAndroid Build Coastguard Worker	echo $k
5181*7c356e86SAndroid Build Coastguard Worker	echo --
5182*7c356e86SAndroid Build Coastguard Worker	typeset -i l
5183*7c356e86SAndroid Build Coastguard Worker	for l in 1 2+3 4; do echo $l; done
5184*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5185*7c356e86SAndroid Build Coastguard Worker	4#3
5186*7c356e86SAndroid Build Coastguard Worker	--
5187*7c356e86SAndroid Build Coastguard Worker	-4
5188*7c356e86SAndroid Build Coastguard Worker	--
5189*7c356e86SAndroid Build Coastguard Worker	2
5190*7c356e86SAndroid Build Coastguard Worker	--
5191*7c356e86SAndroid Build Coastguard Worker	1
5192*7c356e86SAndroid Build Coastguard Worker	5
5193*7c356e86SAndroid Build Coastguard Worker	4
5194*7c356e86SAndroid Build Coastguard Worker---
5195*7c356e86SAndroid Build Coastguard Workername: integer-base-6
5196*7c356e86SAndroid Build Coastguard Workerdescription:
5197*7c356e86SAndroid Build Coastguard Worker	Even more base stuff
5198*7c356e86SAndroid Build Coastguard Worker	(ksh93 fails this test - prints 0)
5199*7c356e86SAndroid Build Coastguard Workerstdin:
5200*7c356e86SAndroid Build Coastguard Worker	typeset -i7 i
5201*7c356e86SAndroid Build Coastguard Worker	i=
5202*7c356e86SAndroid Build Coastguard Worker	echo $i
5203*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5204*7c356e86SAndroid Build Coastguard Worker	7#0
5205*7c356e86SAndroid Build Coastguard Worker---
5206*7c356e86SAndroid Build Coastguard Workername: integer-base-7
5207*7c356e86SAndroid Build Coastguard Workerdescription:
5208*7c356e86SAndroid Build Coastguard Worker	Check that non-integer parameters don't get bases assigned
5209*7c356e86SAndroid Build Coastguard Workerstdin:
5210*7c356e86SAndroid Build Coastguard Worker	echo $(( zz = 8#100 ))
5211*7c356e86SAndroid Build Coastguard Worker	echo $zz
5212*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5213*7c356e86SAndroid Build Coastguard Worker	64
5214*7c356e86SAndroid Build Coastguard Worker	64
5215*7c356e86SAndroid Build Coastguard Worker---
5216*7c356e86SAndroid Build Coastguard Workername: integer-base-8
5217*7c356e86SAndroid Build Coastguard Workerdescription:
5218*7c356e86SAndroid Build Coastguard Worker	Check that base-36 works (full span)
5219*7c356e86SAndroid Build Coastguard Workerstdin:
5220*7c356e86SAndroid Build Coastguard Worker	echo 1:$((36#109AZ)).
5221*7c356e86SAndroid Build Coastguard Worker	typeset -i36 x=1691675
5222*7c356e86SAndroid Build Coastguard Worker	echo 2:$x.
5223*7c356e86SAndroid Build Coastguard Worker	typeset -Uui36 x
5224*7c356e86SAndroid Build Coastguard Worker	echo 3:$x.
5225*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5226*7c356e86SAndroid Build Coastguard Worker	1:1691675.
5227*7c356e86SAndroid Build Coastguard Worker	2:36#109az.
5228*7c356e86SAndroid Build Coastguard Worker	3:36#109AZ.
5229*7c356e86SAndroid Build Coastguard Worker---
5230*7c356e86SAndroid Build Coastguard Workername: integer-base-check-flat
5231*7c356e86SAndroid Build Coastguard Workerdescription:
5232*7c356e86SAndroid Build Coastguard Worker	Check behaviour does not match POSuX (except if set -o posix),
5233*7c356e86SAndroid Build Coastguard Worker	because a not type-safe scripting language has *no* business
5234*7c356e86SAndroid Build Coastguard Worker	interpreting the string "010" as octal number eight (dangerous).
5235*7c356e86SAndroid Build Coastguard Workerstdin:
5236*7c356e86SAndroid Build Coastguard Worker	echo 1 "$("$__progname" -c 'echo :$((10))/$((010)),$((0x10)):')" .
5237*7c356e86SAndroid Build Coastguard Worker	echo 2 "$("$__progname" -o posix -c 'echo :$((10))/$((010)),$((0x10)):')" .
5238*7c356e86SAndroid Build Coastguard Worker	echo 3 "$("$__progname" -o sh -c 'echo :$((10))/$((010)),$((0x10)):')" .
5239*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5240*7c356e86SAndroid Build Coastguard Worker	1 :10/10,16: .
5241*7c356e86SAndroid Build Coastguard Worker	2 :10/8,16: .
5242*7c356e86SAndroid Build Coastguard Worker	3 :10/10,16: .
5243*7c356e86SAndroid Build Coastguard Worker---
5244*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-from-1
5245*7c356e86SAndroid Build Coastguard Workerdescription:
5246*7c356e86SAndroid Build Coastguard Worker	Check behaviour for base one
5247*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
5248*7c356e86SAndroid Build Coastguard Workerstdin:
5249*7c356e86SAndroid Build Coastguard Worker	echo 1:$((1#1))0.
5250*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5251*7c356e86SAndroid Build Coastguard Worker	1:490.
5252*7c356e86SAndroid Build Coastguard Worker---
5253*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-from-1-ebcdic
5254*7c356e86SAndroid Build Coastguard Workerdescription:
5255*7c356e86SAndroid Build Coastguard Worker	Check behaviour for base one
5256*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
5257*7c356e86SAndroid Build Coastguard Workerstdin:
5258*7c356e86SAndroid Build Coastguard Worker	echo 1:$((1#1))0.
5259*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5260*7c356e86SAndroid Build Coastguard Worker	1:2410.
5261*7c356e86SAndroid Build Coastguard Worker---
5262*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-from-2
5263*7c356e86SAndroid Build Coastguard Workerdescription:
5264*7c356e86SAndroid Build Coastguard Worker	Check behaviour for base two to 36, and that 37 degrades to 10
5265*7c356e86SAndroid Build Coastguard Workerstdin:
5266*7c356e86SAndroid Build Coastguard Worker	i=1
5267*7c356e86SAndroid Build Coastguard Worker	while (( ++i <= 37 )); do
5268*7c356e86SAndroid Build Coastguard Worker		eval 'echo '$i':$(('$i'#10)).'
5269*7c356e86SAndroid Build Coastguard Worker	done
5270*7c356e86SAndroid Build Coastguard Worker	echo 37:$($__progname -c 'echo $((37#10))').$?:
5271*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5272*7c356e86SAndroid Build Coastguard Worker	2:2.
5273*7c356e86SAndroid Build Coastguard Worker	3:3.
5274*7c356e86SAndroid Build Coastguard Worker	4:4.
5275*7c356e86SAndroid Build Coastguard Worker	5:5.
5276*7c356e86SAndroid Build Coastguard Worker	6:6.
5277*7c356e86SAndroid Build Coastguard Worker	7:7.
5278*7c356e86SAndroid Build Coastguard Worker	8:8.
5279*7c356e86SAndroid Build Coastguard Worker	9:9.
5280*7c356e86SAndroid Build Coastguard Worker	10:10.
5281*7c356e86SAndroid Build Coastguard Worker	11:11.
5282*7c356e86SAndroid Build Coastguard Worker	12:12.
5283*7c356e86SAndroid Build Coastguard Worker	13:13.
5284*7c356e86SAndroid Build Coastguard Worker	14:14.
5285*7c356e86SAndroid Build Coastguard Worker	15:15.
5286*7c356e86SAndroid Build Coastguard Worker	16:16.
5287*7c356e86SAndroid Build Coastguard Worker	17:17.
5288*7c356e86SAndroid Build Coastguard Worker	18:18.
5289*7c356e86SAndroid Build Coastguard Worker	19:19.
5290*7c356e86SAndroid Build Coastguard Worker	20:20.
5291*7c356e86SAndroid Build Coastguard Worker	21:21.
5292*7c356e86SAndroid Build Coastguard Worker	22:22.
5293*7c356e86SAndroid Build Coastguard Worker	23:23.
5294*7c356e86SAndroid Build Coastguard Worker	24:24.
5295*7c356e86SAndroid Build Coastguard Worker	25:25.
5296*7c356e86SAndroid Build Coastguard Worker	26:26.
5297*7c356e86SAndroid Build Coastguard Worker	27:27.
5298*7c356e86SAndroid Build Coastguard Worker	28:28.
5299*7c356e86SAndroid Build Coastguard Worker	29:29.
5300*7c356e86SAndroid Build Coastguard Worker	30:30.
5301*7c356e86SAndroid Build Coastguard Worker	31:31.
5302*7c356e86SAndroid Build Coastguard Worker	32:32.
5303*7c356e86SAndroid Build Coastguard Worker	33:33.
5304*7c356e86SAndroid Build Coastguard Worker	34:34.
5305*7c356e86SAndroid Build Coastguard Worker	35:35.
5306*7c356e86SAndroid Build Coastguard Worker	36:36.
5307*7c356e86SAndroid Build Coastguard Worker	37:10.
5308*7c356e86SAndroid Build Coastguard Worker	37:10.0:
5309*7c356e86SAndroid Build Coastguard Worker---
5310*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-to-1
5311*7c356e86SAndroid Build Coastguard Workerdescription:
5312*7c356e86SAndroid Build Coastguard Worker	Check behaviour for base one
5313*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
5314*7c356e86SAndroid Build Coastguard Workerstdin:
5315*7c356e86SAndroid Build Coastguard Worker	i=1
5316*7c356e86SAndroid Build Coastguard Worker	typeset -Uui$i x=0x40
5317*7c356e86SAndroid Build Coastguard Worker	eval "typeset -i10 y=$x"
5318*7c356e86SAndroid Build Coastguard Worker	print $i:$x.$y.
5319*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5320*7c356e86SAndroid Build Coastguard Worker	1:1#@.64.
5321*7c356e86SAndroid Build Coastguard Worker---
5322*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-to-1-ebcdic
5323*7c356e86SAndroid Build Coastguard Workerdescription:
5324*7c356e86SAndroid Build Coastguard Worker	Check behaviour for base one
5325*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
5326*7c356e86SAndroid Build Coastguard Workerstdin:
5327*7c356e86SAndroid Build Coastguard Worker	i=1
5328*7c356e86SAndroid Build Coastguard Worker	typeset -Uui$i x=0x7C
5329*7c356e86SAndroid Build Coastguard Worker	eval "typeset -i10 y=$x"
5330*7c356e86SAndroid Build Coastguard Worker	print $i:$x.$y.
5331*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5332*7c356e86SAndroid Build Coastguard Worker	1:1#@.124.
5333*7c356e86SAndroid Build Coastguard Worker---
5334*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-to-2
5335*7c356e86SAndroid Build Coastguard Workerdescription:
5336*7c356e86SAndroid Build Coastguard Worker	Check behaviour for base two to 36, and that 37 degrades to 10
5337*7c356e86SAndroid Build Coastguard Workerstdin:
5338*7c356e86SAndroid Build Coastguard Worker	i=1
5339*7c356e86SAndroid Build Coastguard Worker	while (( ++i <= 37 )); do
5340*7c356e86SAndroid Build Coastguard Worker		typeset -Uui$i x=0x40
5341*7c356e86SAndroid Build Coastguard Worker		eval "typeset -i10 y=$x"
5342*7c356e86SAndroid Build Coastguard Worker		print $i:$x.$y.
5343*7c356e86SAndroid Build Coastguard Worker	done
5344*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5345*7c356e86SAndroid Build Coastguard Worker	2:2#1000000.64.
5346*7c356e86SAndroid Build Coastguard Worker	3:3#2101.64.
5347*7c356e86SAndroid Build Coastguard Worker	4:4#1000.64.
5348*7c356e86SAndroid Build Coastguard Worker	5:5#224.64.
5349*7c356e86SAndroid Build Coastguard Worker	6:6#144.64.
5350*7c356e86SAndroid Build Coastguard Worker	7:7#121.64.
5351*7c356e86SAndroid Build Coastguard Worker	8:8#100.64.
5352*7c356e86SAndroid Build Coastguard Worker	9:9#71.64.
5353*7c356e86SAndroid Build Coastguard Worker	10:64.64.
5354*7c356e86SAndroid Build Coastguard Worker	11:11#59.64.
5355*7c356e86SAndroid Build Coastguard Worker	12:12#54.64.
5356*7c356e86SAndroid Build Coastguard Worker	13:13#4C.64.
5357*7c356e86SAndroid Build Coastguard Worker	14:14#48.64.
5358*7c356e86SAndroid Build Coastguard Worker	15:15#44.64.
5359*7c356e86SAndroid Build Coastguard Worker	16:16#40.64.
5360*7c356e86SAndroid Build Coastguard Worker	17:17#3D.64.
5361*7c356e86SAndroid Build Coastguard Worker	18:18#3A.64.
5362*7c356e86SAndroid Build Coastguard Worker	19:19#37.64.
5363*7c356e86SAndroid Build Coastguard Worker	20:20#34.64.
5364*7c356e86SAndroid Build Coastguard Worker	21:21#31.64.
5365*7c356e86SAndroid Build Coastguard Worker	22:22#2K.64.
5366*7c356e86SAndroid Build Coastguard Worker	23:23#2I.64.
5367*7c356e86SAndroid Build Coastguard Worker	24:24#2G.64.
5368*7c356e86SAndroid Build Coastguard Worker	25:25#2E.64.
5369*7c356e86SAndroid Build Coastguard Worker	26:26#2C.64.
5370*7c356e86SAndroid Build Coastguard Worker	27:27#2A.64.
5371*7c356e86SAndroid Build Coastguard Worker	28:28#28.64.
5372*7c356e86SAndroid Build Coastguard Worker	29:29#26.64.
5373*7c356e86SAndroid Build Coastguard Worker	30:30#24.64.
5374*7c356e86SAndroid Build Coastguard Worker	31:31#22.64.
5375*7c356e86SAndroid Build Coastguard Worker	32:32#20.64.
5376*7c356e86SAndroid Build Coastguard Worker	33:33#1V.64.
5377*7c356e86SAndroid Build Coastguard Worker	34:34#1U.64.
5378*7c356e86SAndroid Build Coastguard Worker	35:35#1T.64.
5379*7c356e86SAndroid Build Coastguard Worker	36:36#1S.64.
5380*7c356e86SAndroid Build Coastguard Worker	37:64.64.
5381*7c356e86SAndroid Build Coastguard Worker---
5382*7c356e86SAndroid Build Coastguard Workername: integer-arithmetic-span
5383*7c356e86SAndroid Build Coastguard Workerdescription:
5384*7c356e86SAndroid Build Coastguard Worker	Check wraparound and size that is defined in mksh
5385*7c356e86SAndroid Build Coastguard Workercategory: int:32
5386*7c356e86SAndroid Build Coastguard Workerstdin:
5387*7c356e86SAndroid Build Coastguard Worker	echo s:$((2147483647+1)).$(((2147483647*2)+1)).$(((2147483647*2)+2)).
5388*7c356e86SAndroid Build Coastguard Worker	echo u:$((#2147483647+1)).$((#(2147483647*2)+1)).$((#(2147483647*2)+2)).
5389*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5390*7c356e86SAndroid Build Coastguard Worker	s:-2147483648.-1.0.
5391*7c356e86SAndroid Build Coastguard Worker	u:2147483648.4294967295.0.
5392*7c356e86SAndroid Build Coastguard Worker---
5393*7c356e86SAndroid Build Coastguard Workername: integer-arithmetic-span-64
5394*7c356e86SAndroid Build Coastguard Workerdescription:
5395*7c356e86SAndroid Build Coastguard Worker	Check wraparound and size that is defined in mksh
5396*7c356e86SAndroid Build Coastguard Workercategory: int:64
5397*7c356e86SAndroid Build Coastguard Workerstdin:
5398*7c356e86SAndroid Build Coastguard Worker	echo s:$((9223372036854775807+1)).$(((9223372036854775807*2)+1)).$(((9223372036854775807*2)+2)).
5399*7c356e86SAndroid Build Coastguard Worker	echo u:$((#9223372036854775807+1)).$((#(9223372036854775807*2)+1)).$((#(9223372036854775807*2)+2)).
5400*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5401*7c356e86SAndroid Build Coastguard Worker	s:-9223372036854775808.-1.0.
5402*7c356e86SAndroid Build Coastguard Worker	u:9223372036854775808.18446744073709551615.0.
5403*7c356e86SAndroid Build Coastguard Worker---
5404*7c356e86SAndroid Build Coastguard Workername: integer-size-FAIL-to-detect
5405*7c356e86SAndroid Build Coastguard Workerdescription:
5406*7c356e86SAndroid Build Coastguard Worker	Notify the user that their ints are not 32 or 64 bit
5407*7c356e86SAndroid Build Coastguard Workercategory: int:u
5408*7c356e86SAndroid Build Coastguard Workerstdin:
5409*7c356e86SAndroid Build Coastguard Worker	:
5410*7c356e86SAndroid Build Coastguard Worker---
5411*7c356e86SAndroid Build Coastguard Workername: lineno-stdin
5412*7c356e86SAndroid Build Coastguard Workerdescription:
5413*7c356e86SAndroid Build Coastguard Worker	See if $LINENO is updated and can be modified.
5414*7c356e86SAndroid Build Coastguard Workerstdin:
5415*7c356e86SAndroid Build Coastguard Worker	echo A $LINENO
5416*7c356e86SAndroid Build Coastguard Worker	echo B $LINENO
5417*7c356e86SAndroid Build Coastguard Worker	LINENO=20
5418*7c356e86SAndroid Build Coastguard Worker	echo C $LINENO
5419*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5420*7c356e86SAndroid Build Coastguard Worker	A 1
5421*7c356e86SAndroid Build Coastguard Worker	B 2
5422*7c356e86SAndroid Build Coastguard Worker	C 20
5423*7c356e86SAndroid Build Coastguard Worker---
5424*7c356e86SAndroid Build Coastguard Workername: lineno-inc
5425*7c356e86SAndroid Build Coastguard Workerdescription:
5426*7c356e86SAndroid Build Coastguard Worker	See if $LINENO is set for .'d files.
5427*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dotfile"
5428*7c356e86SAndroid Build Coastguard Worker	echo dot A $LINENO
5429*7c356e86SAndroid Build Coastguard Worker	echo dot B $LINENO
5430*7c356e86SAndroid Build Coastguard Worker	LINENO=20
5431*7c356e86SAndroid Build Coastguard Worker	echo dot C $LINENO
5432*7c356e86SAndroid Build Coastguard Workerstdin:
5433*7c356e86SAndroid Build Coastguard Worker	echo A $LINENO
5434*7c356e86SAndroid Build Coastguard Worker	echo B $LINENO
5435*7c356e86SAndroid Build Coastguard Worker	. ./dotfile
5436*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5437*7c356e86SAndroid Build Coastguard Worker	A 1
5438*7c356e86SAndroid Build Coastguard Worker	B 2
5439*7c356e86SAndroid Build Coastguard Worker	dot A 1
5440*7c356e86SAndroid Build Coastguard Worker	dot B 2
5441*7c356e86SAndroid Build Coastguard Worker	dot C 20
5442*7c356e86SAndroid Build Coastguard Worker---
5443*7c356e86SAndroid Build Coastguard Workername: lineno-func
5444*7c356e86SAndroid Build Coastguard Workerdescription:
5445*7c356e86SAndroid Build Coastguard Worker	See if $LINENO is set for commands in a function.
5446*7c356e86SAndroid Build Coastguard Workerstdin:
5447*7c356e86SAndroid Build Coastguard Worker	echo A $LINENO
5448*7c356e86SAndroid Build Coastguard Worker	echo B $LINENO
5449*7c356e86SAndroid Build Coastguard Worker	bar() {
5450*7c356e86SAndroid Build Coastguard Worker	    echo func A $LINENO
5451*7c356e86SAndroid Build Coastguard Worker	    echo func B $LINENO
5452*7c356e86SAndroid Build Coastguard Worker	}
5453*7c356e86SAndroid Build Coastguard Worker	bar
5454*7c356e86SAndroid Build Coastguard Worker	echo C $LINENO
5455*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5456*7c356e86SAndroid Build Coastguard Worker	A 1
5457*7c356e86SAndroid Build Coastguard Worker	B 2
5458*7c356e86SAndroid Build Coastguard Worker	func A 4
5459*7c356e86SAndroid Build Coastguard Worker	func B 5
5460*7c356e86SAndroid Build Coastguard Worker	C 8
5461*7c356e86SAndroid Build Coastguard Worker---
5462*7c356e86SAndroid Build Coastguard Workername: lineno-unset
5463*7c356e86SAndroid Build Coastguard Workerdescription:
5464*7c356e86SAndroid Build Coastguard Worker	See if unsetting LINENO makes it non-magic.
5465*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dotfile"
5466*7c356e86SAndroid Build Coastguard Worker	echo dot A $LINENO
5467*7c356e86SAndroid Build Coastguard Worker	echo dot B $LINENO
5468*7c356e86SAndroid Build Coastguard Workerstdin:
5469*7c356e86SAndroid Build Coastguard Worker	unset LINENO
5470*7c356e86SAndroid Build Coastguard Worker	echo A $LINENO
5471*7c356e86SAndroid Build Coastguard Worker	echo B $LINENO
5472*7c356e86SAndroid Build Coastguard Worker	bar() {
5473*7c356e86SAndroid Build Coastguard Worker	    echo func A $LINENO
5474*7c356e86SAndroid Build Coastguard Worker	    echo func B $LINENO
5475*7c356e86SAndroid Build Coastguard Worker	}
5476*7c356e86SAndroid Build Coastguard Worker	bar
5477*7c356e86SAndroid Build Coastguard Worker	. ./dotfile
5478*7c356e86SAndroid Build Coastguard Worker	echo C $LINENO
5479*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5480*7c356e86SAndroid Build Coastguard Worker	A
5481*7c356e86SAndroid Build Coastguard Worker	B
5482*7c356e86SAndroid Build Coastguard Worker	func A
5483*7c356e86SAndroid Build Coastguard Worker	func B
5484*7c356e86SAndroid Build Coastguard Worker	dot A
5485*7c356e86SAndroid Build Coastguard Worker	dot B
5486*7c356e86SAndroid Build Coastguard Worker	C
5487*7c356e86SAndroid Build Coastguard Worker---
5488*7c356e86SAndroid Build Coastguard Workername: lineno-unset-use
5489*7c356e86SAndroid Build Coastguard Workerdescription:
5490*7c356e86SAndroid Build Coastguard Worker	See if unsetting LINENO makes it non-magic even
5491*7c356e86SAndroid Build Coastguard Worker	when it is re-used.
5492*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dotfile"
5493*7c356e86SAndroid Build Coastguard Worker	echo dot A $LINENO
5494*7c356e86SAndroid Build Coastguard Worker	echo dot B $LINENO
5495*7c356e86SAndroid Build Coastguard Workerstdin:
5496*7c356e86SAndroid Build Coastguard Worker	unset LINENO
5497*7c356e86SAndroid Build Coastguard Worker	LINENO=3
5498*7c356e86SAndroid Build Coastguard Worker	echo A $LINENO
5499*7c356e86SAndroid Build Coastguard Worker	echo B $LINENO
5500*7c356e86SAndroid Build Coastguard Worker	bar() {
5501*7c356e86SAndroid Build Coastguard Worker	    echo func A $LINENO
5502*7c356e86SAndroid Build Coastguard Worker	    echo func B $LINENO
5503*7c356e86SAndroid Build Coastguard Worker	}
5504*7c356e86SAndroid Build Coastguard Worker	bar
5505*7c356e86SAndroid Build Coastguard Worker	. ./dotfile
5506*7c356e86SAndroid Build Coastguard Worker	echo C $LINENO
5507*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5508*7c356e86SAndroid Build Coastguard Worker	A 3
5509*7c356e86SAndroid Build Coastguard Worker	B 3
5510*7c356e86SAndroid Build Coastguard Worker	func A 3
5511*7c356e86SAndroid Build Coastguard Worker	func B 3
5512*7c356e86SAndroid Build Coastguard Worker	dot A 3
5513*7c356e86SAndroid Build Coastguard Worker	dot B 3
5514*7c356e86SAndroid Build Coastguard Worker	C 3
5515*7c356e86SAndroid Build Coastguard Worker---
5516*7c356e86SAndroid Build Coastguard Workername: lineno-trap
5517*7c356e86SAndroid Build Coastguard Workerdescription:
5518*7c356e86SAndroid Build Coastguard Worker	Check if LINENO is tracked in traps
5519*7c356e86SAndroid Build Coastguard Workerstdin:
5520*7c356e86SAndroid Build Coastguard Worker	fail() {
5521*7c356e86SAndroid Build Coastguard Worker		echo "line <$1>"
5522*7c356e86SAndroid Build Coastguard Worker		exit 1
5523*7c356e86SAndroid Build Coastguard Worker	}
5524*7c356e86SAndroid Build Coastguard Worker	trap 'fail $LINENO' INT ERR
5525*7c356e86SAndroid Build Coastguard Worker	false
5526*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5527*7c356e86SAndroid Build Coastguard Worker	line <6>
5528*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
5529*7c356e86SAndroid Build Coastguard Worker---
5530*7c356e86SAndroid Build Coastguard Workername: lineno-eval-alias
5531*7c356e86SAndroid Build Coastguard Workerdescription:
5532*7c356e86SAndroid Build Coastguard Worker	Check if LINENO is trapped in eval and aliases
5533*7c356e86SAndroid Build Coastguard Workerstdin:
5534*7c356e86SAndroid Build Coastguard Worker	${ZSH_VERSION+false} || emulate sh; echo $LINENO
5535*7c356e86SAndroid Build Coastguard Worker	echo $LINENO
5536*7c356e86SAndroid Build Coastguard Worker	eval '	echo $LINENO
5537*7c356e86SAndroid Build Coastguard Worker		echo $LINENO
5538*7c356e86SAndroid Build Coastguard Worker		echo $LINENO'
5539*7c356e86SAndroid Build Coastguard Worker	echo $LINENO
5540*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5541*7c356e86SAndroid Build Coastguard Worker	1
5542*7c356e86SAndroid Build Coastguard Worker	2
5543*7c356e86SAndroid Build Coastguard Worker	3
5544*7c356e86SAndroid Build Coastguard Worker	3
5545*7c356e86SAndroid Build Coastguard Worker	3
5546*7c356e86SAndroid Build Coastguard Worker	6
5547*7c356e86SAndroid Build Coastguard Worker---
5548*7c356e86SAndroid Build Coastguard Workername: unknown-trap
5549*7c356e86SAndroid Build Coastguard Workerdescription:
5550*7c356e86SAndroid Build Coastguard Worker	Ensure unknown traps are not a syntax error
5551*7c356e86SAndroid Build Coastguard Workerstdin:
5552*7c356e86SAndroid Build Coastguard Worker	(
5553*7c356e86SAndroid Build Coastguard Worker	trap "echo trap 1 executed" UNKNOWNSIGNAL || echo "foo"
5554*7c356e86SAndroid Build Coastguard Worker	echo =1
5555*7c356e86SAndroid Build Coastguard Worker	trap "echo trap 2 executed" UNKNOWNSIGNAL EXIT 999999 FNORD
5556*7c356e86SAndroid Build Coastguard Worker	echo = $?
5557*7c356e86SAndroid Build Coastguard Worker	) 2>&1 | sed "s^${__progname%.exe}\.*e*x*e*: <stdin>\[[0-9]*]PROG"
5558*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5559*7c356e86SAndroid Build Coastguard Worker	PROG: trap: bad signal 'UNKNOWNSIGNAL'
5560*7c356e86SAndroid Build Coastguard Worker	foo
5561*7c356e86SAndroid Build Coastguard Worker	=1
5562*7c356e86SAndroid Build Coastguard Worker	PROG: trap: bad signal 'UNKNOWNSIGNAL'
5563*7c356e86SAndroid Build Coastguard Worker	PROG: trap: bad signal '999999'
5564*7c356e86SAndroid Build Coastguard Worker	PROG: trap: bad signal 'FNORD'
5565*7c356e86SAndroid Build Coastguard Worker	= 1
5566*7c356e86SAndroid Build Coastguard Worker	trap 2 executed
5567*7c356e86SAndroid Build Coastguard Worker---
5568*7c356e86SAndroid Build Coastguard Workername: read-IFS-1
5569*7c356e86SAndroid Build Coastguard Workerdescription:
5570*7c356e86SAndroid Build Coastguard Worker	Simple test, default IFS
5571*7c356e86SAndroid Build Coastguard Workerstdin:
5572*7c356e86SAndroid Build Coastguard Worker	echo "A B " > IN
5573*7c356e86SAndroid Build Coastguard Worker	unset x y z
5574*7c356e86SAndroid Build Coastguard Worker	read x y z < IN
5575*7c356e86SAndroid Build Coastguard Worker	echo 1: "x[$x] y[$y] z[$z]"
5576*7c356e86SAndroid Build Coastguard Worker	echo 1a: ${z-z not set}
5577*7c356e86SAndroid Build Coastguard Worker	read x < IN
5578*7c356e86SAndroid Build Coastguard Worker	echo 2: "x[$x]"
5579*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5580*7c356e86SAndroid Build Coastguard Worker	1: x[A] y[B] z[]
5581*7c356e86SAndroid Build Coastguard Worker	1a:
5582*7c356e86SAndroid Build Coastguard Worker	2: x[A B]
5583*7c356e86SAndroid Build Coastguard Worker---
5584*7c356e86SAndroid Build Coastguard Workername: read-IFS-2
5585*7c356e86SAndroid Build Coastguard Workerdescription:
5586*7c356e86SAndroid Build Coastguard Worker	Complex tests, IFS either colon (IFS-NWS) or backslash (tricky)
5587*7c356e86SAndroid Build Coastguard Workerstdin:
5588*7c356e86SAndroid Build Coastguard Worker	n=0
5589*7c356e86SAndroid Build Coastguard Worker	showargs() { print -nr "$1"; shift; for s_arg in "$@"; do print -nr -- " [$s_arg]"; done; print; }
5590*7c356e86SAndroid Build Coastguard Worker	(IFS=\\ a=\<\\\>; showargs 3 $a)
5591*7c356e86SAndroid Build Coastguard Worker	(IFS=: b=\<:\>; showargs 4 $b)
5592*7c356e86SAndroid Build Coastguard Worker	print -r '<\>' | (IFS=\\ read f g; showargs 5 "$f" "$g")
5593*7c356e86SAndroid Build Coastguard Worker	print -r '<\\>' | (IFS=\\ read f g; showargs 6 "$f" "$g")
5594*7c356e86SAndroid Build Coastguard Worker	print '<\\\n>' | (IFS=\\ read f g; showargs 7 "$f" "$g")
5595*7c356e86SAndroid Build Coastguard Worker	print -r '<\>' | (IFS=\\ read f; showargs 8 "$f")
5596*7c356e86SAndroid Build Coastguard Worker	print -r '<\\>' | (IFS=\\ read f; showargs 9 "$f")
5597*7c356e86SAndroid Build Coastguard Worker	print '<\\\n>' | (IFS=\\ read f; showargs 10 "$f")
5598*7c356e86SAndroid Build Coastguard Worker	print -r '<\>' | (IFS=\\ read -r f g; showargs 11 "$f" "$g")
5599*7c356e86SAndroid Build Coastguard Worker	print -r '<\\>' | (IFS=\\ read -r f g; showargs 12 "$f" "$g")
5600*7c356e86SAndroid Build Coastguard Worker	print '<\\\n>' | (IFS=\\ read -r f g; showargs 13 "$f" "$g")
5601*7c356e86SAndroid Build Coastguard Worker	print -r '<\>' | (IFS=\\ read -r f; showargs 14 "$f")
5602*7c356e86SAndroid Build Coastguard Worker	print -r '<\\>' | (IFS=\\ read -r f; showargs 15 "$f")
5603*7c356e86SAndroid Build Coastguard Worker	print '<\\\n>' | (IFS=\\ read -r f; showargs 16 "$f")
5604*7c356e86SAndroid Build Coastguard Worker	print -r '<:>' | (IFS=: read f g; showargs 17 "$f" "$g")
5605*7c356e86SAndroid Build Coastguard Worker	print -r '<::>' | (IFS=: read f g; showargs 18 "$f" "$g")
5606*7c356e86SAndroid Build Coastguard Worker	print '<:\n>' | (IFS=: read f g; showargs 19 "$f" "$g")
5607*7c356e86SAndroid Build Coastguard Worker	print -r '<:>' | (IFS=: read f; showargs 20 "$f")
5608*7c356e86SAndroid Build Coastguard Worker	print -r '<::>' | (IFS=: read f; showargs 21 "$f")
5609*7c356e86SAndroid Build Coastguard Worker	print '<:\n>' | (IFS=: read f; showargs 22 "$f")
5610*7c356e86SAndroid Build Coastguard Worker	print -r '<:>' | (IFS=: read -r f g; showargs 23 "$f" "$g")
5611*7c356e86SAndroid Build Coastguard Worker	print -r '<::>' | (IFS=: read -r f g; showargs 24 "$f" "$g")
5612*7c356e86SAndroid Build Coastguard Worker	print '<:\n>' | (IFS=: read -r f g; showargs 25 "$f" "$g")
5613*7c356e86SAndroid Build Coastguard Worker	print -r '<:>' | (IFS=: read -r f; showargs 26 "$f")
5614*7c356e86SAndroid Build Coastguard Worker	print -r '<::>' | (IFS=: read -r f; showargs 27 "$f")
5615*7c356e86SAndroid Build Coastguard Worker	print '<:\n>' | (IFS=: read -r f; showargs 28 "$f")
5616*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5617*7c356e86SAndroid Build Coastguard Worker	3 [<] [>]
5618*7c356e86SAndroid Build Coastguard Worker	4 [<] [>]
5619*7c356e86SAndroid Build Coastguard Worker	5 [<] [>]
5620*7c356e86SAndroid Build Coastguard Worker	6 [<] [>]
5621*7c356e86SAndroid Build Coastguard Worker	7 [<>] []
5622*7c356e86SAndroid Build Coastguard Worker	8 [<>]
5623*7c356e86SAndroid Build Coastguard Worker	9 [<\>]
5624*7c356e86SAndroid Build Coastguard Worker	10 [<>]
5625*7c356e86SAndroid Build Coastguard Worker	11 [<] [>]
5626*7c356e86SAndroid Build Coastguard Worker	12 [<] [\>]
5627*7c356e86SAndroid Build Coastguard Worker	13 [<] []
5628*7c356e86SAndroid Build Coastguard Worker	14 [<\>]
5629*7c356e86SAndroid Build Coastguard Worker	15 [<\\>]
5630*7c356e86SAndroid Build Coastguard Worker	16 [<]
5631*7c356e86SAndroid Build Coastguard Worker	17 [<] [>]
5632*7c356e86SAndroid Build Coastguard Worker	18 [<] [:>]
5633*7c356e86SAndroid Build Coastguard Worker	19 [<] []
5634*7c356e86SAndroid Build Coastguard Worker	20 [<:>]
5635*7c356e86SAndroid Build Coastguard Worker	21 [<::>]
5636*7c356e86SAndroid Build Coastguard Worker	22 [<]
5637*7c356e86SAndroid Build Coastguard Worker	23 [<] [>]
5638*7c356e86SAndroid Build Coastguard Worker	24 [<] [:>]
5639*7c356e86SAndroid Build Coastguard Worker	25 [<] []
5640*7c356e86SAndroid Build Coastguard Worker	26 [<:>]
5641*7c356e86SAndroid Build Coastguard Worker	27 [<::>]
5642*7c356e86SAndroid Build Coastguard Worker	28 [<]
5643*7c356e86SAndroid Build Coastguard Worker---
5644*7c356e86SAndroid Build Coastguard Workername: read-ksh-1
5645*7c356e86SAndroid Build Coastguard Workerdescription:
5646*7c356e86SAndroid Build Coastguard Worker	If no var specified, REPLY is used
5647*7c356e86SAndroid Build Coastguard Workerstdin:
5648*7c356e86SAndroid Build Coastguard Worker	echo "abc" > IN
5649*7c356e86SAndroid Build Coastguard Worker	read < IN
5650*7c356e86SAndroid Build Coastguard Worker	echo "[$REPLY]";
5651*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5652*7c356e86SAndroid Build Coastguard Worker	[abc]
5653*7c356e86SAndroid Build Coastguard Worker---
5654*7c356e86SAndroid Build Coastguard Workername: read-regress-1
5655*7c356e86SAndroid Build Coastguard Workerdescription:
5656*7c356e86SAndroid Build Coastguard Worker	Check a regression of read
5657*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "foo"
5658*7c356e86SAndroid Build Coastguard Worker	foo bar
5659*7c356e86SAndroid Build Coastguard Worker	baz
5660*7c356e86SAndroid Build Coastguard Worker	blah
5661*7c356e86SAndroid Build Coastguard Workerstdin:
5662*7c356e86SAndroid Build Coastguard Worker	while read a b c; do
5663*7c356e86SAndroid Build Coastguard Worker		read d
5664*7c356e86SAndroid Build Coastguard Worker		break
5665*7c356e86SAndroid Build Coastguard Worker	done <foo
5666*7c356e86SAndroid Build Coastguard Worker	echo "<$a|$b|$c><$d>"
5667*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5668*7c356e86SAndroid Build Coastguard Worker	<foo|bar|><baz>
5669*7c356e86SAndroid Build Coastguard Worker---
5670*7c356e86SAndroid Build Coastguard Workername: read-delim-1
5671*7c356e86SAndroid Build Coastguard Workerdescription:
5672*7c356e86SAndroid Build Coastguard Worker	Check read with delimiters
5673*7c356e86SAndroid Build Coastguard Workerstdin:
5674*7c356e86SAndroid Build Coastguard Worker	emit() {
5675*7c356e86SAndroid Build Coastguard Worker		print -n 'foo bar\tbaz\nblah \0blub\tblech\nmyok meck \0'
5676*7c356e86SAndroid Build Coastguard Worker	}
5677*7c356e86SAndroid Build Coastguard Worker	emit | while IFS= read -d "" foo; do print -r -- "<$foo>"; done
5678*7c356e86SAndroid Build Coastguard Worker	emit | while read -d "" foo; do print -r -- "<$foo>"; done
5679*7c356e86SAndroid Build Coastguard Worker	emit | while read -d "eh?" foo; do print -r -- "<$foo>"; done
5680*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5681*7c356e86SAndroid Build Coastguard Worker	<foo bar	baz
5682*7c356e86SAndroid Build Coastguard Worker	blah >
5683*7c356e86SAndroid Build Coastguard Worker	<blub	blech
5684*7c356e86SAndroid Build Coastguard Worker	myok meck >
5685*7c356e86SAndroid Build Coastguard Worker	<foo bar	baz
5686*7c356e86SAndroid Build Coastguard Worker	blah>
5687*7c356e86SAndroid Build Coastguard Worker	<blub	blech
5688*7c356e86SAndroid Build Coastguard Worker	myok meck>
5689*7c356e86SAndroid Build Coastguard Worker	<foo bar	baz
5690*7c356e86SAndroid Build Coastguard Worker	blah blub	bl>
5691*7c356e86SAndroid Build Coastguard Worker	<ch
5692*7c356e86SAndroid Build Coastguard Worker	myok m>
5693*7c356e86SAndroid Build Coastguard Worker---
5694*7c356e86SAndroid Build Coastguard Workername: read-ext-1
5695*7c356e86SAndroid Build Coastguard Workerdescription:
5696*7c356e86SAndroid Build Coastguard Worker	Check read with number of bytes specified, and -A
5697*7c356e86SAndroid Build Coastguard Workerstdin:
5698*7c356e86SAndroid Build Coastguard Worker	print 'foo\nbar' >x1
5699*7c356e86SAndroid Build Coastguard Worker	print -n x >x2
5700*7c356e86SAndroid Build Coastguard Worker	print 'foo\\ bar baz' >x3
5701*7c356e86SAndroid Build Coastguard Worker	x1a=u; read x1a <x1
5702*7c356e86SAndroid Build Coastguard Worker	x1b=u; read -N-1 x1b <x1
5703*7c356e86SAndroid Build Coastguard Worker	x2a=u; read x2a <x2; r2a=$?
5704*7c356e86SAndroid Build Coastguard Worker	x2b=u; read -N2 x2c <x2; r2b=$?
5705*7c356e86SAndroid Build Coastguard Worker	x2c=u; read -n2 x2c <x2; r2c=$?
5706*7c356e86SAndroid Build Coastguard Worker	x3a=u; read -A x3a <x3
5707*7c356e86SAndroid Build Coastguard Worker	print -r "x1a=<$x1a>"
5708*7c356e86SAndroid Build Coastguard Worker	print -r "x1b=<$x1b>"
5709*7c356e86SAndroid Build Coastguard Worker	print -r "x2a=$r2a<$x2a>"
5710*7c356e86SAndroid Build Coastguard Worker	print -r "x2b=$r2b<$x2b>"
5711*7c356e86SAndroid Build Coastguard Worker	print -r "x2c=$r2c<$x2c>"
5712*7c356e86SAndroid Build Coastguard Worker	print -r "x3a=<${x3a[0]}|${x3a[1]}|${x3a[2]}>"
5713*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5714*7c356e86SAndroid Build Coastguard Worker	x1a=<foo>
5715*7c356e86SAndroid Build Coastguard Worker	x1b=<foo
5716*7c356e86SAndroid Build Coastguard Worker	bar>
5717*7c356e86SAndroid Build Coastguard Worker	x2a=1<x>
5718*7c356e86SAndroid Build Coastguard Worker	x2b=1<u>
5719*7c356e86SAndroid Build Coastguard Worker	x2c=0<x>
5720*7c356e86SAndroid Build Coastguard Worker	x3a=<foo bar|baz|>
5721*7c356e86SAndroid Build Coastguard Worker---
5722*7c356e86SAndroid Build Coastguard Workername: regression-1
5723*7c356e86SAndroid Build Coastguard Workerdescription:
5724*7c356e86SAndroid Build Coastguard Worker	Lex array code had problems with this.
5725*7c356e86SAndroid Build Coastguard Workerstdin:
5726*7c356e86SAndroid Build Coastguard Worker	echo foo[
5727*7c356e86SAndroid Build Coastguard Worker	n=bar
5728*7c356e86SAndroid Build Coastguard Worker	echo "hi[ $n ]=1"
5729*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5730*7c356e86SAndroid Build Coastguard Worker	foo[
5731*7c356e86SAndroid Build Coastguard Worker	hi[ bar ]=1
5732*7c356e86SAndroid Build Coastguard Worker---
5733*7c356e86SAndroid Build Coastguard Workername: regression-2
5734*7c356e86SAndroid Build Coastguard Workerdescription:
5735*7c356e86SAndroid Build Coastguard Worker	When PATH is set before running a command, the new path is
5736*7c356e86SAndroid Build Coastguard Worker	not used in doing the path search
5737*7c356e86SAndroid Build Coastguard Worker		$ echo echo hi > /tmp/q ; chmod a+rx /tmp/q
5738*7c356e86SAndroid Build Coastguard Worker		$ PATH=/tmp q
5739*7c356e86SAndroid Build Coastguard Worker		q: not found
5740*7c356e86SAndroid Build Coastguard Worker		$
5741*7c356e86SAndroid Build Coastguard Worker	in comexec() the two lines
5742*7c356e86SAndroid Build Coastguard Worker		while (*vp != NULL)
5743*7c356e86SAndroid Build Coastguard Worker			(void) typeset(*vp++, xxx, 0);
5744*7c356e86SAndroid Build Coastguard Worker	need to be moved out of the switch to before findcom() is
5745*7c356e86SAndroid Build Coastguard Worker	called - I don't know what this will break.
5746*7c356e86SAndroid Build Coastguard Workerstdin:
5747*7c356e86SAndroid Build Coastguard Worker	: "${PWD:-`pwd 2> /dev/null`}"
5748*7c356e86SAndroid Build Coastguard Worker	: "${PWD:?"PWD not set - cannot do test"}"
5749*7c356e86SAndroid Build Coastguard Worker	mkdir Y
5750*7c356e86SAndroid Build Coastguard Worker	cat > Y/xxxscript << EOF
5751*7c356e86SAndroid Build Coastguard Worker	#!/bin/sh
5752*7c356e86SAndroid Build Coastguard Worker	# Need to restore path so echo can be found (some shells don't have
5753*7c356e86SAndroid Build Coastguard Worker	# it as a built-in)
5754*7c356e86SAndroid Build Coastguard Worker	PATH=\$OLDPATH
5755*7c356e86SAndroid Build Coastguard Worker	echo hi
5756*7c356e86SAndroid Build Coastguard Worker	exit 0
5757*7c356e86SAndroid Build Coastguard Worker	EOF
5758*7c356e86SAndroid Build Coastguard Worker	chmod a+rx Y/xxxscript
5759*7c356e86SAndroid Build Coastguard Worker	export OLDPATH="$PATH"
5760*7c356e86SAndroid Build Coastguard Worker	PATH=$PWD/Y xxxscript
5761*7c356e86SAndroid Build Coastguard Worker	exit $?
5762*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5763*7c356e86SAndroid Build Coastguard Worker	hi
5764*7c356e86SAndroid Build Coastguard Worker---
5765*7c356e86SAndroid Build Coastguard Workername: regression-6
5766*7c356e86SAndroid Build Coastguard Workerdescription:
5767*7c356e86SAndroid Build Coastguard Worker	Parsing of $(..) expressions is non-optimal.  It is
5768*7c356e86SAndroid Build Coastguard Worker	impossible to have any parentheses inside the expression.
5769*7c356e86SAndroid Build Coastguard Worker	I.e.,
5770*7c356e86SAndroid Build Coastguard Worker		$ ksh -c 'echo $(echo \( )'
5771*7c356e86SAndroid Build Coastguard Worker		no closing quote
5772*7c356e86SAndroid Build Coastguard Worker		$ ksh -c 'echo $(echo "(" )'
5773*7c356e86SAndroid Build Coastguard Worker		no closing quote
5774*7c356e86SAndroid Build Coastguard Worker		$
5775*7c356e86SAndroid Build Coastguard Worker	The solution is to hack the parsing clode in lex.c, the
5776*7c356e86SAndroid Build Coastguard Worker	question is how to hack it: should any parentheses be
5777*7c356e86SAndroid Build Coastguard Worker	escaped by a backslash, or should recursive parsing be done
5778*7c356e86SAndroid Build Coastguard Worker	(so quotes could also be used to hide hem).  The former is
5779*7c356e86SAndroid Build Coastguard Worker	easier, the later better...
5780*7c356e86SAndroid Build Coastguard Workerstdin:
5781*7c356e86SAndroid Build Coastguard Worker	echo $(echo \( )
5782*7c356e86SAndroid Build Coastguard Worker	echo $(echo "(" )
5783*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5784*7c356e86SAndroid Build Coastguard Worker	(
5785*7c356e86SAndroid Build Coastguard Worker	(
5786*7c356e86SAndroid Build Coastguard Worker---
5787*7c356e86SAndroid Build Coastguard Workername: regression-9
5788*7c356e86SAndroid Build Coastguard Workerdescription:
5789*7c356e86SAndroid Build Coastguard Worker	Continue in a for loop does not work right:
5790*7c356e86SAndroid Build Coastguard Worker		for i in a b c ; do
5791*7c356e86SAndroid Build Coastguard Worker			if [ $i = b ] ; then
5792*7c356e86SAndroid Build Coastguard Worker				continue
5793*7c356e86SAndroid Build Coastguard Worker			fi
5794*7c356e86SAndroid Build Coastguard Worker			echo $i
5795*7c356e86SAndroid Build Coastguard Worker		done
5796*7c356e86SAndroid Build Coastguard Worker	Prints a forever...
5797*7c356e86SAndroid Build Coastguard Workerstdin:
5798*7c356e86SAndroid Build Coastguard Worker	first=yes
5799*7c356e86SAndroid Build Coastguard Worker	for i in a b c ; do
5800*7c356e86SAndroid Build Coastguard Worker		if [ $i = b ] ; then
5801*7c356e86SAndroid Build Coastguard Worker			if [ $first = no ] ; then
5802*7c356e86SAndroid Build Coastguard Worker				echo 'continue in for loop broken'
5803*7c356e86SAndroid Build Coastguard Worker				break	# hope break isn't broken too :-)
5804*7c356e86SAndroid Build Coastguard Worker			fi
5805*7c356e86SAndroid Build Coastguard Worker			first=no
5806*7c356e86SAndroid Build Coastguard Worker			continue
5807*7c356e86SAndroid Build Coastguard Worker		fi
5808*7c356e86SAndroid Build Coastguard Worker	done
5809*7c356e86SAndroid Build Coastguard Worker	echo bye
5810*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5811*7c356e86SAndroid Build Coastguard Worker	bye
5812*7c356e86SAndroid Build Coastguard Worker---
5813*7c356e86SAndroid Build Coastguard Workername: regression-10
5814*7c356e86SAndroid Build Coastguard Workerdescription:
5815*7c356e86SAndroid Build Coastguard Worker	The following:
5816*7c356e86SAndroid Build Coastguard Worker		set -- `false`
5817*7c356e86SAndroid Build Coastguard Worker		echo $?
5818*7c356e86SAndroid Build Coastguard Worker	should print 0 according to POSIX (dash, bash, ksh93, posh)
5819*7c356e86SAndroid Build Coastguard Worker	but not 0 according to the getopt(1) manual page, ksh88, and
5820*7c356e86SAndroid Build Coastguard Worker	Bourne sh (such as /bin/sh on Solaris).
5821*7c356e86SAndroid Build Coastguard Worker	We honour POSIX except when -o sh is set.
5822*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no
5823*7c356e86SAndroid Build Coastguard Workerstdin:
5824*7c356e86SAndroid Build Coastguard Worker	showf() {
5825*7c356e86SAndroid Build Coastguard Worker		[[ -o posix ]]; FPOSIX=$((1-$?))
5826*7c356e86SAndroid Build Coastguard Worker		[[ -o sh ]]; FSH=$((1-$?))
5827*7c356e86SAndroid Build Coastguard Worker		echo -n "FPOSIX=$FPOSIX FSH=$FSH "
5828*7c356e86SAndroid Build Coastguard Worker	}
5829*7c356e86SAndroid Build Coastguard Worker	set +o posix +o sh
5830*7c356e86SAndroid Build Coastguard Worker	showf
5831*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5832*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5833*7c356e86SAndroid Build Coastguard Worker	set -o sh
5834*7c356e86SAndroid Build Coastguard Worker	showf
5835*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5836*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5837*7c356e86SAndroid Build Coastguard Worker	set -o posix
5838*7c356e86SAndroid Build Coastguard Worker	showf
5839*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5840*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5841*7c356e86SAndroid Build Coastguard Worker	set -o posix -o sh
5842*7c356e86SAndroid Build Coastguard Worker	showf
5843*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5844*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5845*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5846*7c356e86SAndroid Build Coastguard Worker	FPOSIX=0 FSH=0 rv=0
5847*7c356e86SAndroid Build Coastguard Worker	FPOSIX=0 FSH=1 rv=1
5848*7c356e86SAndroid Build Coastguard Worker	FPOSIX=1 FSH=0 rv=0
5849*7c356e86SAndroid Build Coastguard Worker	FPOSIX=1 FSH=1 rv=0
5850*7c356e86SAndroid Build Coastguard Worker---
5851*7c356e86SAndroid Build Coastguard Workername: regression-10-legacy
5852*7c356e86SAndroid Build Coastguard Workerdescription:
5853*7c356e86SAndroid Build Coastguard Worker	The following:
5854*7c356e86SAndroid Build Coastguard Worker		set -- `false`
5855*7c356e86SAndroid Build Coastguard Worker		echo $?
5856*7c356e86SAndroid Build Coastguard Worker	should print 0 according to POSIX (dash, bash, ksh93, posh)
5857*7c356e86SAndroid Build Coastguard Worker	but not 0 according to the getopt(1) manual page, ksh88, and
5858*7c356e86SAndroid Build Coastguard Worker	Bourne sh (such as /bin/sh on Solaris).
5859*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-yes
5860*7c356e86SAndroid Build Coastguard Workerstdin:
5861*7c356e86SAndroid Build Coastguard Worker	showf() {
5862*7c356e86SAndroid Build Coastguard Worker		[[ -o posix ]]; FPOSIX=$((1-$?))
5863*7c356e86SAndroid Build Coastguard Worker		[[ -o sh ]]; FSH=$((1-$?))
5864*7c356e86SAndroid Build Coastguard Worker		echo -n "FPOSIX=$FPOSIX FSH=$FSH "
5865*7c356e86SAndroid Build Coastguard Worker	}
5866*7c356e86SAndroid Build Coastguard Worker	set +o posix +o sh
5867*7c356e86SAndroid Build Coastguard Worker	showf
5868*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5869*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5870*7c356e86SAndroid Build Coastguard Worker	set -o sh
5871*7c356e86SAndroid Build Coastguard Worker	showf
5872*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5873*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5874*7c356e86SAndroid Build Coastguard Worker	set -o posix
5875*7c356e86SAndroid Build Coastguard Worker	showf
5876*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5877*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5878*7c356e86SAndroid Build Coastguard Worker	set -o posix -o sh
5879*7c356e86SAndroid Build Coastguard Worker	showf
5880*7c356e86SAndroid Build Coastguard Worker	set -- `false`
5881*7c356e86SAndroid Build Coastguard Worker	echo rv=$?
5882*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5883*7c356e86SAndroid Build Coastguard Worker	FPOSIX=0 FSH=0 rv=1
5884*7c356e86SAndroid Build Coastguard Worker	FPOSIX=0 FSH=1 rv=1
5885*7c356e86SAndroid Build Coastguard Worker	FPOSIX=1 FSH=0 rv=0
5886*7c356e86SAndroid Build Coastguard Worker	FPOSIX=1 FSH=1 rv=0
5887*7c356e86SAndroid Build Coastguard Worker---
5888*7c356e86SAndroid Build Coastguard Workername: regression-11
5889*7c356e86SAndroid Build Coastguard Workerdescription:
5890*7c356e86SAndroid Build Coastguard Worker	The following:
5891*7c356e86SAndroid Build Coastguard Worker		x=/foo/bar/blah
5892*7c356e86SAndroid Build Coastguard Worker		echo ${x##*/}
5893*7c356e86SAndroid Build Coastguard Worker	should echo blah but on some machines echos /foo/bar/blah.
5894*7c356e86SAndroid Build Coastguard Workerstdin:
5895*7c356e86SAndroid Build Coastguard Worker	x=/foo/bar/blah
5896*7c356e86SAndroid Build Coastguard Worker	echo ${x##*/}
5897*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5898*7c356e86SAndroid Build Coastguard Worker	blah
5899*7c356e86SAndroid Build Coastguard Worker---
5900*7c356e86SAndroid Build Coastguard Workername: regression-12
5901*7c356e86SAndroid Build Coastguard Workerdescription:
5902*7c356e86SAndroid Build Coastguard Worker	Both of the following echos produce the same output under sh/ksh.att:
5903*7c356e86SAndroid Build Coastguard Worker		#!/bin/sh
5904*7c356e86SAndroid Build Coastguard Worker		x="foo	bar"
5905*7c356e86SAndroid Build Coastguard Worker		echo "`echo \"$x\"`"
5906*7c356e86SAndroid Build Coastguard Worker		echo "`echo "$x"`"
5907*7c356e86SAndroid Build Coastguard Worker	pdksh produces different output for the former (foo instead of foo\tbar)
5908*7c356e86SAndroid Build Coastguard Workerstdin:
5909*7c356e86SAndroid Build Coastguard Worker	x="foo	bar"
5910*7c356e86SAndroid Build Coastguard Worker	echo "`echo \"$x\"`"
5911*7c356e86SAndroid Build Coastguard Worker	echo "`echo "$x"`"
5912*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5913*7c356e86SAndroid Build Coastguard Worker	foo	bar
5914*7c356e86SAndroid Build Coastguard Worker	foo	bar
5915*7c356e86SAndroid Build Coastguard Worker---
5916*7c356e86SAndroid Build Coastguard Workername: regression-13
5917*7c356e86SAndroid Build Coastguard Workerdescription:
5918*7c356e86SAndroid Build Coastguard Worker	The following command hangs forever:
5919*7c356e86SAndroid Build Coastguard Worker		$ (: ; cat /etc/termcap) | sleep 2
5920*7c356e86SAndroid Build Coastguard Worker	This is because the shell forks a shell to run the (..) command
5921*7c356e86SAndroid Build Coastguard Worker	and this shell has the pipe open.  When the sleep dies, the cat
5922*7c356e86SAndroid Build Coastguard Worker	doesn't get a SIGPIPE 'cause a process (ie, the second shell)
5923*7c356e86SAndroid Build Coastguard Worker	still has the pipe open.
5924*7c356e86SAndroid Build Coastguard Worker
5925*7c356e86SAndroid Build Coastguard Worker	NOTE: this test provokes a bizarre bug in ksh93 (shell starts reading
5926*7c356e86SAndroid Build Coastguard Worker	      commands from /etc/termcap..)
5927*7c356e86SAndroid Build Coastguard Workertime-limit: 10
5928*7c356e86SAndroid Build Coastguard Workerstdin:
5929*7c356e86SAndroid Build Coastguard Worker	echo A line of text that will be duplicated quite a number of times.> t1
5930*7c356e86SAndroid Build Coastguard Worker	cat t1 t1 t1 t1  t1 t1 t1 t1  t1 t1 t1 t1  t1 t1 t1 t1  > t2
5931*7c356e86SAndroid Build Coastguard Worker	cat t2 t2 t2 t2  t2 t2 t2 t2  t2 t2 t2 t2  t2 t2 t2 t2  > t1
5932*7c356e86SAndroid Build Coastguard Worker	cat t1 t1 t1 t1 > t2
5933*7c356e86SAndroid Build Coastguard Worker	(: ; cat t2 2>/dev/null) | sleep 1
5934*7c356e86SAndroid Build Coastguard Worker---
5935*7c356e86SAndroid Build Coastguard Workername: regression-14
5936*7c356e86SAndroid Build Coastguard Workerdescription:
5937*7c356e86SAndroid Build Coastguard Worker	The command
5938*7c356e86SAndroid Build Coastguard Worker		$ (foobar) 2> /dev/null
5939*7c356e86SAndroid Build Coastguard Worker	generates no output under /bin/sh, but pdksh produces the error
5940*7c356e86SAndroid Build Coastguard Worker		foobar: not found
5941*7c356e86SAndroid Build Coastguard Worker	Also, the command
5942*7c356e86SAndroid Build Coastguard Worker		$ foobar 2> /dev/null
5943*7c356e86SAndroid Build Coastguard Worker	generates an error under /bin/sh and pdksh, but AT&T ksh88 produces
5944*7c356e86SAndroid Build Coastguard Worker	no error (redirected to /dev/null).
5945*7c356e86SAndroid Build Coastguard Workerstdin:
5946*7c356e86SAndroid Build Coastguard Worker	(you/should/not/see/this/error/1) 2> /dev/null
5947*7c356e86SAndroid Build Coastguard Worker	you/should/not/see/this/error/2 2> /dev/null
5948*7c356e86SAndroid Build Coastguard Worker	true
5949*7c356e86SAndroid Build Coastguard Worker---
5950*7c356e86SAndroid Build Coastguard Workername: regression-15
5951*7c356e86SAndroid Build Coastguard Workerdescription:
5952*7c356e86SAndroid Build Coastguard Worker	The command
5953*7c356e86SAndroid Build Coastguard Worker		$ whence foobar
5954*7c356e86SAndroid Build Coastguard Worker	generates a blank line under pdksh and sets the exit status to 0.
5955*7c356e86SAndroid Build Coastguard Worker	AT&T ksh88 generates no output and sets the exit status to 1.  Also,
5956*7c356e86SAndroid Build Coastguard Worker	the command
5957*7c356e86SAndroid Build Coastguard Worker		$ whence foobar cat
5958*7c356e86SAndroid Build Coastguard Worker	generates no output under AT&T ksh88 (pdksh generates a blank line
5959*7c356e86SAndroid Build Coastguard Worker	and /bin/cat).
5960*7c356e86SAndroid Build Coastguard Workerstdin:
5961*7c356e86SAndroid Build Coastguard Worker	whence does/not/exist > /dev/null
5962*7c356e86SAndroid Build Coastguard Worker	echo 1: $?
5963*7c356e86SAndroid Build Coastguard Worker	echo 2: $(whence does/not/exist | wc -l)
5964*7c356e86SAndroid Build Coastguard Worker	echo 3: $(whence does/not/exist cat | wc -l)
5965*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5966*7c356e86SAndroid Build Coastguard Worker	1: 1
5967*7c356e86SAndroid Build Coastguard Worker	2: 0
5968*7c356e86SAndroid Build Coastguard Worker	3: 0
5969*7c356e86SAndroid Build Coastguard Worker---
5970*7c356e86SAndroid Build Coastguard Workername: regression-16
5971*7c356e86SAndroid Build Coastguard Workerdescription:
5972*7c356e86SAndroid Build Coastguard Worker	${var%%expr} seems to be broken in many places.  On the mips
5973*7c356e86SAndroid Build Coastguard Worker	the commands
5974*7c356e86SAndroid Build Coastguard Worker		$ read line < /etc/passwd
5975*7c356e86SAndroid Build Coastguard Worker		$ echo $line
5976*7c356e86SAndroid Build Coastguard Worker		root:0:1:...
5977*7c356e86SAndroid Build Coastguard Worker		$ echo ${line%%:*}
5978*7c356e86SAndroid Build Coastguard Worker		root
5979*7c356e86SAndroid Build Coastguard Worker		$ echo $line
5980*7c356e86SAndroid Build Coastguard Worker		root
5981*7c356e86SAndroid Build Coastguard Worker		$
5982*7c356e86SAndroid Build Coastguard Worker	change the value of line.  On sun4s & pas, the echo ${line%%:*} doesn't
5983*7c356e86SAndroid Build Coastguard Worker	work.  Haven't checked elsewhere...
5984*7c356e86SAndroid Build Coastguard Workerscript:
5985*7c356e86SAndroid Build Coastguard Worker	read x
5986*7c356e86SAndroid Build Coastguard Worker	y=$x
5987*7c356e86SAndroid Build Coastguard Worker	echo ${x%%:*}
5988*7c356e86SAndroid Build Coastguard Worker	echo $x
5989*7c356e86SAndroid Build Coastguard Workerstdin:
5990*7c356e86SAndroid Build Coastguard Worker	root:asdjhasdasjhs:0:1:Root:/:/bin/sh
5991*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
5992*7c356e86SAndroid Build Coastguard Worker	root
5993*7c356e86SAndroid Build Coastguard Worker	root:asdjhasdasjhs:0:1:Root:/:/bin/sh
5994*7c356e86SAndroid Build Coastguard Worker---
5995*7c356e86SAndroid Build Coastguard Workername: regression-17
5996*7c356e86SAndroid Build Coastguard Workerdescription:
5997*7c356e86SAndroid Build Coastguard Worker	The command
5998*7c356e86SAndroid Build Coastguard Worker		. /foo/bar
5999*7c356e86SAndroid Build Coastguard Worker	should set the exit status to non-zero (sh and AT&T ksh88 do).
6000*7c356e86SAndroid Build Coastguard Worker	XXX doting a non existent file is a fatal error for a script
6001*7c356e86SAndroid Build Coastguard Workerstdin:
6002*7c356e86SAndroid Build Coastguard Worker	. does/not/exist
6003*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
6004*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.?/
6005*7c356e86SAndroid Build Coastguard Worker---
6006*7c356e86SAndroid Build Coastguard Workername: regression-19
6007*7c356e86SAndroid Build Coastguard Workerdescription:
6008*7c356e86SAndroid Build Coastguard Worker	Both of the following echos should produce the same thing, but don't:
6009*7c356e86SAndroid Build Coastguard Worker		$ x=foo/bar
6010*7c356e86SAndroid Build Coastguard Worker		$ echo ${x%/*}
6011*7c356e86SAndroid Build Coastguard Worker		foo
6012*7c356e86SAndroid Build Coastguard Worker		$ echo "${x%/*}"
6013*7c356e86SAndroid Build Coastguard Worker		foo/bar
6014*7c356e86SAndroid Build Coastguard Workerstdin:
6015*7c356e86SAndroid Build Coastguard Worker	x=foo/bar
6016*7c356e86SAndroid Build Coastguard Worker	echo "${x%/*}"
6017*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6018*7c356e86SAndroid Build Coastguard Worker	foo
6019*7c356e86SAndroid Build Coastguard Worker---
6020*7c356e86SAndroid Build Coastguard Workername: regression-21
6021*7c356e86SAndroid Build Coastguard Workerdescription:
6022*7c356e86SAndroid Build Coastguard Worker	backslash does not work as expected in case labels:
6023*7c356e86SAndroid Build Coastguard Worker	$ x='-x'
6024*7c356e86SAndroid Build Coastguard Worker	$ case $x in
6025*7c356e86SAndroid Build Coastguard Worker	-\?) echo hi
6026*7c356e86SAndroid Build Coastguard Worker	esac
6027*7c356e86SAndroid Build Coastguard Worker	hi
6028*7c356e86SAndroid Build Coastguard Worker	$ x='-?'
6029*7c356e86SAndroid Build Coastguard Worker	$ case $x in
6030*7c356e86SAndroid Build Coastguard Worker	-\\?) echo hi
6031*7c356e86SAndroid Build Coastguard Worker	esac
6032*7c356e86SAndroid Build Coastguard Worker	hi
6033*7c356e86SAndroid Build Coastguard Worker	$
6034*7c356e86SAndroid Build Coastguard Workerstdin:
6035*7c356e86SAndroid Build Coastguard Worker	case -x in
6036*7c356e86SAndroid Build Coastguard Worker	-\?)	echo fail
6037*7c356e86SAndroid Build Coastguard Worker	esac
6038*7c356e86SAndroid Build Coastguard Worker---
6039*7c356e86SAndroid Build Coastguard Workername: regression-22
6040*7c356e86SAndroid Build Coastguard Workerdescription:
6041*7c356e86SAndroid Build Coastguard Worker	Quoting backquotes inside backquotes doesn't work:
6042*7c356e86SAndroid Build Coastguard Worker	$ echo `echo hi \`echo there\` folks`
6043*7c356e86SAndroid Build Coastguard Worker	asks for more info.  sh and AT&T ksh88 both echo
6044*7c356e86SAndroid Build Coastguard Worker	hi there folks
6045*7c356e86SAndroid Build Coastguard Workerstdin:
6046*7c356e86SAndroid Build Coastguard Worker	echo `echo hi \`echo there\` folks`
6047*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6048*7c356e86SAndroid Build Coastguard Worker	hi there folks
6049*7c356e86SAndroid Build Coastguard Worker---
6050*7c356e86SAndroid Build Coastguard Workername: regression-23
6051*7c356e86SAndroid Build Coastguard Workerdescription:
6052*7c356e86SAndroid Build Coastguard Worker	)) is not treated `correctly':
6053*7c356e86SAndroid Build Coastguard Worker	    $ (echo hi ; (echo there ; echo folks))
6054*7c356e86SAndroid Build Coastguard Worker	    missing ((
6055*7c356e86SAndroid Build Coastguard Worker	    $
6056*7c356e86SAndroid Build Coastguard Worker	instead of (as sh and ksh.att)
6057*7c356e86SAndroid Build Coastguard Worker	    $ (echo hi ; (echo there ; echo folks))
6058*7c356e86SAndroid Build Coastguard Worker	    hi
6059*7c356e86SAndroid Build Coastguard Worker	    there
6060*7c356e86SAndroid Build Coastguard Worker	    folks
6061*7c356e86SAndroid Build Coastguard Worker	    $
6062*7c356e86SAndroid Build Coastguard Workerstdin:
6063*7c356e86SAndroid Build Coastguard Worker	( : ; ( : ; echo hi))
6064*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6065*7c356e86SAndroid Build Coastguard Worker	hi
6066*7c356e86SAndroid Build Coastguard Worker---
6067*7c356e86SAndroid Build Coastguard Workername: regression-25
6068*7c356e86SAndroid Build Coastguard Workerdescription:
6069*7c356e86SAndroid Build Coastguard Worker	Check reading stdin in a while loop.  The read should only read
6070*7c356e86SAndroid Build Coastguard Worker	a single line, not a whole stdio buffer; the cat should get
6071*7c356e86SAndroid Build Coastguard Worker	the rest.
6072*7c356e86SAndroid Build Coastguard Workerstdin:
6073*7c356e86SAndroid Build Coastguard Worker	(echo a; echo b) | while read x ; do
6074*7c356e86SAndroid Build Coastguard Worker	    echo $x
6075*7c356e86SAndroid Build Coastguard Worker	    cat > /dev/null
6076*7c356e86SAndroid Build Coastguard Worker	done
6077*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6078*7c356e86SAndroid Build Coastguard Worker	a
6079*7c356e86SAndroid Build Coastguard Worker---
6080*7c356e86SAndroid Build Coastguard Workername: regression-26
6081*7c356e86SAndroid Build Coastguard Workerdescription:
6082*7c356e86SAndroid Build Coastguard Worker	Check reading stdin in a while loop.  The read should read both
6083*7c356e86SAndroid Build Coastguard Worker	lines, not just the first.
6084*7c356e86SAndroid Build Coastguard Workerscript:
6085*7c356e86SAndroid Build Coastguard Worker	a=
6086*7c356e86SAndroid Build Coastguard Worker	while [ "$a" != xxx ] ; do
6087*7c356e86SAndroid Build Coastguard Worker	    last=$x
6088*7c356e86SAndroid Build Coastguard Worker	    read x
6089*7c356e86SAndroid Build Coastguard Worker	    cat /dev/null | sed 's/x/y/'
6090*7c356e86SAndroid Build Coastguard Worker	    a=x$a
6091*7c356e86SAndroid Build Coastguard Worker	done
6092*7c356e86SAndroid Build Coastguard Worker	echo $last
6093*7c356e86SAndroid Build Coastguard Workerstdin:
6094*7c356e86SAndroid Build Coastguard Worker	a
6095*7c356e86SAndroid Build Coastguard Worker	b
6096*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6097*7c356e86SAndroid Build Coastguard Worker	b
6098*7c356e86SAndroid Build Coastguard Worker---
6099*7c356e86SAndroid Build Coastguard Workername: regression-27
6100*7c356e86SAndroid Build Coastguard Workerdescription:
6101*7c356e86SAndroid Build Coastguard Worker	The command
6102*7c356e86SAndroid Build Coastguard Worker		. /does/not/exist
6103*7c356e86SAndroid Build Coastguard Worker	should cause a script to exit.
6104*7c356e86SAndroid Build Coastguard Workerstdin:
6105*7c356e86SAndroid Build Coastguard Worker	. does/not/exist
6106*7c356e86SAndroid Build Coastguard Worker	echo hi
6107*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
6108*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /does\/not\/exist/
6109*7c356e86SAndroid Build Coastguard Worker---
6110*7c356e86SAndroid Build Coastguard Workername: regression-28
6111*7c356e86SAndroid Build Coastguard Workerdescription:
6112*7c356e86SAndroid Build Coastguard Worker	variable assignments not detected well
6113*7c356e86SAndroid Build Coastguard Workerstdin:
6114*7c356e86SAndroid Build Coastguard Worker	a.x=1 echo hi
6115*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
6116*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /a\.x=1/
6117*7c356e86SAndroid Build Coastguard Worker---
6118*7c356e86SAndroid Build Coastguard Workername: regression-29
6119*7c356e86SAndroid Build Coastguard Workerdescription:
6120*7c356e86SAndroid Build Coastguard Worker	alias expansion different from AT&T ksh88
6121*7c356e86SAndroid Build Coastguard Workerstdin:
6122*7c356e86SAndroid Build Coastguard Worker	alias a='for ' b='i in'
6123*7c356e86SAndroid Build Coastguard Worker	a b hi ; do echo $i ; done
6124*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6125*7c356e86SAndroid Build Coastguard Worker	hi
6126*7c356e86SAndroid Build Coastguard Worker---
6127*7c356e86SAndroid Build Coastguard Workername: regression-30
6128*7c356e86SAndroid Build Coastguard Workerdescription:
6129*7c356e86SAndroid Build Coastguard Worker	strange characters allowed inside ${...}
6130*7c356e86SAndroid Build Coastguard Workerstdin:
6131*7c356e86SAndroid Build Coastguard Worker	echo ${a{b}}
6132*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
6133*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.?/
6134*7c356e86SAndroid Build Coastguard Worker---
6135*7c356e86SAndroid Build Coastguard Workername: regression-31
6136*7c356e86SAndroid Build Coastguard Workerdescription:
6137*7c356e86SAndroid Build Coastguard Worker	Does read handle partial lines correctly
6138*7c356e86SAndroid Build Coastguard Workerscript:
6139*7c356e86SAndroid Build Coastguard Worker	a= ret=
6140*7c356e86SAndroid Build Coastguard Worker	while [ "$a" != xxx ] ; do
6141*7c356e86SAndroid Build Coastguard Worker	    read x y z
6142*7c356e86SAndroid Build Coastguard Worker	    ret=$?
6143*7c356e86SAndroid Build Coastguard Worker	    a=x$a
6144*7c356e86SAndroid Build Coastguard Worker	done
6145*7c356e86SAndroid Build Coastguard Worker	echo "[$x]"
6146*7c356e86SAndroid Build Coastguard Worker	echo $ret
6147*7c356e86SAndroid Build Coastguard Workerstdin: !
6148*7c356e86SAndroid Build Coastguard Worker	a A aA
6149*7c356e86SAndroid Build Coastguard Worker	b B Bb
6150*7c356e86SAndroid Build Coastguard Worker	c
6151*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6152*7c356e86SAndroid Build Coastguard Worker	[c]
6153*7c356e86SAndroid Build Coastguard Worker	1
6154*7c356e86SAndroid Build Coastguard Worker---
6155*7c356e86SAndroid Build Coastguard Workername: regression-32
6156*7c356e86SAndroid Build Coastguard Workerdescription:
6157*7c356e86SAndroid Build Coastguard Worker	Does read set variables to null at eof?
6158*7c356e86SAndroid Build Coastguard Workerscript:
6159*7c356e86SAndroid Build Coastguard Worker	a=
6160*7c356e86SAndroid Build Coastguard Worker	while [ "$a" != xxx ] ; do
6161*7c356e86SAndroid Build Coastguard Worker	    read x y z
6162*7c356e86SAndroid Build Coastguard Worker	    a=x$a
6163*7c356e86SAndroid Build Coastguard Worker	done
6164*7c356e86SAndroid Build Coastguard Worker	echo 1: ${x-x not set} ${y-y not set} ${z-z not set}
6165*7c356e86SAndroid Build Coastguard Worker	echo 2: ${x:+x not null} ${y:+y not null} ${z:+z not null}
6166*7c356e86SAndroid Build Coastguard Workerstdin:
6167*7c356e86SAndroid Build Coastguard Worker	a A Aa
6168*7c356e86SAndroid Build Coastguard Worker	b B Bb
6169*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6170*7c356e86SAndroid Build Coastguard Worker	1:
6171*7c356e86SAndroid Build Coastguard Worker	2:
6172*7c356e86SAndroid Build Coastguard Worker---
6173*7c356e86SAndroid Build Coastguard Workername: regression-33
6174*7c356e86SAndroid Build Coastguard Workerdescription:
6175*7c356e86SAndroid Build Coastguard Worker	Does umask print a leading 0 when umask is 3 digits?
6176*7c356e86SAndroid Build Coastguard Workerstdin:
6177*7c356e86SAndroid Build Coastguard Worker	# on MiNT, the first umask call seems to fail
6178*7c356e86SAndroid Build Coastguard Worker	umask 022
6179*7c356e86SAndroid Build Coastguard Worker	# now, the test proper
6180*7c356e86SAndroid Build Coastguard Worker	umask 222
6181*7c356e86SAndroid Build Coastguard Worker	umask
6182*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6183*7c356e86SAndroid Build Coastguard Worker	0222
6184*7c356e86SAndroid Build Coastguard Worker---
6185*7c356e86SAndroid Build Coastguard Workername: regression-35
6186*7c356e86SAndroid Build Coastguard Workerdescription:
6187*7c356e86SAndroid Build Coastguard Worker	Temporay files used for here-docs in functions get trashed after
6188*7c356e86SAndroid Build Coastguard Worker	the function is parsed (before it is executed)
6189*7c356e86SAndroid Build Coastguard Workerstdin:
6190*7c356e86SAndroid Build Coastguard Worker	f1() {
6191*7c356e86SAndroid Build Coastguard Worker		cat <<- EOF
6192*7c356e86SAndroid Build Coastguard Worker			F1
6193*7c356e86SAndroid Build Coastguard Worker		EOF
6194*7c356e86SAndroid Build Coastguard Worker		f2() {
6195*7c356e86SAndroid Build Coastguard Worker			cat <<- EOF
6196*7c356e86SAndroid Build Coastguard Worker				F2
6197*7c356e86SAndroid Build Coastguard Worker			EOF
6198*7c356e86SAndroid Build Coastguard Worker		}
6199*7c356e86SAndroid Build Coastguard Worker	}
6200*7c356e86SAndroid Build Coastguard Worker	f1
6201*7c356e86SAndroid Build Coastguard Worker	f2
6202*7c356e86SAndroid Build Coastguard Worker	unset -f f1
6203*7c356e86SAndroid Build Coastguard Worker	f2
6204*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6205*7c356e86SAndroid Build Coastguard Worker	F1
6206*7c356e86SAndroid Build Coastguard Worker	F2
6207*7c356e86SAndroid Build Coastguard Worker	F2
6208*7c356e86SAndroid Build Coastguard Worker---
6209*7c356e86SAndroid Build Coastguard Workername: regression-36
6210*7c356e86SAndroid Build Coastguard Workerdescription:
6211*7c356e86SAndroid Build Coastguard Worker	Command substitution breaks reading in while loop
6212*7c356e86SAndroid Build Coastguard Worker	(test from <[email protected]>)
6213*7c356e86SAndroid Build Coastguard Workerstdin:
6214*7c356e86SAndroid Build Coastguard Worker	(echo abcdef; echo; echo 123) |
6215*7c356e86SAndroid Build Coastguard Worker	    while read line
6216*7c356e86SAndroid Build Coastguard Worker	    do
6217*7c356e86SAndroid Build Coastguard Worker	      # the following line breaks it
6218*7c356e86SAndroid Build Coastguard Worker	      c=`echo $line | wc -c`
6219*7c356e86SAndroid Build Coastguard Worker	      echo $c
6220*7c356e86SAndroid Build Coastguard Worker	    done
6221*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6222*7c356e86SAndroid Build Coastguard Worker	7
6223*7c356e86SAndroid Build Coastguard Worker	1
6224*7c356e86SAndroid Build Coastguard Worker	4
6225*7c356e86SAndroid Build Coastguard Worker---
6226*7c356e86SAndroid Build Coastguard Workername: regression-37
6227*7c356e86SAndroid Build Coastguard Workerdescription:
6228*7c356e86SAndroid Build Coastguard Worker	Machines with broken times() (reported by <[email protected]>)
6229*7c356e86SAndroid Build Coastguard Worker	time does not report correct real time
6230*7c356e86SAndroid Build Coastguard Workerstdin:
6231*7c356e86SAndroid Build Coastguard Worker	time sleep 1
6232*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: !/^\s*0\.0[\s\d]+real|^\s*real[\s]+0+\.0/
6233*7c356e86SAndroid Build Coastguard Worker---
6234*7c356e86SAndroid Build Coastguard Workername: regression-38
6235*7c356e86SAndroid Build Coastguard Workerdescription:
6236*7c356e86SAndroid Build Coastguard Worker	set -e doesn't ignore exit codes for if/while/until/&&/||/!.
6237*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
6238*7c356e86SAndroid Build Coastguard Workerstdin:
6239*7c356e86SAndroid Build Coastguard Worker	if false; then echo hi ; fi
6240*7c356e86SAndroid Build Coastguard Worker	false || true
6241*7c356e86SAndroid Build Coastguard Worker	false && true
6242*7c356e86SAndroid Build Coastguard Worker	while false; do echo hi; done
6243*7c356e86SAndroid Build Coastguard Worker	echo ok
6244*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6245*7c356e86SAndroid Build Coastguard Worker	ok
6246*7c356e86SAndroid Build Coastguard Worker---
6247*7c356e86SAndroid Build Coastguard Workername: regression-39
6248*7c356e86SAndroid Build Coastguard Workerdescription:
6249*7c356e86SAndroid Build Coastguard Worker	Only posh and oksh(2013-07) say “hi” below; FreeBSD sh,
6250*7c356e86SAndroid Build Coastguard Worker	GNU bash in POSIX mode, dash, ksh93, mksh don’t. All of
6251*7c356e86SAndroid Build Coastguard Worker	them exit 0. The POSIX behaviour is needed by BSD make.
6252*7c356e86SAndroid Build Coastguard Workerstdin:
6253*7c356e86SAndroid Build Coastguard Worker	set -e
6254*7c356e86SAndroid Build Coastguard Worker	echo `false; echo hi` $(<this-file-does-not-exist)
6255*7c356e86SAndroid Build Coastguard Worker	echo $?
6256*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6257*7c356e86SAndroid Build Coastguard Worker
6258*7c356e86SAndroid Build Coastguard Worker	0
6259*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /this-file-does-not-exist/
6260*7c356e86SAndroid Build Coastguard Worker---
6261*7c356e86SAndroid Build Coastguard Workername: regression-40
6262*7c356e86SAndroid Build Coastguard Workerdescription:
6263*7c356e86SAndroid Build Coastguard Worker	This used to cause a core dump
6264*7c356e86SAndroid Build Coastguard Workerenv-setup: !RANDOM=12!
6265*7c356e86SAndroid Build Coastguard Workerstdin:
6266*7c356e86SAndroid Build Coastguard Worker	echo hi
6267*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6268*7c356e86SAndroid Build Coastguard Worker	hi
6269*7c356e86SAndroid Build Coastguard Worker---
6270*7c356e86SAndroid Build Coastguard Workername: regression-41
6271*7c356e86SAndroid Build Coastguard Workerdescription:
6272*7c356e86SAndroid Build Coastguard Worker	foo should be set to bar (should not be empty)
6273*7c356e86SAndroid Build Coastguard Workerstdin:
6274*7c356e86SAndroid Build Coastguard Worker	foo=`
6275*7c356e86SAndroid Build Coastguard Worker	echo bar`
6276*7c356e86SAndroid Build Coastguard Worker	echo "($foo)"
6277*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6278*7c356e86SAndroid Build Coastguard Worker	(bar)
6279*7c356e86SAndroid Build Coastguard Worker---
6280*7c356e86SAndroid Build Coastguard Workername: regression-42
6281*7c356e86SAndroid Build Coastguard Workerdescription:
6282*7c356e86SAndroid Build Coastguard Worker	Can't use command line assignments to assign readonly parameters.
6283*7c356e86SAndroid Build Coastguard Workerstdin:
6284*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \
6285*7c356e86SAndroid Build Coastguard Worker	    'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \
6286*7c356e86SAndroid Build Coastguard Worker	    done >env; chmod +x env; PATH=.$PATHSEP$PATH
6287*7c356e86SAndroid Build Coastguard Worker	foo=bar
6288*7c356e86SAndroid Build Coastguard Worker	readonly foo
6289*7c356e86SAndroid Build Coastguard Worker	foo=stuff env | grep '^foo'
6290*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
6291*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
6292*7c356e86SAndroid Build Coastguard Worker	/read-only/
6293*7c356e86SAndroid Build Coastguard Worker---
6294*7c356e86SAndroid Build Coastguard Workername: regression-43
6295*7c356e86SAndroid Build Coastguard Workerdescription:
6296*7c356e86SAndroid Build Coastguard Worker	Can subshells be prefixed by redirections (historical shells allow
6297*7c356e86SAndroid Build Coastguard Worker	this)
6298*7c356e86SAndroid Build Coastguard Workerstdin:
6299*7c356e86SAndroid Build Coastguard Worker	< /dev/null (sed 's/^/X/')
6300*7c356e86SAndroid Build Coastguard Worker---
6301*7c356e86SAndroid Build Coastguard Workername: regression-45
6302*7c356e86SAndroid Build Coastguard Workerdescription:
6303*7c356e86SAndroid Build Coastguard Worker	Parameter assignments with [] recognised correctly
6304*7c356e86SAndroid Build Coastguard Workerstdin:
6305*7c356e86SAndroid Build Coastguard Worker	FOO=*[12]
6306*7c356e86SAndroid Build Coastguard Worker	BAR=abc[
6307*7c356e86SAndroid Build Coastguard Worker	MORE=[abc]
6308*7c356e86SAndroid Build Coastguard Worker	JUNK=a[bc
6309*7c356e86SAndroid Build Coastguard Worker	echo "<$FOO>"
6310*7c356e86SAndroid Build Coastguard Worker	echo "<$BAR>"
6311*7c356e86SAndroid Build Coastguard Worker	echo "<$MORE>"
6312*7c356e86SAndroid Build Coastguard Worker	echo "<$JUNK>"
6313*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6314*7c356e86SAndroid Build Coastguard Worker	<*[12]>
6315*7c356e86SAndroid Build Coastguard Worker	<abc[>
6316*7c356e86SAndroid Build Coastguard Worker	<[abc]>
6317*7c356e86SAndroid Build Coastguard Worker	<a[bc>
6318*7c356e86SAndroid Build Coastguard Worker---
6319*7c356e86SAndroid Build Coastguard Workername: regression-46
6320*7c356e86SAndroid Build Coastguard Workerdescription:
6321*7c356e86SAndroid Build Coastguard Worker	Check that alias expansion works in command substitutions and
6322*7c356e86SAndroid Build Coastguard Worker	at the end of file.
6323*7c356e86SAndroid Build Coastguard Workerstdin:
6324*7c356e86SAndroid Build Coastguard Worker	alias x='echo hi'
6325*7c356e86SAndroid Build Coastguard Worker	FOO="`x` "
6326*7c356e86SAndroid Build Coastguard Worker	echo "[$FOO]"
6327*7c356e86SAndroid Build Coastguard Worker	x
6328*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6329*7c356e86SAndroid Build Coastguard Worker	[hi ]
6330*7c356e86SAndroid Build Coastguard Worker	hi
6331*7c356e86SAndroid Build Coastguard Worker---
6332*7c356e86SAndroid Build Coastguard Workername: regression-47
6333*7c356e86SAndroid Build Coastguard Workerdescription:
6334*7c356e86SAndroid Build Coastguard Worker	Check that aliases are fully read.
6335*7c356e86SAndroid Build Coastguard Workerstdin:
6336*7c356e86SAndroid Build Coastguard Worker	alias x='echo hi;
6337*7c356e86SAndroid Build Coastguard Worker	echo there'
6338*7c356e86SAndroid Build Coastguard Worker	x
6339*7c356e86SAndroid Build Coastguard Worker	echo done
6340*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6341*7c356e86SAndroid Build Coastguard Worker	hi
6342*7c356e86SAndroid Build Coastguard Worker	there
6343*7c356e86SAndroid Build Coastguard Worker	done
6344*7c356e86SAndroid Build Coastguard Worker---
6345*7c356e86SAndroid Build Coastguard Workername: regression-48
6346*7c356e86SAndroid Build Coastguard Workerdescription:
6347*7c356e86SAndroid Build Coastguard Worker	Check that (here doc) temp files are not left behind after an exec.
6348*7c356e86SAndroid Build Coastguard Workerstdin:
6349*7c356e86SAndroid Build Coastguard Worker	mkdir foo || exit 1
6350*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD/foo "$__progname" <<- 'EOF'
6351*7c356e86SAndroid Build Coastguard Worker		x() {
6352*7c356e86SAndroid Build Coastguard Worker			sed 's/^/X /' << E_O_F
6353*7c356e86SAndroid Build Coastguard Worker			hi
6354*7c356e86SAndroid Build Coastguard Worker			there
6355*7c356e86SAndroid Build Coastguard Worker			folks
6356*7c356e86SAndroid Build Coastguard Worker			E_O_F
6357*7c356e86SAndroid Build Coastguard Worker			echo "done ($?)"
6358*7c356e86SAndroid Build Coastguard Worker		}
6359*7c356e86SAndroid Build Coastguard Worker		echo=echo; [ -x /bin/echo ] && echo=/bin/echo
6360*7c356e86SAndroid Build Coastguard Worker		exec $echo subtest-1 hi
6361*7c356e86SAndroid Build Coastguard Worker	EOF
6362*7c356e86SAndroid Build Coastguard Worker	echo subtest-1 foo/*
6363*7c356e86SAndroid Build Coastguard Worker	TMPDIR=$PWD/foo "$__progname" <<- 'EOF'
6364*7c356e86SAndroid Build Coastguard Worker		echo=echo; [ -x /bin/echo ] && echo=/bin/echo
6365*7c356e86SAndroid Build Coastguard Worker		sed 's/^/X /' << E_O_F; exec $echo subtest-2 hi
6366*7c356e86SAndroid Build Coastguard Worker		a
6367*7c356e86SAndroid Build Coastguard Worker		few
6368*7c356e86SAndroid Build Coastguard Worker		lines
6369*7c356e86SAndroid Build Coastguard Worker		E_O_F
6370*7c356e86SAndroid Build Coastguard Worker	EOF
6371*7c356e86SAndroid Build Coastguard Worker	echo subtest-2 foo/*
6372*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6373*7c356e86SAndroid Build Coastguard Worker	subtest-1 hi
6374*7c356e86SAndroid Build Coastguard Worker	subtest-1 foo/*
6375*7c356e86SAndroid Build Coastguard Worker	X a
6376*7c356e86SAndroid Build Coastguard Worker	X few
6377*7c356e86SAndroid Build Coastguard Worker	X lines
6378*7c356e86SAndroid Build Coastguard Worker	subtest-2 hi
6379*7c356e86SAndroid Build Coastguard Worker	subtest-2 foo/*
6380*7c356e86SAndroid Build Coastguard Worker---
6381*7c356e86SAndroid Build Coastguard Workername: regression-49
6382*7c356e86SAndroid Build Coastguard Workerdescription:
6383*7c356e86SAndroid Build Coastguard Worker	Check that unset params with attributes are reported by set, those
6384*7c356e86SAndroid Build Coastguard Worker	sans attributes are not.
6385*7c356e86SAndroid Build Coastguard Workerstdin:
6386*7c356e86SAndroid Build Coastguard Worker	unset FOO BAR
6387*7c356e86SAndroid Build Coastguard Worker	echo X$FOO
6388*7c356e86SAndroid Build Coastguard Worker	export BAR
6389*7c356e86SAndroid Build Coastguard Worker	typeset -i BLAH
6390*7c356e86SAndroid Build Coastguard Worker	set | grep FOO
6391*7c356e86SAndroid Build Coastguard Worker	set | grep BAR
6392*7c356e86SAndroid Build Coastguard Worker	set | grep BLAH
6393*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6394*7c356e86SAndroid Build Coastguard Worker	X
6395*7c356e86SAndroid Build Coastguard Worker	BAR
6396*7c356e86SAndroid Build Coastguard Worker	BLAH
6397*7c356e86SAndroid Build Coastguard Worker---
6398*7c356e86SAndroid Build Coastguard Workername: regression-50
6399*7c356e86SAndroid Build Coastguard Workerdescription:
6400*7c356e86SAndroid Build Coastguard Worker	Check that aliases do not use continuation prompt after trailing
6401*7c356e86SAndroid Build Coastguard Worker	semi-colon.
6402*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf"
6403*7c356e86SAndroid Build Coastguard Worker	PS1=Y
6404*7c356e86SAndroid Build Coastguard Worker	PS2=X
6405*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf!
6406*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
6407*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
6408*7c356e86SAndroid Build Coastguard Workerstdin:
6409*7c356e86SAndroid Build Coastguard Worker	alias foo='echo hi ; '
6410*7c356e86SAndroid Build Coastguard Worker	foo
6411*7c356e86SAndroid Build Coastguard Worker	foo echo there
6412*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6413*7c356e86SAndroid Build Coastguard Worker	hi
6414*7c356e86SAndroid Build Coastguard Worker	hi
6415*7c356e86SAndroid Build Coastguard Worker	there
6416*7c356e86SAndroid Build Coastguard Workerexpected-stderr: !
6417*7c356e86SAndroid Build Coastguard Worker	YYYY
6418*7c356e86SAndroid Build Coastguard Worker---
6419*7c356e86SAndroid Build Coastguard Workername: regression-51
6420*7c356e86SAndroid Build Coastguard Workerdescription:
6421*7c356e86SAndroid Build Coastguard Worker	Check that set allows both +o and -o options on same command line.
6422*7c356e86SAndroid Build Coastguard Workerstdin:
6423*7c356e86SAndroid Build Coastguard Worker	set a b c
6424*7c356e86SAndroid Build Coastguard Worker	set -o noglob +o allexport
6425*7c356e86SAndroid Build Coastguard Worker	echo A: $*, *
6426*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6427*7c356e86SAndroid Build Coastguard Worker	A: a b c, *
6428*7c356e86SAndroid Build Coastguard Worker---
6429*7c356e86SAndroid Build Coastguard Workername: regression-52
6430*7c356e86SAndroid Build Coastguard Workerdescription:
6431*7c356e86SAndroid Build Coastguard Worker	Check that globbing works in pipelined commands
6432*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf"
6433*7c356e86SAndroid Build Coastguard Worker	PS1=P
6434*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc"
6435*7c356e86SAndroid Build Coastguard Worker	stuff
6436*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf!
6437*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
6438*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
6439*7c356e86SAndroid Build Coastguard Workerstdin:
6440*7c356e86SAndroid Build Coastguard Worker	sed 's/^/X /' < ab*
6441*7c356e86SAndroid Build Coastguard Worker	echo mark 1
6442*7c356e86SAndroid Build Coastguard Worker	sed 's/^/X /' < ab* | sed 's/^/Y /'
6443*7c356e86SAndroid Build Coastguard Worker	echo mark 2
6444*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6445*7c356e86SAndroid Build Coastguard Worker	X stuff
6446*7c356e86SAndroid Build Coastguard Worker	mark 1
6447*7c356e86SAndroid Build Coastguard Worker	Y X stuff
6448*7c356e86SAndroid Build Coastguard Worker	mark 2
6449*7c356e86SAndroid Build Coastguard Workerexpected-stderr: !
6450*7c356e86SAndroid Build Coastguard Worker	PPPPP
6451*7c356e86SAndroid Build Coastguard Worker---
6452*7c356e86SAndroid Build Coastguard Workername: regression-53
6453*7c356e86SAndroid Build Coastguard Workerdescription:
6454*7c356e86SAndroid Build Coastguard Worker	Check that getopts works in functions
6455*7c356e86SAndroid Build Coastguard Workerstdin:
6456*7c356e86SAndroid Build Coastguard Worker	bfunc() {
6457*7c356e86SAndroid Build Coastguard Worker	    echo bfunc: enter "(args: $*; OPTIND=$OPTIND)"
6458*7c356e86SAndroid Build Coastguard Worker	    while getopts B oc; do
6459*7c356e86SAndroid Build Coastguard Worker		case $oc in
6460*7c356e86SAndroid Build Coastguard Worker		  (B)
6461*7c356e86SAndroid Build Coastguard Worker		    echo bfunc: B option
6462*7c356e86SAndroid Build Coastguard Worker		    ;;
6463*7c356e86SAndroid Build Coastguard Worker		  (*)
6464*7c356e86SAndroid Build Coastguard Worker		    echo bfunc: odd option "($oc)"
6465*7c356e86SAndroid Build Coastguard Worker		    ;;
6466*7c356e86SAndroid Build Coastguard Worker		esac
6467*7c356e86SAndroid Build Coastguard Worker	    done
6468*7c356e86SAndroid Build Coastguard Worker	    echo bfunc: leave
6469*7c356e86SAndroid Build Coastguard Worker	}
6470*7c356e86SAndroid Build Coastguard Worker
6471*7c356e86SAndroid Build Coastguard Worker	function kfunc {
6472*7c356e86SAndroid Build Coastguard Worker	    echo kfunc: enter "(args: $*; OPTIND=$OPTIND)"
6473*7c356e86SAndroid Build Coastguard Worker	    while getopts K oc; do
6474*7c356e86SAndroid Build Coastguard Worker		case $oc in
6475*7c356e86SAndroid Build Coastguard Worker		  (K)
6476*7c356e86SAndroid Build Coastguard Worker		    echo kfunc: K option
6477*7c356e86SAndroid Build Coastguard Worker		    ;;
6478*7c356e86SAndroid Build Coastguard Worker		  (*)
6479*7c356e86SAndroid Build Coastguard Worker		    echo bfunc: odd option "($oc)"
6480*7c356e86SAndroid Build Coastguard Worker		    ;;
6481*7c356e86SAndroid Build Coastguard Worker		esac
6482*7c356e86SAndroid Build Coastguard Worker	    done
6483*7c356e86SAndroid Build Coastguard Worker	    echo kfunc: leave
6484*7c356e86SAndroid Build Coastguard Worker	}
6485*7c356e86SAndroid Build Coastguard Worker
6486*7c356e86SAndroid Build Coastguard Worker	set -- -f -b -k -l
6487*7c356e86SAndroid Build Coastguard Worker	echo "line 1: OPTIND=$OPTIND"
6488*7c356e86SAndroid Build Coastguard Worker	getopts kbfl optc
6489*7c356e86SAndroid Build Coastguard Worker	echo "line 2: ret=$?, optc=$optc, OPTIND=$OPTIND"
6490*7c356e86SAndroid Build Coastguard Worker	bfunc -BBB blah
6491*7c356e86SAndroid Build Coastguard Worker	echo "line 3: OPTIND=$OPTIND"
6492*7c356e86SAndroid Build Coastguard Worker	getopts kbfl optc
6493*7c356e86SAndroid Build Coastguard Worker	echo "line 4: ret=$?, optc=$optc, OPTIND=$OPTIND"
6494*7c356e86SAndroid Build Coastguard Worker	kfunc -KKK blah
6495*7c356e86SAndroid Build Coastguard Worker	echo "line 5: OPTIND=$OPTIND"
6496*7c356e86SAndroid Build Coastguard Worker	getopts kbfl optc
6497*7c356e86SAndroid Build Coastguard Worker	echo "line 6: ret=$?, optc=$optc, OPTIND=$OPTIND"
6498*7c356e86SAndroid Build Coastguard Worker	echo
6499*7c356e86SAndroid Build Coastguard Worker
6500*7c356e86SAndroid Build Coastguard Worker	OPTIND=1
6501*7c356e86SAndroid Build Coastguard Worker	set -- -fbkl
6502*7c356e86SAndroid Build Coastguard Worker	echo "line 10: OPTIND=$OPTIND"
6503*7c356e86SAndroid Build Coastguard Worker	getopts kbfl optc
6504*7c356e86SAndroid Build Coastguard Worker	echo "line 20: ret=$?, optc=$optc, OPTIND=$OPTIND"
6505*7c356e86SAndroid Build Coastguard Worker	bfunc -BBB blah
6506*7c356e86SAndroid Build Coastguard Worker	echo "line 30: OPTIND=$OPTIND"
6507*7c356e86SAndroid Build Coastguard Worker	getopts kbfl optc
6508*7c356e86SAndroid Build Coastguard Worker	echo "line 40: ret=$?, optc=$optc, OPTIND=$OPTIND"
6509*7c356e86SAndroid Build Coastguard Worker	kfunc -KKK blah
6510*7c356e86SAndroid Build Coastguard Worker	echo "line 50: OPTIND=$OPTIND"
6511*7c356e86SAndroid Build Coastguard Worker	getopts kbfl optc
6512*7c356e86SAndroid Build Coastguard Worker	echo "line 60: ret=$?, optc=$optc, OPTIND=$OPTIND"
6513*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6514*7c356e86SAndroid Build Coastguard Worker	line 1: OPTIND=1
6515*7c356e86SAndroid Build Coastguard Worker	line 2: ret=0, optc=f, OPTIND=2
6516*7c356e86SAndroid Build Coastguard Worker	bfunc: enter (args: -BBB blah; OPTIND=2)
6517*7c356e86SAndroid Build Coastguard Worker	bfunc: B option
6518*7c356e86SAndroid Build Coastguard Worker	bfunc: B option
6519*7c356e86SAndroid Build Coastguard Worker	bfunc: leave
6520*7c356e86SAndroid Build Coastguard Worker	line 3: OPTIND=2
6521*7c356e86SAndroid Build Coastguard Worker	line 4: ret=0, optc=b, OPTIND=3
6522*7c356e86SAndroid Build Coastguard Worker	kfunc: enter (args: -KKK blah; OPTIND=1)
6523*7c356e86SAndroid Build Coastguard Worker	kfunc: K option
6524*7c356e86SAndroid Build Coastguard Worker	kfunc: K option
6525*7c356e86SAndroid Build Coastguard Worker	kfunc: K option
6526*7c356e86SAndroid Build Coastguard Worker	kfunc: leave
6527*7c356e86SAndroid Build Coastguard Worker	line 5: OPTIND=3
6528*7c356e86SAndroid Build Coastguard Worker	line 6: ret=0, optc=k, OPTIND=4
6529*7c356e86SAndroid Build Coastguard Worker
6530*7c356e86SAndroid Build Coastguard Worker	line 10: OPTIND=1
6531*7c356e86SAndroid Build Coastguard Worker	line 20: ret=0, optc=f, OPTIND=2
6532*7c356e86SAndroid Build Coastguard Worker	bfunc: enter (args: -BBB blah; OPTIND=2)
6533*7c356e86SAndroid Build Coastguard Worker	bfunc: B option
6534*7c356e86SAndroid Build Coastguard Worker	bfunc: B option
6535*7c356e86SAndroid Build Coastguard Worker	bfunc: leave
6536*7c356e86SAndroid Build Coastguard Worker	line 30: OPTIND=2
6537*7c356e86SAndroid Build Coastguard Worker	line 40: ret=1, optc=?, OPTIND=2
6538*7c356e86SAndroid Build Coastguard Worker	kfunc: enter (args: -KKK blah; OPTIND=1)
6539*7c356e86SAndroid Build Coastguard Worker	kfunc: K option
6540*7c356e86SAndroid Build Coastguard Worker	kfunc: K option
6541*7c356e86SAndroid Build Coastguard Worker	kfunc: K option
6542*7c356e86SAndroid Build Coastguard Worker	kfunc: leave
6543*7c356e86SAndroid Build Coastguard Worker	line 50: OPTIND=2
6544*7c356e86SAndroid Build Coastguard Worker	line 60: ret=1, optc=?, OPTIND=2
6545*7c356e86SAndroid Build Coastguard Worker---
6546*7c356e86SAndroid Build Coastguard Workername: regression-54
6547*7c356e86SAndroid Build Coastguard Workerdescription:
6548*7c356e86SAndroid Build Coastguard Worker	Check that ; is not required before the then in if (( ... )) then ...
6549*7c356e86SAndroid Build Coastguard Workerstdin:
6550*7c356e86SAndroid Build Coastguard Worker	if (( 1 )) then
6551*7c356e86SAndroid Build Coastguard Worker	    echo ok dparen
6552*7c356e86SAndroid Build Coastguard Worker	fi
6553*7c356e86SAndroid Build Coastguard Worker	if [[ -n 1 ]] then
6554*7c356e86SAndroid Build Coastguard Worker	    echo ok dbrackets
6555*7c356e86SAndroid Build Coastguard Worker	fi
6556*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6557*7c356e86SAndroid Build Coastguard Worker	ok dparen
6558*7c356e86SAndroid Build Coastguard Worker	ok dbrackets
6559*7c356e86SAndroid Build Coastguard Worker---
6560*7c356e86SAndroid Build Coastguard Workername: regression-55
6561*7c356e86SAndroid Build Coastguard Workerdescription:
6562*7c356e86SAndroid Build Coastguard Worker	Check ${foo:%bar} is allowed (ksh88 allows it...)
6563*7c356e86SAndroid Build Coastguard Workerstdin:
6564*7c356e86SAndroid Build Coastguard Worker	x=fooXbarXblah
6565*7c356e86SAndroid Build Coastguard Worker	echo 1 ${x%X*}
6566*7c356e86SAndroid Build Coastguard Worker	echo 2 ${x:%X*}
6567*7c356e86SAndroid Build Coastguard Worker	echo 3 ${x%%X*}
6568*7c356e86SAndroid Build Coastguard Worker	echo 4 ${x:%%X*}
6569*7c356e86SAndroid Build Coastguard Worker	echo 5 ${x#*X}
6570*7c356e86SAndroid Build Coastguard Worker	echo 6 ${x:#*X}
6571*7c356e86SAndroid Build Coastguard Worker	echo 7 ${x##*X}
6572*7c356e86SAndroid Build Coastguard Worker	echo 8 ${x:##*X}
6573*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6574*7c356e86SAndroid Build Coastguard Worker	1 fooXbar
6575*7c356e86SAndroid Build Coastguard Worker	2 fooXbar
6576*7c356e86SAndroid Build Coastguard Worker	3 foo
6577*7c356e86SAndroid Build Coastguard Worker	4 foo
6578*7c356e86SAndroid Build Coastguard Worker	5 barXblah
6579*7c356e86SAndroid Build Coastguard Worker	6 barXblah
6580*7c356e86SAndroid Build Coastguard Worker	7 blah
6581*7c356e86SAndroid Build Coastguard Worker	8 blah
6582*7c356e86SAndroid Build Coastguard Worker---
6583*7c356e86SAndroid Build Coastguard Workername: regression-57
6584*7c356e86SAndroid Build Coastguard Workerdescription:
6585*7c356e86SAndroid Build Coastguard Worker	Check if typeset output is correct for
6586*7c356e86SAndroid Build Coastguard Worker	uninitialised array elements.
6587*7c356e86SAndroid Build Coastguard Workerstdin:
6588*7c356e86SAndroid Build Coastguard Worker	typeset -i xxx[4]
6589*7c356e86SAndroid Build Coastguard Worker	echo A
6590*7c356e86SAndroid Build Coastguard Worker	typeset -i | grep xxx | sed 's/^/    /'
6591*7c356e86SAndroid Build Coastguard Worker	echo B
6592*7c356e86SAndroid Build Coastguard Worker	typeset | grep xxx | sed 's/^/    /'
6593*7c356e86SAndroid Build Coastguard Worker
6594*7c356e86SAndroid Build Coastguard Worker	xxx[1]=2+5
6595*7c356e86SAndroid Build Coastguard Worker	echo M
6596*7c356e86SAndroid Build Coastguard Worker	typeset -i | grep xxx | sed 's/^/    /'
6597*7c356e86SAndroid Build Coastguard Worker	echo N
6598*7c356e86SAndroid Build Coastguard Worker	typeset | grep xxx | sed 's/^/    /'
6599*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6600*7c356e86SAndroid Build Coastguard Worker	A
6601*7c356e86SAndroid Build Coastguard Worker	    xxx
6602*7c356e86SAndroid Build Coastguard Worker	B
6603*7c356e86SAndroid Build Coastguard Worker	    typeset -i xxx
6604*7c356e86SAndroid Build Coastguard Worker	M
6605*7c356e86SAndroid Build Coastguard Worker	    xxx[1]=7
6606*7c356e86SAndroid Build Coastguard Worker	N
6607*7c356e86SAndroid Build Coastguard Worker	    set -A xxx
6608*7c356e86SAndroid Build Coastguard Worker	    typeset -i xxx[1]
6609*7c356e86SAndroid Build Coastguard Worker---
6610*7c356e86SAndroid Build Coastguard Workername: regression-58
6611*7c356e86SAndroid Build Coastguard Workerdescription:
6612*7c356e86SAndroid Build Coastguard Worker	Check if trap exit is ok (exit not mistaken for signal name)
6613*7c356e86SAndroid Build Coastguard Workerstdin:
6614*7c356e86SAndroid Build Coastguard Worker	trap 'echo hi' exit
6615*7c356e86SAndroid Build Coastguard Worker	trap exit 1
6616*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6617*7c356e86SAndroid Build Coastguard Worker	hi
6618*7c356e86SAndroid Build Coastguard Worker---
6619*7c356e86SAndroid Build Coastguard Workername: regression-59
6620*7c356e86SAndroid Build Coastguard Workerdescription:
6621*7c356e86SAndroid Build Coastguard Worker	Check if ${#array[*]} is calculated correctly.
6622*7c356e86SAndroid Build Coastguard Workerstdin:
6623*7c356e86SAndroid Build Coastguard Worker	a[12]=hi
6624*7c356e86SAndroid Build Coastguard Worker	a[8]=there
6625*7c356e86SAndroid Build Coastguard Worker	echo ${#a[*]}
6626*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6627*7c356e86SAndroid Build Coastguard Worker	2
6628*7c356e86SAndroid Build Coastguard Worker---
6629*7c356e86SAndroid Build Coastguard Workername: regression-60
6630*7c356e86SAndroid Build Coastguard Workerdescription:
6631*7c356e86SAndroid Build Coastguard Worker	Check if default exit status is previous command
6632*7c356e86SAndroid Build Coastguard Workerstdin:
6633*7c356e86SAndroid Build Coastguard Worker	(true; exit)
6634*7c356e86SAndroid Build Coastguard Worker	echo A $?
6635*7c356e86SAndroid Build Coastguard Worker	(false; exit)
6636*7c356e86SAndroid Build Coastguard Worker	echo B $?
6637*7c356e86SAndroid Build Coastguard Worker	( (exit 103) ; exit)
6638*7c356e86SAndroid Build Coastguard Worker	echo C $?
6639*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6640*7c356e86SAndroid Build Coastguard Worker	A 0
6641*7c356e86SAndroid Build Coastguard Worker	B 1
6642*7c356e86SAndroid Build Coastguard Worker	C 103
6643*7c356e86SAndroid Build Coastguard Worker---
6644*7c356e86SAndroid Build Coastguard Workername: regression-61
6645*7c356e86SAndroid Build Coastguard Workerdescription:
6646*7c356e86SAndroid Build Coastguard Worker	Check if EXIT trap is executed for sub shells.
6647*7c356e86SAndroid Build Coastguard Workerstdin:
6648*7c356e86SAndroid Build Coastguard Worker	trap 'echo parent exit' EXIT
6649*7c356e86SAndroid Build Coastguard Worker	echo start
6650*7c356e86SAndroid Build Coastguard Worker	(echo A; echo A last)
6651*7c356e86SAndroid Build Coastguard Worker	echo B
6652*7c356e86SAndroid Build Coastguard Worker	(echo C; trap 'echo sub exit' EXIT; echo C last)
6653*7c356e86SAndroid Build Coastguard Worker	echo parent last
6654*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6655*7c356e86SAndroid Build Coastguard Worker	start
6656*7c356e86SAndroid Build Coastguard Worker	A
6657*7c356e86SAndroid Build Coastguard Worker	A last
6658*7c356e86SAndroid Build Coastguard Worker	B
6659*7c356e86SAndroid Build Coastguard Worker	C
6660*7c356e86SAndroid Build Coastguard Worker	C last
6661*7c356e86SAndroid Build Coastguard Worker	sub exit
6662*7c356e86SAndroid Build Coastguard Worker	parent last
6663*7c356e86SAndroid Build Coastguard Worker	parent exit
6664*7c356e86SAndroid Build Coastguard Worker---
6665*7c356e86SAndroid Build Coastguard Workername: regression-62
6666*7c356e86SAndroid Build Coastguard Workerdescription:
6667*7c356e86SAndroid Build Coastguard Worker	Check if test -nt/-ot succeeds if second(first) file is missing.
6668*7c356e86SAndroid Build Coastguard Workerstdin:
6669*7c356e86SAndroid Build Coastguard Worker	matrix() {
6670*7c356e86SAndroid Build Coastguard Worker		local a b c d e f g h
6671*7c356e86SAndroid Build Coastguard Worker		test a -nt b; a=$?
6672*7c356e86SAndroid Build Coastguard Worker		test b -nt a; b=$?
6673*7c356e86SAndroid Build Coastguard Worker		test a -ot b; c=$?
6674*7c356e86SAndroid Build Coastguard Worker		test b -ot a; d=$?
6675*7c356e86SAndroid Build Coastguard Worker		test a -nt a; e=$?
6676*7c356e86SAndroid Build Coastguard Worker		test b -nt b; f=$?
6677*7c356e86SAndroid Build Coastguard Worker		test a -ot a; g=$?
6678*7c356e86SAndroid Build Coastguard Worker		test b -ot b; h=$?
6679*7c356e86SAndroid Build Coastguard Worker		echo $1 $a $b $c $d / $e $f $g $h .
6680*7c356e86SAndroid Build Coastguard Worker	}
6681*7c356e86SAndroid Build Coastguard Worker	matrix a
6682*7c356e86SAndroid Build Coastguard Worker	:>a
6683*7c356e86SAndroid Build Coastguard Worker	matrix b
6684*7c356e86SAndroid Build Coastguard Worker	sleep 2		# mtime granularity for OS/2 and FAT
6685*7c356e86SAndroid Build Coastguard Worker	:>b
6686*7c356e86SAndroid Build Coastguard Worker	matrix c
6687*7c356e86SAndroid Build Coastguard Worker	sleep 2
6688*7c356e86SAndroid Build Coastguard Worker	echo dummy >a	# Debian GNU/Hurd #955270
6689*7c356e86SAndroid Build Coastguard Worker	matrix d
6690*7c356e86SAndroid Build Coastguard Worker	rm a
6691*7c356e86SAndroid Build Coastguard Worker	matrix e
6692*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6693*7c356e86SAndroid Build Coastguard Worker	a 1 1 1 1 / 1 1 1 1 .
6694*7c356e86SAndroid Build Coastguard Worker	b 0 1 1 0 / 1 1 1 1 .
6695*7c356e86SAndroid Build Coastguard Worker	c 1 0 0 1 / 1 1 1 1 .
6696*7c356e86SAndroid Build Coastguard Worker	d 0 1 1 0 / 1 1 1 1 .
6697*7c356e86SAndroid Build Coastguard Worker	e 1 0 0 1 / 1 1 1 1 .
6698*7c356e86SAndroid Build Coastguard Worker---
6699*7c356e86SAndroid Build Coastguard Workername: regression-63
6700*7c356e86SAndroid Build Coastguard Workerdescription:
6701*7c356e86SAndroid Build Coastguard Worker	Check if typeset, export, and readonly work
6702*7c356e86SAndroid Build Coastguard Workerstdin:
6703*7c356e86SAndroid Build Coastguard Worker	{
6704*7c356e86SAndroid Build Coastguard Worker		echo FNORD-0
6705*7c356e86SAndroid Build Coastguard Worker		FNORD_A=1
6706*7c356e86SAndroid Build Coastguard Worker		FNORD_B=2
6707*7c356e86SAndroid Build Coastguard Worker		FNORD_C=3
6708*7c356e86SAndroid Build Coastguard Worker		FNORD_D=4
6709*7c356e86SAndroid Build Coastguard Worker		FNORD_E=5
6710*7c356e86SAndroid Build Coastguard Worker		FNORD_F=6
6711*7c356e86SAndroid Build Coastguard Worker		FNORD_G=7
6712*7c356e86SAndroid Build Coastguard Worker		FNORD_H=8
6713*7c356e86SAndroid Build Coastguard Worker		integer FNORD_E FNORD_F FNORD_G FNORD_H
6714*7c356e86SAndroid Build Coastguard Worker		export FNORD_C FNORD_D FNORD_G FNORD_H
6715*7c356e86SAndroid Build Coastguard Worker		readonly FNORD_B FNORD_D FNORD_F FNORD_H
6716*7c356e86SAndroid Build Coastguard Worker		echo FNORD-1
6717*7c356e86SAndroid Build Coastguard Worker		export
6718*7c356e86SAndroid Build Coastguard Worker		echo FNORD-2
6719*7c356e86SAndroid Build Coastguard Worker		export -p
6720*7c356e86SAndroid Build Coastguard Worker		echo FNORD-3
6721*7c356e86SAndroid Build Coastguard Worker		readonly
6722*7c356e86SAndroid Build Coastguard Worker		echo FNORD-4
6723*7c356e86SAndroid Build Coastguard Worker		readonly -p
6724*7c356e86SAndroid Build Coastguard Worker		echo FNORD-5
6725*7c356e86SAndroid Build Coastguard Worker		typeset
6726*7c356e86SAndroid Build Coastguard Worker		echo FNORD-6
6727*7c356e86SAndroid Build Coastguard Worker		typeset -p
6728*7c356e86SAndroid Build Coastguard Worker		echo FNORD-7
6729*7c356e86SAndroid Build Coastguard Worker		typeset -
6730*7c356e86SAndroid Build Coastguard Worker		echo FNORD-8
6731*7c356e86SAndroid Build Coastguard Worker	} | fgrep FNORD
6732*7c356e86SAndroid Build Coastguard Worker	fnord=(42 23)
6733*7c356e86SAndroid Build Coastguard Worker	typeset -p fnord
6734*7c356e86SAndroid Build Coastguard Worker	echo FNORD-9
6735*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6736*7c356e86SAndroid Build Coastguard Worker	FNORD-0
6737*7c356e86SAndroid Build Coastguard Worker	FNORD-1
6738*7c356e86SAndroid Build Coastguard Worker	FNORD_C
6739*7c356e86SAndroid Build Coastguard Worker	FNORD_D
6740*7c356e86SAndroid Build Coastguard Worker	FNORD_G
6741*7c356e86SAndroid Build Coastguard Worker	FNORD_H
6742*7c356e86SAndroid Build Coastguard Worker	FNORD-2
6743*7c356e86SAndroid Build Coastguard Worker	export FNORD_C=3
6744*7c356e86SAndroid Build Coastguard Worker	export FNORD_D=4
6745*7c356e86SAndroid Build Coastguard Worker	export FNORD_G=7
6746*7c356e86SAndroid Build Coastguard Worker	export FNORD_H=8
6747*7c356e86SAndroid Build Coastguard Worker	FNORD-3
6748*7c356e86SAndroid Build Coastguard Worker	FNORD_B
6749*7c356e86SAndroid Build Coastguard Worker	FNORD_D
6750*7c356e86SAndroid Build Coastguard Worker	FNORD_F
6751*7c356e86SAndroid Build Coastguard Worker	FNORD_H
6752*7c356e86SAndroid Build Coastguard Worker	FNORD-4
6753*7c356e86SAndroid Build Coastguard Worker	readonly FNORD_B=2
6754*7c356e86SAndroid Build Coastguard Worker	readonly FNORD_D=4
6755*7c356e86SAndroid Build Coastguard Worker	readonly FNORD_F=6
6756*7c356e86SAndroid Build Coastguard Worker	readonly FNORD_H=8
6757*7c356e86SAndroid Build Coastguard Worker	FNORD-5
6758*7c356e86SAndroid Build Coastguard Worker	typeset FNORD_A
6759*7c356e86SAndroid Build Coastguard Worker	typeset -r FNORD_B
6760*7c356e86SAndroid Build Coastguard Worker	typeset -x FNORD_C
6761*7c356e86SAndroid Build Coastguard Worker	typeset -x -r FNORD_D
6762*7c356e86SAndroid Build Coastguard Worker	typeset -i FNORD_E
6763*7c356e86SAndroid Build Coastguard Worker	typeset -i -r FNORD_F
6764*7c356e86SAndroid Build Coastguard Worker	typeset -i -x FNORD_G
6765*7c356e86SAndroid Build Coastguard Worker	typeset -i -x -r FNORD_H
6766*7c356e86SAndroid Build Coastguard Worker	FNORD-6
6767*7c356e86SAndroid Build Coastguard Worker	typeset FNORD_A=1
6768*7c356e86SAndroid Build Coastguard Worker	typeset -r FNORD_B=2
6769*7c356e86SAndroid Build Coastguard Worker	typeset -x FNORD_C=3
6770*7c356e86SAndroid Build Coastguard Worker	typeset -x -r FNORD_D=4
6771*7c356e86SAndroid Build Coastguard Worker	typeset -i FNORD_E=5
6772*7c356e86SAndroid Build Coastguard Worker	typeset -i -r FNORD_F=6
6773*7c356e86SAndroid Build Coastguard Worker	typeset -i -x FNORD_G=7
6774*7c356e86SAndroid Build Coastguard Worker	typeset -i -x -r FNORD_H=8
6775*7c356e86SAndroid Build Coastguard Worker	FNORD-7
6776*7c356e86SAndroid Build Coastguard Worker	FNORD_A=1
6777*7c356e86SAndroid Build Coastguard Worker	FNORD_B=2
6778*7c356e86SAndroid Build Coastguard Worker	FNORD_C=3
6779*7c356e86SAndroid Build Coastguard Worker	FNORD_D=4
6780*7c356e86SAndroid Build Coastguard Worker	FNORD_E=5
6781*7c356e86SAndroid Build Coastguard Worker	FNORD_F=6
6782*7c356e86SAndroid Build Coastguard Worker	FNORD_G=7
6783*7c356e86SAndroid Build Coastguard Worker	FNORD_H=8
6784*7c356e86SAndroid Build Coastguard Worker	FNORD-8
6785*7c356e86SAndroid Build Coastguard Worker	set -A fnord
6786*7c356e86SAndroid Build Coastguard Worker	typeset fnord[0]=42
6787*7c356e86SAndroid Build Coastguard Worker	typeset fnord[1]=23
6788*7c356e86SAndroid Build Coastguard Worker	FNORD-9
6789*7c356e86SAndroid Build Coastguard Worker---
6790*7c356e86SAndroid Build Coastguard Workername: regression-64
6791*7c356e86SAndroid Build Coastguard Workerdescription:
6792*7c356e86SAndroid Build Coastguard Worker	Check that we can redefine functions calling time builtin
6793*7c356e86SAndroid Build Coastguard Workerstdin:
6794*7c356e86SAndroid Build Coastguard Worker	t() {
6795*7c356e86SAndroid Build Coastguard Worker		time >/dev/null
6796*7c356e86SAndroid Build Coastguard Worker	}
6797*7c356e86SAndroid Build Coastguard Worker	t 2>/dev/null
6798*7c356e86SAndroid Build Coastguard Worker	t() {
6799*7c356e86SAndroid Build Coastguard Worker		time
6800*7c356e86SAndroid Build Coastguard Worker	}
6801*7c356e86SAndroid Build Coastguard Worker---
6802*7c356e86SAndroid Build Coastguard Workername: regression-65
6803*7c356e86SAndroid Build Coastguard Workerdescription:
6804*7c356e86SAndroid Build Coastguard Worker	check for a regression with sleep builtin and signal mask
6805*7c356e86SAndroid Build Coastguard Workercategory: !nojsig
6806*7c356e86SAndroid Build Coastguard Workertime-limit: 5
6807*7c356e86SAndroid Build Coastguard Workerstdin:
6808*7c356e86SAndroid Build Coastguard Worker	sleep 1
6809*7c356e86SAndroid Build Coastguard Worker	echo blub |&
6810*7c356e86SAndroid Build Coastguard Worker	while read -p line; do :; done
6811*7c356e86SAndroid Build Coastguard Worker	echo ok
6812*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6813*7c356e86SAndroid Build Coastguard Worker	ok
6814*7c356e86SAndroid Build Coastguard Worker---
6815*7c356e86SAndroid Build Coastguard Workername: regression-66
6816*7c356e86SAndroid Build Coastguard Workerdescription:
6817*7c356e86SAndroid Build Coastguard Worker	Check that quoting is sane
6818*7c356e86SAndroid Build Coastguard Workercategory: !nojsig
6819*7c356e86SAndroid Build Coastguard Workerstdin:
6820*7c356e86SAndroid Build Coastguard Worker	ac_space=' '
6821*7c356e86SAndroid Build Coastguard Worker	ac_newline='
6822*7c356e86SAndroid Build Coastguard Worker	'
6823*7c356e86SAndroid Build Coastguard Worker	set | grep ^ac_ |&
6824*7c356e86SAndroid Build Coastguard Worker	set -A lines
6825*7c356e86SAndroid Build Coastguard Worker	while IFS= read -pr line; do
6826*7c356e86SAndroid Build Coastguard Worker		if [[ $line = *space* ]]; then
6827*7c356e86SAndroid Build Coastguard Worker			lines[0]=$line
6828*7c356e86SAndroid Build Coastguard Worker		else
6829*7c356e86SAndroid Build Coastguard Worker			lines[1]=$line
6830*7c356e86SAndroid Build Coastguard Worker		fi
6831*7c356e86SAndroid Build Coastguard Worker	done
6832*7c356e86SAndroid Build Coastguard Worker	for line in "${lines[@]}"; do
6833*7c356e86SAndroid Build Coastguard Worker		print -r -- "$line"
6834*7c356e86SAndroid Build Coastguard Worker	done
6835*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6836*7c356e86SAndroid Build Coastguard Worker	ac_space=' '
6837*7c356e86SAndroid Build Coastguard Worker	ac_newline=$'\n'
6838*7c356e86SAndroid Build Coastguard Worker---
6839*7c356e86SAndroid Build Coastguard Workername: regression-67
6840*7c356e86SAndroid Build Coastguard Workerdescription:
6841*7c356e86SAndroid Build Coastguard Worker	Check that we can both break and use source on the same line
6842*7c356e86SAndroid Build Coastguard Workerstdin:
6843*7c356e86SAndroid Build Coastguard Worker	for s in s; do break; done; print -s s
6844*7c356e86SAndroid Build Coastguard Worker---
6845*7c356e86SAndroid Build Coastguard Workername: regression-68
6846*7c356e86SAndroid Build Coastguard Workerdescription:
6847*7c356e86SAndroid Build Coastguard Worker	Check that all common arithmetic operators work as expected
6848*7c356e86SAndroid Build Coastguard Workerstdin:
6849*7c356e86SAndroid Build Coastguard Worker	echo 1 $(( a = 5 )) .
6850*7c356e86SAndroid Build Coastguard Worker	echo 2 $(( ++a )) , $(( a++ )) , $(( a )) .
6851*7c356e86SAndroid Build Coastguard Worker	echo 3 $(( --a )) , $(( a-- )) , $(( a )) .
6852*7c356e86SAndroid Build Coastguard Worker	echo 4 $(( a == 5 )) , $(( a == 6 )) .
6853*7c356e86SAndroid Build Coastguard Worker	echo 5 $(( a != 5 )) , $(( a != 6 )) .
6854*7c356e86SAndroid Build Coastguard Worker	echo 6 $(( a *= 3 )) .
6855*7c356e86SAndroid Build Coastguard Worker	echo 7 $(( a /= 5 )) .
6856*7c356e86SAndroid Build Coastguard Worker	echo 8 $(( a %= 2 )) .
6857*7c356e86SAndroid Build Coastguard Worker	echo 9 $(( a += 9 )) .
6858*7c356e86SAndroid Build Coastguard Worker	echo 10 $(( a -= 4 )) .
6859*7c356e86SAndroid Build Coastguard Worker	echo 11 $(( a <<= 1 )) .
6860*7c356e86SAndroid Build Coastguard Worker	echo 12 $(( a >>= 1 )) .
6861*7c356e86SAndroid Build Coastguard Worker	echo 13 $(( a &= 4 )) .
6862*7c356e86SAndroid Build Coastguard Worker	echo 14 $(( a ^= a )) .
6863*7c356e86SAndroid Build Coastguard Worker	echo 15 $(( a |= 5 )) .
6864*7c356e86SAndroid Build Coastguard Worker	echo 16 $(( 5 << 1 )) .
6865*7c356e86SAndroid Build Coastguard Worker	echo 17 $(( 5 >> 1 )) .
6866*7c356e86SAndroid Build Coastguard Worker	echo 18 $(( 5 <= 6 )) , $(( 5 <= 5 )) , $(( 5 <= 4 )) .
6867*7c356e86SAndroid Build Coastguard Worker	echo 19 $(( 5 >= 6 )) , $(( 5 >= 5 )) , $(( 5 >= 4 )) .
6868*7c356e86SAndroid Build Coastguard Worker	echo 20 $(( 5 < 6 )) , $(( 5 < 5 )) , $(( 5 < 4 )) .
6869*7c356e86SAndroid Build Coastguard Worker	echo 21 $(( 5 > 6 )) , $(( 5 > 5 )) , $(( 5 > 4 )) .
6870*7c356e86SAndroid Build Coastguard Worker	echo 22 $(( 0 && 0 )) , $(( 0 && 1 )) , $(( 1 && 0 )) , $(( 1 && 1 )) .
6871*7c356e86SAndroid Build Coastguard Worker	echo 23 $(( 0 || 0 )) , $(( 0 || 1 )) , $(( 1 || 0 )) , $(( 1 || 1 )) .
6872*7c356e86SAndroid Build Coastguard Worker	echo 24 $(( 5 * 3 )) .
6873*7c356e86SAndroid Build Coastguard Worker	echo 25 $(( 7 / 2 )) .
6874*7c356e86SAndroid Build Coastguard Worker	echo 26 $(( 5 % 5 )) , $(( 5 % 4 )) , $(( 5 % 1 )) , $(( 5 % -1 )) , $(( 5 % -2 )) .
6875*7c356e86SAndroid Build Coastguard Worker	echo 27 $(( 5 + 2 )) , $(( 5 + 0 )) , $(( 5 + -2 )) .
6876*7c356e86SAndroid Build Coastguard Worker	echo 28 $(( 5 - 2 )) , $(( 5 - 0 )) , $(( 5 - -2 )) .
6877*7c356e86SAndroid Build Coastguard Worker	echo 29 $(( 6 & 4 )) , $(( 6 & 8 )) .
6878*7c356e86SAndroid Build Coastguard Worker	echo 30 $(( 4 ^ 2 )) , $(( 4 ^ 4 )) .
6879*7c356e86SAndroid Build Coastguard Worker	echo 31 $(( 4 | 2 )) , $(( 4 | 4 )) , $(( 4 | 0 )) .
6880*7c356e86SAndroid Build Coastguard Worker	echo 32 $(( 0 ? 1 : 2 )) , $(( 3 ? 4 : 5 )) .
6881*7c356e86SAndroid Build Coastguard Worker	echo 33 $(( 5 , 2 , 3 )) .
6882*7c356e86SAndroid Build Coastguard Worker	echo 34 $(( ~0 )) , $(( ~1 )) , $(( ~~1 )) , $(( ~~2 )) .
6883*7c356e86SAndroid Build Coastguard Worker	echo 35 $(( !0 )) , $(( !1 )) , $(( !!1 )) , $(( !!2 )) .
6884*7c356e86SAndroid Build Coastguard Worker	echo 36 $(( (5) )) .
6885*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6886*7c356e86SAndroid Build Coastguard Worker	1 5 .
6887*7c356e86SAndroid Build Coastguard Worker	2 6 , 6 , 7 .
6888*7c356e86SAndroid Build Coastguard Worker	3 6 , 6 , 5 .
6889*7c356e86SAndroid Build Coastguard Worker	4 1 , 0 .
6890*7c356e86SAndroid Build Coastguard Worker	5 0 , 1 .
6891*7c356e86SAndroid Build Coastguard Worker	6 15 .
6892*7c356e86SAndroid Build Coastguard Worker	7 3 .
6893*7c356e86SAndroid Build Coastguard Worker	8 1 .
6894*7c356e86SAndroid Build Coastguard Worker	9 10 .
6895*7c356e86SAndroid Build Coastguard Worker	10 6 .
6896*7c356e86SAndroid Build Coastguard Worker	11 12 .
6897*7c356e86SAndroid Build Coastguard Worker	12 6 .
6898*7c356e86SAndroid Build Coastguard Worker	13 4 .
6899*7c356e86SAndroid Build Coastguard Worker	14 0 .
6900*7c356e86SAndroid Build Coastguard Worker	15 5 .
6901*7c356e86SAndroid Build Coastguard Worker	16 10 .
6902*7c356e86SAndroid Build Coastguard Worker	17 2 .
6903*7c356e86SAndroid Build Coastguard Worker	18 1 , 1 , 0 .
6904*7c356e86SAndroid Build Coastguard Worker	19 0 , 1 , 1 .
6905*7c356e86SAndroid Build Coastguard Worker	20 1 , 0 , 0 .
6906*7c356e86SAndroid Build Coastguard Worker	21 0 , 0 , 1 .
6907*7c356e86SAndroid Build Coastguard Worker	22 0 , 0 , 0 , 1 .
6908*7c356e86SAndroid Build Coastguard Worker	23 0 , 1 , 1 , 1 .
6909*7c356e86SAndroid Build Coastguard Worker	24 15 .
6910*7c356e86SAndroid Build Coastguard Worker	25 3 .
6911*7c356e86SAndroid Build Coastguard Worker	26 0 , 1 , 0 , 0 , 1 .
6912*7c356e86SAndroid Build Coastguard Worker	27 7 , 5 , 3 .
6913*7c356e86SAndroid Build Coastguard Worker	28 3 , 5 , 7 .
6914*7c356e86SAndroid Build Coastguard Worker	29 4 , 0 .
6915*7c356e86SAndroid Build Coastguard Worker	30 6 , 0 .
6916*7c356e86SAndroid Build Coastguard Worker	31 6 , 4 , 4 .
6917*7c356e86SAndroid Build Coastguard Worker	32 2 , 4 .
6918*7c356e86SAndroid Build Coastguard Worker	33 3 .
6919*7c356e86SAndroid Build Coastguard Worker	34 -1 , -2 , 1 , 2 .
6920*7c356e86SAndroid Build Coastguard Worker	35 1 , 0 , 1 , 1 .
6921*7c356e86SAndroid Build Coastguard Worker	36 5 .
6922*7c356e86SAndroid Build Coastguard Worker---
6923*7c356e86SAndroid Build Coastguard Workername: regression-69
6924*7c356e86SAndroid Build Coastguard Workerdescription:
6925*7c356e86SAndroid Build Coastguard Worker	Check that all non-lksh arithmetic operators work as expected
6926*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no
6927*7c356e86SAndroid Build Coastguard Workerstdin:
6928*7c356e86SAndroid Build Coastguard Worker	a=5 b=0x80000005
6929*7c356e86SAndroid Build Coastguard Worker	echo 1 $(( a ^<= 1 )) , $(( b ^<= 1 )) .
6930*7c356e86SAndroid Build Coastguard Worker	echo 2 $(( a ^>= 2 )) , $(( b ^>= 2 )) .
6931*7c356e86SAndroid Build Coastguard Worker	echo 3 $(( 5 ^< 1 )) .
6932*7c356e86SAndroid Build Coastguard Worker	echo 4 $(( 5 ^> 1 )) .
6933*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6934*7c356e86SAndroid Build Coastguard Worker	1 10 , 11 .
6935*7c356e86SAndroid Build Coastguard Worker	2 -2147483646 , -1073741822 .
6936*7c356e86SAndroid Build Coastguard Worker	3 10 .
6937*7c356e86SAndroid Build Coastguard Worker	4 -2147483646 .
6938*7c356e86SAndroid Build Coastguard Worker---
6939*7c356e86SAndroid Build Coastguard Workername: export-1
6940*7c356e86SAndroid Build Coastguard Workerdescription:
6941*7c356e86SAndroid Build Coastguard Worker	Check allexport works, basic
6942*7c356e86SAndroid Build Coastguard Workerstdin:
6943*7c356e86SAndroid Build Coastguard Worker	qa=1
6944*7c356e86SAndroid Build Coastguard Worker	set -A qb 2 3
6945*7c356e86SAndroid Build Coastguard Worker	set -a
6946*7c356e86SAndroid Build Coastguard Worker	qc=4
6947*7c356e86SAndroid Build Coastguard Worker	set -A qd 5 6
6948*7c356e86SAndroid Build Coastguard Worker	export -p | grep '^export q'
6949*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6950*7c356e86SAndroid Build Coastguard Worker	export qc=4
6951*7c356e86SAndroid Build Coastguard Worker	export qd[0]=5
6952*7c356e86SAndroid Build Coastguard Worker	export qd[1]=6
6953*7c356e86SAndroid Build Coastguard Worker---
6954*7c356e86SAndroid Build Coastguard Workername: readonly-0
6955*7c356e86SAndroid Build Coastguard Workerdescription:
6956*7c356e86SAndroid Build Coastguard Worker	Ensure readonly is honoured for assignments and unset
6957*7c356e86SAndroid Build Coastguard Workerstdin:
6958*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'u=x; echo $? $u .' || echo aborted, $?
6959*7c356e86SAndroid Build Coastguard Worker	echo =
6960*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly u; u=x; echo $? $u .' || echo aborted, $?
6961*7c356e86SAndroid Build Coastguard Worker	echo =
6962*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'u=x; readonly u; unset u; echo $? $u .' || echo aborted, $?
6963*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6964*7c356e86SAndroid Build Coastguard Worker	0 x .
6965*7c356e86SAndroid Build Coastguard Worker	=
6966*7c356e86SAndroid Build Coastguard Worker	aborted, 2
6967*7c356e86SAndroid Build Coastguard Worker	=
6968*7c356e86SAndroid Build Coastguard Worker	1 x .
6969*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
6970*7c356e86SAndroid Build Coastguard Worker	/read-only/
6971*7c356e86SAndroid Build Coastguard Worker---
6972*7c356e86SAndroid Build Coastguard Workername: readonly-1
6973*7c356e86SAndroid Build Coastguard Workerdescription:
6974*7c356e86SAndroid Build Coastguard Worker	http://austingroupbugs.net/view.php?id=367 for export
6975*7c356e86SAndroid Build Coastguard Workerstdin:
6976*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly foo; export foo=a; echo $?' || echo aborted, $?
6977*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6978*7c356e86SAndroid Build Coastguard Worker	aborted, 2
6979*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
6980*7c356e86SAndroid Build Coastguard Worker	/read-only/
6981*7c356e86SAndroid Build Coastguard Worker---
6982*7c356e86SAndroid Build Coastguard Workername: readonly-2a
6983*7c356e86SAndroid Build Coastguard Workerdescription:
6984*7c356e86SAndroid Build Coastguard Worker	Check that getopts works as intended, for readonly-2b to be valid
6985*7c356e86SAndroid Build Coastguard Workerstdin:
6986*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'set -- -a b; getopts a c; echo $? $c .; getopts a c; echo $? $c .' || echo aborted, $?
6987*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6988*7c356e86SAndroid Build Coastguard Worker	0 a .
6989*7c356e86SAndroid Build Coastguard Worker	1 ? .
6990*7c356e86SAndroid Build Coastguard Worker---
6991*7c356e86SAndroid Build Coastguard Workername: readonly-2b
6992*7c356e86SAndroid Build Coastguard Workerdescription:
6993*7c356e86SAndroid Build Coastguard Worker	http://austingroupbugs.net/view.php?id=367 for getopts
6994*7c356e86SAndroid Build Coastguard Workerstdin:
6995*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly c; set -- -a b; getopts a c; echo $? $c .' || echo aborted, $?
6996*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
6997*7c356e86SAndroid Build Coastguard Worker	2 .
6998*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
6999*7c356e86SAndroid Build Coastguard Worker	/read-only/
7000*7c356e86SAndroid Build Coastguard Worker---
7001*7c356e86SAndroid Build Coastguard Workername: readonly-3
7002*7c356e86SAndroid Build Coastguard Workerdescription:
7003*7c356e86SAndroid Build Coastguard Worker	http://austingroupbugs.net/view.php?id=367 for read
7004*7c356e86SAndroid Build Coastguard Workerstdin:
7005*7c356e86SAndroid Build Coastguard Worker	echo x | "$__progname" -c 'read s; echo $? $s .' || echo aborted, $?
7006*7c356e86SAndroid Build Coastguard Worker	echo y | "$__progname" -c 'readonly s; read s; echo $? $s .' || echo aborted, $?
7007*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7008*7c356e86SAndroid Build Coastguard Worker	0 x .
7009*7c356e86SAndroid Build Coastguard Worker	2 .
7010*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
7011*7c356e86SAndroid Build Coastguard Worker	/read-only/
7012*7c356e86SAndroid Build Coastguard Worker---
7013*7c356e86SAndroid Build Coastguard Workername: readonly-4
7014*7c356e86SAndroid Build Coastguard Workerdescription:
7015*7c356e86SAndroid Build Coastguard Worker	Do not permit bypassing readonly for first array item
7016*7c356e86SAndroid Build Coastguard Workerstdin:
7017*7c356e86SAndroid Build Coastguard Worker	set -A arr -- foo bar
7018*7c356e86SAndroid Build Coastguard Worker	readonly arr
7019*7c356e86SAndroid Build Coastguard Worker	arr=baz
7020*7c356e86SAndroid Build Coastguard Worker	print -r -- "${arr[@]}"
7021*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
7022*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
7023*7c356e86SAndroid Build Coastguard Worker	/read[ -]?only/
7024*7c356e86SAndroid Build Coastguard Worker---
7025*7c356e86SAndroid Build Coastguard Workername: readonly-5
7026*7c356e86SAndroid Build Coastguard Workerdescription:
7027*7c356e86SAndroid Build Coastguard Worker	Ensure readonly is idempotent
7028*7c356e86SAndroid Build Coastguard Workerstdin:
7029*7c356e86SAndroid Build Coastguard Worker	readonly x=1
7030*7c356e86SAndroid Build Coastguard Worker	readonly x
7031*7c356e86SAndroid Build Coastguard Worker---
7032*7c356e86SAndroid Build Coastguard Workername: syntax-1
7033*7c356e86SAndroid Build Coastguard Workerdescription:
7034*7c356e86SAndroid Build Coastguard Worker	Check that lone ampersand is a syntax error
7035*7c356e86SAndroid Build Coastguard Workerstdin:
7036*7c356e86SAndroid Build Coastguard Worker	 &
7037*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
7038*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
7039*7c356e86SAndroid Build Coastguard Worker	/syntax error/
7040*7c356e86SAndroid Build Coastguard Worker---
7041*7c356e86SAndroid Build Coastguard Workername: xxx-quoted-newline-1
7042*7c356e86SAndroid Build Coastguard Workerdescription:
7043*7c356e86SAndroid Build Coastguard Worker	Check that \<newline> works inside of ${}
7044*7c356e86SAndroid Build Coastguard Workerstdin:
7045*7c356e86SAndroid Build Coastguard Worker	abc=2
7046*7c356e86SAndroid Build Coastguard Worker	echo ${ab\
7047*7c356e86SAndroid Build Coastguard Worker	c}
7048*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7049*7c356e86SAndroid Build Coastguard Worker	2
7050*7c356e86SAndroid Build Coastguard Worker---
7051*7c356e86SAndroid Build Coastguard Workername: xxx-quoted-newline-2
7052*7c356e86SAndroid Build Coastguard Workerdescription:
7053*7c356e86SAndroid Build Coastguard Worker	Check that \<newline> works at the start of a here document
7054*7c356e86SAndroid Build Coastguard Workerstdin:
7055*7c356e86SAndroid Build Coastguard Worker	cat << EO\
7056*7c356e86SAndroid Build Coastguard Worker	F
7057*7c356e86SAndroid Build Coastguard Worker	hi
7058*7c356e86SAndroid Build Coastguard Worker	EOF
7059*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7060*7c356e86SAndroid Build Coastguard Worker	hi
7061*7c356e86SAndroid Build Coastguard Worker---
7062*7c356e86SAndroid Build Coastguard Workername: xxx-quoted-newline-3
7063*7c356e86SAndroid Build Coastguard Workerdescription:
7064*7c356e86SAndroid Build Coastguard Worker	Check that \<newline> works at the end of a here document
7065*7c356e86SAndroid Build Coastguard Workerstdin:
7066*7c356e86SAndroid Build Coastguard Worker	cat << EOF
7067*7c356e86SAndroid Build Coastguard Worker	hi
7068*7c356e86SAndroid Build Coastguard Worker	EO\
7069*7c356e86SAndroid Build Coastguard Worker	F
7070*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7071*7c356e86SAndroid Build Coastguard Worker	hi
7072*7c356e86SAndroid Build Coastguard Worker---
7073*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-cmd
7074*7c356e86SAndroid Build Coastguard Workerdescription:
7075*7c356e86SAndroid Build Coastguard Worker	Check that assignments in a command affect subsequent assignments
7076*7c356e86SAndroid Build Coastguard Worker	in the same command
7077*7c356e86SAndroid Build Coastguard Workerstdin:
7078*7c356e86SAndroid Build Coastguard Worker	FOO=abc
7079*7c356e86SAndroid Build Coastguard Worker	FOO=123 BAR=$FOO
7080*7c356e86SAndroid Build Coastguard Worker	echo $BAR
7081*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7082*7c356e86SAndroid Build Coastguard Worker	123
7083*7c356e86SAndroid Build Coastguard Worker---
7084*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-posix-cmd
7085*7c356e86SAndroid Build Coastguard Workerdescription:
7086*7c356e86SAndroid Build Coastguard Worker	Check that the behaviour for multiple assignments with a
7087*7c356e86SAndroid Build Coastguard Worker	command name matches POSIX. See:
7088*7c356e86SAndroid Build Coastguard Worker	http://thread.gmane.org/gmane.comp.standards.posix.austin.general/1925
7089*7c356e86SAndroid Build Coastguard Workerstdin:
7090*7c356e86SAndroid Build Coastguard Worker	X=a Y=b; X=$Y Y=$X "$__progname" -c 'echo 1 $X $Y .'; echo 2 $X $Y .
7091*7c356e86SAndroid Build Coastguard Worker	unset X Y Z
7092*7c356e86SAndroid Build Coastguard Worker	X=a Y=${X=b} Z=$X "$__progname" -c 'echo 3 $Z .'
7093*7c356e86SAndroid Build Coastguard Worker	unset X Y Z
7094*7c356e86SAndroid Build Coastguard Worker	X=a Y=${X=b} Z=$X; echo 4 $Z .
7095*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7096*7c356e86SAndroid Build Coastguard Worker	1 b a .
7097*7c356e86SAndroid Build Coastguard Worker	2 a b .
7098*7c356e86SAndroid Build Coastguard Worker	3 b .
7099*7c356e86SAndroid Build Coastguard Worker	4 a .
7100*7c356e86SAndroid Build Coastguard Worker---
7101*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-posix-nocmd
7102*7c356e86SAndroid Build Coastguard Workerdescription:
7103*7c356e86SAndroid Build Coastguard Worker	Check that the behaviour for multiple assignments with no
7104*7c356e86SAndroid Build Coastguard Worker	command name matches POSIX (Debian #334182). See:
7105*7c356e86SAndroid Build Coastguard Worker	http://thread.gmane.org/gmane.comp.standards.posix.austin.general/1925
7106*7c356e86SAndroid Build Coastguard Workerstdin:
7107*7c356e86SAndroid Build Coastguard Worker	X=a Y=b; X=$Y Y=$X; echo 1 $X $Y .
7108*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7109*7c356e86SAndroid Build Coastguard Worker	1 b b .
7110*7c356e86SAndroid Build Coastguard Worker---
7111*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-posix-subassign
7112*7c356e86SAndroid Build Coastguard Workerdescription:
7113*7c356e86SAndroid Build Coastguard Worker	Check that the behaviour for multiple assignments matches POSIX:
7114*7c356e86SAndroid Build Coastguard Worker	- The assignment words shall be expanded in the current execution
7115*7c356e86SAndroid Build Coastguard Worker	  environment.
7116*7c356e86SAndroid Build Coastguard Worker	- The assignments happen in the temporary execution environment.
7117*7c356e86SAndroid Build Coastguard Workerstdin:
7118*7c356e86SAndroid Build Coastguard Worker	unset X Y Z
7119*7c356e86SAndroid Build Coastguard Worker	Z=a Y=${X:=b} sh -c 'echo +$X+ +$Y+ +$Z+'
7120*7c356e86SAndroid Build Coastguard Worker	echo /$X/
7121*7c356e86SAndroid Build Coastguard Worker	# Now for the special case:
7122*7c356e86SAndroid Build Coastguard Worker	unset X Y Z
7123*7c356e86SAndroid Build Coastguard Worker	X= Y=${X:=b} sh -c 'echo +$X+ +$Y+'
7124*7c356e86SAndroid Build Coastguard Worker	echo /$X/
7125*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7126*7c356e86SAndroid Build Coastguard Worker	++ +b+ +a+
7127*7c356e86SAndroid Build Coastguard Worker	/b/
7128*7c356e86SAndroid Build Coastguard Worker	++ +b+
7129*7c356e86SAndroid Build Coastguard Worker	/b/
7130*7c356e86SAndroid Build Coastguard Worker---
7131*7c356e86SAndroid Build Coastguard Workername: xxx-exec-environment-1
7132*7c356e86SAndroid Build Coastguard Workerdescription:
7133*7c356e86SAndroid Build Coastguard Worker	Check to see if exec sets it's environment correctly
7134*7c356e86SAndroid Build Coastguard Workerstdin:
7135*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \
7136*7c356e86SAndroid Build Coastguard Worker	    'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \
7137*7c356e86SAndroid Build Coastguard Worker	    done >env; chmod +x env; PATH=.$PATHSEP$PATH
7138*7c356e86SAndroid Build Coastguard Worker	FOO=bar exec env
7139*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern:
7140*7c356e86SAndroid Build Coastguard Worker	/(^|.*\n)FOO=bar\n/
7141*7c356e86SAndroid Build Coastguard Worker---
7142*7c356e86SAndroid Build Coastguard Workername: xxx-exec-environment-2
7143*7c356e86SAndroid Build Coastguard Workerdescription:
7144*7c356e86SAndroid Build Coastguard Worker	Check to make sure exec doesn't change environment if a program
7145*7c356e86SAndroid Build Coastguard Worker	isn't exec-ed
7146*7c356e86SAndroid Build Coastguard Workerstdin:
7147*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \
7148*7c356e86SAndroid Build Coastguard Worker	    'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \
7149*7c356e86SAndroid Build Coastguard Worker	    done >env; chmod +x env; PATH=.$PATHSEP$PATH
7150*7c356e86SAndroid Build Coastguard Worker	env >bar1
7151*7c356e86SAndroid Build Coastguard Worker	FOO=bar exec; env >bar2
7152*7c356e86SAndroid Build Coastguard Worker	cmp -s bar1 bar2
7153*7c356e86SAndroid Build Coastguard Worker---
7154*7c356e86SAndroid Build Coastguard Workername: exec-function-environment-1
7155*7c356e86SAndroid Build Coastguard Workerdescription:
7156*7c356e86SAndroid Build Coastguard Worker	Check assignments in function calls and whether they affect
7157*7c356e86SAndroid Build Coastguard Worker	the current execution environment
7158*7c356e86SAndroid Build Coastguard Workerstdin:
7159*7c356e86SAndroid Build Coastguard Worker	f() { a=2; }; g() { b=3; echo y$c-; }; a=1 f; b=2; c=1 g
7160*7c356e86SAndroid Build Coastguard Worker	echo x$a-$b- z$c-
7161*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7162*7c356e86SAndroid Build Coastguard Worker	y1-
7163*7c356e86SAndroid Build Coastguard Worker	x-3- z-
7164*7c356e86SAndroid Build Coastguard Worker---
7165*7c356e86SAndroid Build Coastguard Workername: exec-modern-korn-shell
7166*7c356e86SAndroid Build Coastguard Workerdescription:
7167*7c356e86SAndroid Build Coastguard Worker	Check that exec can execute any command that makes it
7168*7c356e86SAndroid Build Coastguard Worker	through syntax and parser
7169*7c356e86SAndroid Build Coastguard Workerstdin:
7170*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\necho tf' >lq
7171*7c356e86SAndroid Build Coastguard Worker	chmod +x lq
7172*7c356e86SAndroid Build Coastguard Worker	PATH=$PWD
7173*7c356e86SAndroid Build Coastguard Worker	exec 2>&1
7174*7c356e86SAndroid Build Coastguard Worker	foo() { print two; }
7175*7c356e86SAndroid Build Coastguard Worker	print =1
7176*7c356e86SAndroid Build Coastguard Worker	(exec print one)
7177*7c356e86SAndroid Build Coastguard Worker	print =2
7178*7c356e86SAndroid Build Coastguard Worker	(exec foo)
7179*7c356e86SAndroid Build Coastguard Worker	print =3
7180*7c356e86SAndroid Build Coastguard Worker	(exec ls)
7181*7c356e86SAndroid Build Coastguard Worker	print =4
7182*7c356e86SAndroid Build Coastguard Worker	(exec lq)
7183*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern:
7184*7c356e86SAndroid Build Coastguard Worker	/=1\none\n=2\ntwo\n=3\n.*: ls: inaccessible or not found\n=4\ntf\n/
7185*7c356e86SAndroid Build Coastguard Worker---
7186*7c356e86SAndroid Build Coastguard Workername: exec-ksh88
7187*7c356e86SAndroid Build Coastguard Workerdescription:
7188*7c356e86SAndroid Build Coastguard Worker	Check that exec only executes after a PATH search
7189*7c356e86SAndroid Build Coastguard Workerarguments: !-o!posix!
7190*7c356e86SAndroid Build Coastguard Workerstdin:
7191*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\necho tf' >lq
7192*7c356e86SAndroid Build Coastguard Worker	chmod +x lq
7193*7c356e86SAndroid Build Coastguard Worker	PATH=$PWD
7194*7c356e86SAndroid Build Coastguard Worker	exec 2>&1
7195*7c356e86SAndroid Build Coastguard Worker	foo() { print two; }
7196*7c356e86SAndroid Build Coastguard Worker	print =1
7197*7c356e86SAndroid Build Coastguard Worker	(exec print one)
7198*7c356e86SAndroid Build Coastguard Worker	print =2
7199*7c356e86SAndroid Build Coastguard Worker	(exec foo)
7200*7c356e86SAndroid Build Coastguard Worker	print =3
7201*7c356e86SAndroid Build Coastguard Worker	(exec ls)
7202*7c356e86SAndroid Build Coastguard Worker	print =4
7203*7c356e86SAndroid Build Coastguard Worker	(exec lq)
7204*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern:
7205*7c356e86SAndroid Build Coastguard Worker	/=1\n.*: print: inaccessible or not found\n=2\n.*: foo: inaccessible or not found\n=3\n.*: ls: inaccessible or not found\n=4\ntf\n/
7206*7c356e86SAndroid Build Coastguard Worker---
7207*7c356e86SAndroid Build Coastguard Workername: xxx-what-do-you-call-this-1
7208*7c356e86SAndroid Build Coastguard Workerstdin:
7209*7c356e86SAndroid Build Coastguard Worker	echo "${foo:-"a"}*"
7210*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7211*7c356e86SAndroid Build Coastguard Worker	a*
7212*7c356e86SAndroid Build Coastguard Worker---
7213*7c356e86SAndroid Build Coastguard Workername: xxx-prefix-strip-1
7214*7c356e86SAndroid Build Coastguard Workerstdin:
7215*7c356e86SAndroid Build Coastguard Worker	foo='a cdef'
7216*7c356e86SAndroid Build Coastguard Worker	echo ${foo#a c}
7217*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7218*7c356e86SAndroid Build Coastguard Worker	def
7219*7c356e86SAndroid Build Coastguard Worker---
7220*7c356e86SAndroid Build Coastguard Workername: xxx-prefix-strip-2
7221*7c356e86SAndroid Build Coastguard Workerstdin:
7222*7c356e86SAndroid Build Coastguard Worker	set a c
7223*7c356e86SAndroid Build Coastguard Worker	x='a cdef'
7224*7c356e86SAndroid Build Coastguard Worker	echo ${x#$*}
7225*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7226*7c356e86SAndroid Build Coastguard Worker	def
7227*7c356e86SAndroid Build Coastguard Worker---
7228*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-1
7229*7c356e86SAndroid Build Coastguard Workerstdin:
7230*7c356e86SAndroid Build Coastguard Worker	echo ${:}
7231*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
7232*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
7233*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
7234*7c356e86SAndroid Build Coastguard Worker---
7235*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-2
7236*7c356e86SAndroid Build Coastguard Workerstdin:
7237*7c356e86SAndroid Build Coastguard Worker	set 0
7238*7c356e86SAndroid Build Coastguard Worker	echo ${*:0}
7239*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
7240*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
7241*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
7242*7c356e86SAndroid Build Coastguard Worker---
7243*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-3
7244*7c356e86SAndroid Build Coastguard Workerstdin:
7245*7c356e86SAndroid Build Coastguard Worker	set -A foo 0
7246*7c356e86SAndroid Build Coastguard Worker	echo ${foo[*]:0}
7247*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
7248*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
7249*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
7250*7c356e86SAndroid Build Coastguard Worker---
7251*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-4
7252*7c356e86SAndroid Build Coastguard Workerdescription:
7253*7c356e86SAndroid Build Coastguard Worker	Not all kinds of trims are currently impossible, check those who do
7254*7c356e86SAndroid Build Coastguard Workerstdin:
7255*7c356e86SAndroid Build Coastguard Worker	foo() {
7256*7c356e86SAndroid Build Coastguard Worker		echo "<$*> X${*:+ }X"
7257*7c356e86SAndroid Build Coastguard Worker	}
7258*7c356e86SAndroid Build Coastguard Worker	foo a b
7259*7c356e86SAndroid Build Coastguard Worker	foo "" c
7260*7c356e86SAndroid Build Coastguard Worker	foo ""
7261*7c356e86SAndroid Build Coastguard Worker	foo "" ""
7262*7c356e86SAndroid Build Coastguard Worker	IFS=:
7263*7c356e86SAndroid Build Coastguard Worker	foo a b
7264*7c356e86SAndroid Build Coastguard Worker	foo "" c
7265*7c356e86SAndroid Build Coastguard Worker	foo ""
7266*7c356e86SAndroid Build Coastguard Worker	foo "" ""
7267*7c356e86SAndroid Build Coastguard Worker	IFS=
7268*7c356e86SAndroid Build Coastguard Worker	foo a b
7269*7c356e86SAndroid Build Coastguard Worker	foo "" c
7270*7c356e86SAndroid Build Coastguard Worker	foo ""
7271*7c356e86SAndroid Build Coastguard Worker	foo "" ""
7272*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7273*7c356e86SAndroid Build Coastguard Worker	<a b> X X
7274*7c356e86SAndroid Build Coastguard Worker	< c> X X
7275*7c356e86SAndroid Build Coastguard Worker	<> XX
7276*7c356e86SAndroid Build Coastguard Worker	< > X X
7277*7c356e86SAndroid Build Coastguard Worker	<a:b> X X
7278*7c356e86SAndroid Build Coastguard Worker	<:c> X X
7279*7c356e86SAndroid Build Coastguard Worker	<> XX
7280*7c356e86SAndroid Build Coastguard Worker	<:> X X
7281*7c356e86SAndroid Build Coastguard Worker	<ab> X X
7282*7c356e86SAndroid Build Coastguard Worker	<c> X X
7283*7c356e86SAndroid Build Coastguard Worker	<> XX
7284*7c356e86SAndroid Build Coastguard Worker	<> XX
7285*7c356e86SAndroid Build Coastguard Worker---
7286*7c356e86SAndroid Build Coastguard Workername: xxx-substitution-eval-order
7287*7c356e86SAndroid Build Coastguard Workerdescription:
7288*7c356e86SAndroid Build Coastguard Worker	Check order of evaluation of expressions
7289*7c356e86SAndroid Build Coastguard Workerstdin:
7290*7c356e86SAndroid Build Coastguard Worker	i=1 x= y=
7291*7c356e86SAndroid Build Coastguard Worker	set -A A abc def GHI j G k
7292*7c356e86SAndroid Build Coastguard Worker	echo ${A[x=(i+=1)]#${A[y=(i+=2)]}}
7293*7c356e86SAndroid Build Coastguard Worker	echo $x $y
7294*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7295*7c356e86SAndroid Build Coastguard Worker	HI
7296*7c356e86SAndroid Build Coastguard Worker	2 4
7297*7c356e86SAndroid Build Coastguard Worker---
7298*7c356e86SAndroid Build Coastguard Workername: xxx-substitution-eval-order-2
7299*7c356e86SAndroid Build Coastguard Workerdescription:
7300*7c356e86SAndroid Build Coastguard Worker	Check some corner cases
7301*7c356e86SAndroid Build Coastguard Workerstdin:
7302*7c356e86SAndroid Build Coastguard Worker	unset var
7303*7c356e86SAndroid Build Coastguard Worker	i=42
7304*7c356e86SAndroid Build Coastguard Worker	: ${var+${q[i=777]}} required to be lazy by POSIX
7305*7c356e86SAndroid Build Coastguard Worker	echo 1=$i
7306*7c356e86SAndroid Build Coastguard Worker	var=meow
7307*7c356e86SAndroid Build Coastguard Worker	i=42
7308*7c356e86SAndroid Build Coastguard Worker	: ${var+${q[i=777]}} eval since var is now set
7309*7c356e86SAndroid Build Coastguard Worker	echo 2=$i
7310*7c356e86SAndroid Build Coastguard Worker	unset var
7311*7c356e86SAndroid Build Coastguard Worker	i=42
7312*7c356e86SAndroid Build Coastguard Worker	: ${var#${q[i=777]}} pattern is needed even if var is empty
7313*7c356e86SAndroid Build Coastguard Worker	echo 3=$i
7314*7c356e86SAndroid Build Coastguard Worker	var=meow
7315*7c356e86SAndroid Build Coastguard Worker	i=42
7316*7c356e86SAndroid Build Coastguard Worker	: ${var#${q[i=777]}}
7317*7c356e86SAndroid Build Coastguard Worker	echo 4=$i
7318*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7319*7c356e86SAndroid Build Coastguard Worker	1=42
7320*7c356e86SAndroid Build Coastguard Worker	2=777
7321*7c356e86SAndroid Build Coastguard Worker	3=777
7322*7c356e86SAndroid Build Coastguard Worker	4=777
7323*7c356e86SAndroid Build Coastguard Worker---
7324*7c356e86SAndroid Build Coastguard Workername: xxx-set-option-1
7325*7c356e86SAndroid Build Coastguard Workerdescription:
7326*7c356e86SAndroid Build Coastguard Worker	Check option parsing in set
7327*7c356e86SAndroid Build Coastguard Workerstdin:
7328*7c356e86SAndroid Build Coastguard Worker	set -vsA foo -- A 1 3 2
7329*7c356e86SAndroid Build Coastguard Worker	echo ${foo[*]}
7330*7c356e86SAndroid Build Coastguard Workerexpected-stderr:
7331*7c356e86SAndroid Build Coastguard Worker	echo ${foo[*]}
7332*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7333*7c356e86SAndroid Build Coastguard Worker	1 2 3 A
7334*7c356e86SAndroid Build Coastguard Worker---
7335*7c356e86SAndroid Build Coastguard Workername: xxx-exec-1
7336*7c356e86SAndroid Build Coastguard Workerdescription:
7337*7c356e86SAndroid Build Coastguard Worker	Check that exec exits for built-ins
7338*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
7339*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
7340*7c356e86SAndroid Build Coastguard Workerstdin:
7341*7c356e86SAndroid Build Coastguard Worker	exec echo hi
7342*7c356e86SAndroid Build Coastguard Worker	echo still herre
7343*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7344*7c356e86SAndroid Build Coastguard Worker	hi
7345*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
7346*7c356e86SAndroid Build Coastguard Worker---
7347*7c356e86SAndroid Build Coastguard Workername: xxx-while-1
7348*7c356e86SAndroid Build Coastguard Workerdescription:
7349*7c356e86SAndroid Build Coastguard Worker	Check the return value of while loops
7350*7c356e86SAndroid Build Coastguard Worker	XXX need to do same for for/select/until loops
7351*7c356e86SAndroid Build Coastguard Workerstdin:
7352*7c356e86SAndroid Build Coastguard Worker	i=x
7353*7c356e86SAndroid Build Coastguard Worker	while [ $i != xxx ] ; do
7354*7c356e86SAndroid Build Coastguard Worker	    i=x$i
7355*7c356e86SAndroid Build Coastguard Worker	    if [ $i = xxx ] ; then
7356*7c356e86SAndroid Build Coastguard Worker		false
7357*7c356e86SAndroid Build Coastguard Worker		continue
7358*7c356e86SAndroid Build Coastguard Worker	    fi
7359*7c356e86SAndroid Build Coastguard Worker	done
7360*7c356e86SAndroid Build Coastguard Worker	echo loop1=$?
7361*7c356e86SAndroid Build Coastguard Worker
7362*7c356e86SAndroid Build Coastguard Worker	i=x
7363*7c356e86SAndroid Build Coastguard Worker	while [ $i != xxx ] ; do
7364*7c356e86SAndroid Build Coastguard Worker	    i=x$i
7365*7c356e86SAndroid Build Coastguard Worker	    if [ $i = xxx ] ; then
7366*7c356e86SAndroid Build Coastguard Worker		false
7367*7c356e86SAndroid Build Coastguard Worker		break
7368*7c356e86SAndroid Build Coastguard Worker	    fi
7369*7c356e86SAndroid Build Coastguard Worker	done
7370*7c356e86SAndroid Build Coastguard Worker	echo loop2=$?
7371*7c356e86SAndroid Build Coastguard Worker
7372*7c356e86SAndroid Build Coastguard Worker	i=x
7373*7c356e86SAndroid Build Coastguard Worker	while [ $i != xxx ] ; do
7374*7c356e86SAndroid Build Coastguard Worker	    i=x$i
7375*7c356e86SAndroid Build Coastguard Worker	    false
7376*7c356e86SAndroid Build Coastguard Worker	done
7377*7c356e86SAndroid Build Coastguard Worker	echo loop3=$?
7378*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7379*7c356e86SAndroid Build Coastguard Worker	loop1=0
7380*7c356e86SAndroid Build Coastguard Worker	loop2=0
7381*7c356e86SAndroid Build Coastguard Worker	loop3=1
7382*7c356e86SAndroid Build Coastguard Worker---
7383*7c356e86SAndroid Build Coastguard Workername: xxx-status-1
7384*7c356e86SAndroid Build Coastguard Workerdescription:
7385*7c356e86SAndroid Build Coastguard Worker	Check that blank lines don't clear $?
7386*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
7387*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
7388*7c356e86SAndroid Build Coastguard Workerstdin:
7389*7c356e86SAndroid Build Coastguard Worker	(exit 1)
7390*7c356e86SAndroid Build Coastguard Worker	echo $?
7391*7c356e86SAndroid Build Coastguard Worker	(exit 1)
7392*7c356e86SAndroid Build Coastguard Worker
7393*7c356e86SAndroid Build Coastguard Worker	echo $?
7394*7c356e86SAndroid Build Coastguard Worker	true
7395*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7396*7c356e86SAndroid Build Coastguard Worker	1
7397*7c356e86SAndroid Build Coastguard Worker	1
7398*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/
7399*7c356e86SAndroid Build Coastguard Worker---
7400*7c356e86SAndroid Build Coastguard Workername: xxx-status-2
7401*7c356e86SAndroid Build Coastguard Workerdescription:
7402*7c356e86SAndroid Build Coastguard Worker	Check that $? is preserved in subshells, includes, traps.
7403*7c356e86SAndroid Build Coastguard Workerstdin:
7404*7c356e86SAndroid Build Coastguard Worker	(exit 1)
7405*7c356e86SAndroid Build Coastguard Worker
7406*7c356e86SAndroid Build Coastguard Worker	echo blank: $?
7407*7c356e86SAndroid Build Coastguard Worker
7408*7c356e86SAndroid Build Coastguard Worker	(exit 2)
7409*7c356e86SAndroid Build Coastguard Worker	(echo subshell: $?)
7410*7c356e86SAndroid Build Coastguard Worker
7411*7c356e86SAndroid Build Coastguard Worker	echo 'echo include: $?' > foo
7412*7c356e86SAndroid Build Coastguard Worker	(exit 3)
7413*7c356e86SAndroid Build Coastguard Worker	. ./foo
7414*7c356e86SAndroid Build Coastguard Worker
7415*7c356e86SAndroid Build Coastguard Worker	trap 'echo trap: $?' ERR
7416*7c356e86SAndroid Build Coastguard Worker	(exit 4)
7417*7c356e86SAndroid Build Coastguard Worker	echo exit: $?
7418*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7419*7c356e86SAndroid Build Coastguard Worker	blank: 1
7420*7c356e86SAndroid Build Coastguard Worker	subshell: 2
7421*7c356e86SAndroid Build Coastguard Worker	include: 3
7422*7c356e86SAndroid Build Coastguard Worker	trap: 4
7423*7c356e86SAndroid Build Coastguard Worker	exit: 4
7424*7c356e86SAndroid Build Coastguard Worker---
7425*7c356e86SAndroid Build Coastguard Workername: xxx-stat-1
7426*7c356e86SAndroid Build Coastguard Workerdescription:
7427*7c356e86SAndroid Build Coastguard Worker	Check that tests on files are consistent
7428*7c356e86SAndroid Build Coastguard Worker	(fails when run as root, unfortunately)
7429*7c356e86SAndroid Build Coastguard Workercategory: disabled
7430*7c356e86SAndroid Build Coastguard Workerstdin:
7431*7c356e86SAndroid Build Coastguard Worker	mkdir a
7432*7c356e86SAndroid Build Coastguard Worker	echo x >a/b
7433*7c356e86SAndroid Build Coastguard Worker	test -e a/b; echo 1e $? .
7434*7c356e86SAndroid Build Coastguard Worker	test -f a/b; echo 1f $? .
7435*7c356e86SAndroid Build Coastguard Worker	chmod 0 a
7436*7c356e86SAndroid Build Coastguard Worker	test -e a/b; echo 2e $? .
7437*7c356e86SAndroid Build Coastguard Worker	test -f a/b; echo 2f $? .
7438*7c356e86SAndroid Build Coastguard Worker	chmod 700 a
7439*7c356e86SAndroid Build Coastguard Worker	test -e a/b; echo 3e $? .
7440*7c356e86SAndroid Build Coastguard Worker	test -f a/b; echo 3f $? .
7441*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7442*7c356e86SAndroid Build Coastguard Worker	1e 0 .
7443*7c356e86SAndroid Build Coastguard Worker	1f 0 .
7444*7c356e86SAndroid Build Coastguard Worker	2e 1 .
7445*7c356e86SAndroid Build Coastguard Worker	2f 1 .
7446*7c356e86SAndroid Build Coastguard Worker	3e 0 .
7447*7c356e86SAndroid Build Coastguard Worker	3f 0 .
7448*7c356e86SAndroid Build Coastguard Worker---
7449*7c356e86SAndroid Build Coastguard Workername: xxx-clean-chars-1
7450*7c356e86SAndroid Build Coastguard Workerdescription:
7451*7c356e86SAndroid Build Coastguard Worker	Check MAGIC character is stuffed correctly
7452*7c356e86SAndroid Build Coastguard Workerstdin:
7453*7c356e86SAndroid Build Coastguard Worker	echo `echo [�`
7454*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7455*7c356e86SAndroid Build Coastguard Worker	[�
7456*7c356e86SAndroid Build Coastguard Worker---
7457*7c356e86SAndroid Build Coastguard Workername: xxx-param-subst-qmark-1
7458*7c356e86SAndroid Build Coastguard Workerdescription:
7459*7c356e86SAndroid Build Coastguard Worker	Check suppresion of error message with null string.  According to
7460*7c356e86SAndroid Build Coastguard Worker	POSIX, it shouldn't print the error as 'word' isn't omitted.
7461*7c356e86SAndroid Build Coastguard Worker	ksh88/93, Solaris /bin/sh and /usr/xpg4/bin/sh all print the error.
7462*7c356e86SAndroid Build Coastguard Workerstdin:
7463*7c356e86SAndroid Build Coastguard Worker	unset foo
7464*7c356e86SAndroid Build Coastguard Worker	x=
7465*7c356e86SAndroid Build Coastguard Worker	echo x${foo?$x}
7466*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
7467*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: !/not set/
7468*7c356e86SAndroid Build Coastguard Worker---
7469*7c356e86SAndroid Build Coastguard Workername: xxx-param-subst-qmark-namespec
7470*7c356e86SAndroid Build Coastguard Workerdescription:
7471*7c356e86SAndroid Build Coastguard Worker	Check special names are output correctly
7472*7c356e86SAndroid Build Coastguard Workerstdin:
7473*7c356e86SAndroid Build Coastguard Worker	doit() {
7474*7c356e86SAndroid Build Coastguard Worker		"$__progname" -c "$@" >o1 2>o2
7475*7c356e86SAndroid Build Coastguard Worker		rv=$?
7476*7c356e86SAndroid Build Coastguard Worker		echo RETVAL: $rv
7477*7c356e86SAndroid Build Coastguard Worker		sed -e "s^${__progname%.exe}\.*e*x*e*: PROG: " -e 's/^/STDOUT: /g' <o1
7478*7c356e86SAndroid Build Coastguard Worker		sed -e "s^${__progname%.exe}\.*e*x*e*: PROG: " -e 's/^/STDERR: /g' <o2
7479*7c356e86SAndroid Build Coastguard Worker	}
7480*7c356e86SAndroid Build Coastguard Worker	doit 'echo ${1x}'
7481*7c356e86SAndroid Build Coastguard Worker	doit 'echo "${1x}"'
7482*7c356e86SAndroid Build Coastguard Worker	doit 'echo ${1?}'
7483*7c356e86SAndroid Build Coastguard Worker	doit 'echo ${19?}'
7484*7c356e86SAndroid Build Coastguard Worker	doit 'echo ${!:?}'
7485*7c356e86SAndroid Build Coastguard Worker	doit -u 'echo ${*:?}' foo ""
7486*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7487*7c356e86SAndroid Build Coastguard Worker	RETVAL: 1
7488*7c356e86SAndroid Build Coastguard Worker	STDERR: PROG: ${1x}: bad substitution
7489*7c356e86SAndroid Build Coastguard Worker	RETVAL: 1
7490*7c356e86SAndroid Build Coastguard Worker	STDERR: PROG: ${1x}: bad substitution
7491*7c356e86SAndroid Build Coastguard Worker	RETVAL: 1
7492*7c356e86SAndroid Build Coastguard Worker	STDERR: PROG: 1: parameter null or not set
7493*7c356e86SAndroid Build Coastguard Worker	RETVAL: 1
7494*7c356e86SAndroid Build Coastguard Worker	STDERR: PROG: 19: parameter null or not set
7495*7c356e86SAndroid Build Coastguard Worker	RETVAL: 1
7496*7c356e86SAndroid Build Coastguard Worker	STDERR: PROG: !: parameter null or not set
7497*7c356e86SAndroid Build Coastguard Worker	RETVAL: 1
7498*7c356e86SAndroid Build Coastguard Worker	STDERR: foo: ${*:?}: bad substitution
7499*7c356e86SAndroid Build Coastguard Worker---
7500*7c356e86SAndroid Build Coastguard Workername: xxx-param-_-1
7501*7c356e86SAndroid Build Coastguard Worker# fails due to weirdness of execv stuff
7502*7c356e86SAndroid Build Coastguard Workercategory: !os:uwin-nt
7503*7c356e86SAndroid Build Coastguard Workerdescription:
7504*7c356e86SAndroid Build Coastguard Worker	Check c flag is set.
7505*7c356e86SAndroid Build Coastguard Workerarguments: !-c!echo "[$-]"!
7506*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: /^\[.*c.*\]$/
7507*7c356e86SAndroid Build Coastguard Worker---
7508*7c356e86SAndroid Build Coastguard Workername: tilde-expand-1
7509*7c356e86SAndroid Build Coastguard Workerdescription:
7510*7c356e86SAndroid Build Coastguard Worker	Check tilde expansion after equal signs
7511*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=/sweet!
7512*7c356e86SAndroid Build Coastguard Workerstdin:
7513*7c356e86SAndroid Build Coastguard Worker	echo ${A=a=}~ b=~ c=d~ ~
7514*7c356e86SAndroid Build Coastguard Worker	export e=~ f=d~
7515*7c356e86SAndroid Build Coastguard Worker	command command export g=~ h=d~
7516*7c356e86SAndroid Build Coastguard Worker	echo ". $e . $f ."
7517*7c356e86SAndroid Build Coastguard Worker	echo ". $g . $h ."
7518*7c356e86SAndroid Build Coastguard Worker	set -o posix
7519*7c356e86SAndroid Build Coastguard Worker	unset A e f g h
7520*7c356e86SAndroid Build Coastguard Worker	echo ${A=a=}~ b=~ c=d~ ~
7521*7c356e86SAndroid Build Coastguard Worker	export e=~ f=d~
7522*7c356e86SAndroid Build Coastguard Worker	command command export g=~ h=d~
7523*7c356e86SAndroid Build Coastguard Worker	echo ". $e . $f ."
7524*7c356e86SAndroid Build Coastguard Worker	echo ". $g . $h ."
7525*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7526*7c356e86SAndroid Build Coastguard Worker	a=/sweet b=/sweet c=d~ /sweet
7527*7c356e86SAndroid Build Coastguard Worker	. /sweet . d~ .
7528*7c356e86SAndroid Build Coastguard Worker	. /sweet . d~ .
7529*7c356e86SAndroid Build Coastguard Worker	a=~ b=~ c=d~ /sweet
7530*7c356e86SAndroid Build Coastguard Worker	. /sweet . d~ .
7531*7c356e86SAndroid Build Coastguard Worker	. /sweet . d~ .
7532*7c356e86SAndroid Build Coastguard Worker---
7533*7c356e86SAndroid Build Coastguard Workername: tilde-expand-2
7534*7c356e86SAndroid Build Coastguard Workerdescription:
7535*7c356e86SAndroid Build Coastguard Worker	Check tilde expansion works
7536*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=/sweet!
7537*7c356e86SAndroid Build Coastguard Workerstdin:
7538*7c356e86SAndroid Build Coastguard Worker	:>'c=a'
7539*7c356e86SAndroid Build Coastguard Worker	typeset c=[ab]
7540*7c356e86SAndroid Build Coastguard Worker	:>'d=a'
7541*7c356e86SAndroid Build Coastguard Worker	x=typeset; $x d=[ab]
7542*7c356e86SAndroid Build Coastguard Worker	echo "<$c>" "<$d>"
7543*7c356e86SAndroid Build Coastguard Worker	wd=$PWD
7544*7c356e86SAndroid Build Coastguard Worker	cd /
7545*7c356e86SAndroid Build Coastguard Worker	plus=$(print -r -- ~+)
7546*7c356e86SAndroid Build Coastguard Worker	minus=$(print -r -- ~-)
7547*7c356e86SAndroid Build Coastguard Worker	nix=$(print -r -- ~)
7548*7c356e86SAndroid Build Coastguard Worker	[[ $plus = / ]]; echo one $? .
7549*7c356e86SAndroid Build Coastguard Worker	[[ $minus = "$wd" ]]; echo two $? .
7550*7c356e86SAndroid Build Coastguard Worker	[[ $nix = /sweet ]]; echo nix $? .
7551*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7552*7c356e86SAndroid Build Coastguard Worker	<[ab]> <a>
7553*7c356e86SAndroid Build Coastguard Worker	one 0 .
7554*7c356e86SAndroid Build Coastguard Worker	two 0 .
7555*7c356e86SAndroid Build Coastguard Worker	nix 0 .
7556*7c356e86SAndroid Build Coastguard Worker---
7557*7c356e86SAndroid Build Coastguard Workername: tilde-expand-3
7558*7c356e86SAndroid Build Coastguard Workerdescription:
7559*7c356e86SAndroid Build Coastguard Worker	Check mostly Austin 351 stuff
7560*7c356e86SAndroid Build Coastguard Workerstdin:
7561*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
7562*7c356e86SAndroid Build Coastguard Worker	set "1 b=2" "3 d=4"
7563*7c356e86SAndroid Build Coastguard Worker	export a=$1 \c=$2
7564*7c356e86SAndroid Build Coastguard Worker	showargs 1 "$a" "$b" "$c" "$d"
7565*7c356e86SAndroid Build Coastguard Worker	unset a b c d
7566*7c356e86SAndroid Build Coastguard Worker	HOME=/tmp
7567*7c356e86SAndroid Build Coastguard Worker	export \a=~ b=~
7568*7c356e86SAndroid Build Coastguard Worker	command export c=~
7569*7c356e86SAndroid Build Coastguard Worker	builtin export d=~
7570*7c356e86SAndroid Build Coastguard Worker	\\builtin export e=~
7571*7c356e86SAndroid Build Coastguard Worker	showargs 2 "$a" "$b" "$c" "$d" "$e" ksh
7572*7c356e86SAndroid Build Coastguard Worker	unset a b c d e
7573*7c356e86SAndroid Build Coastguard Worker	set -o posix
7574*7c356e86SAndroid Build Coastguard Worker	export \a=~ b=~
7575*7c356e86SAndroid Build Coastguard Worker	command export c=~
7576*7c356e86SAndroid Build Coastguard Worker	builtin export d=~
7577*7c356e86SAndroid Build Coastguard Worker	\\builtin export e=~
7578*7c356e86SAndroid Build Coastguard Worker	showargs 3 "$a" "$b" "$c" "$d" "$e" posix
7579*7c356e86SAndroid Build Coastguard Worker	unset a b c d e
7580*7c356e86SAndroid Build Coastguard Worker	set +o posix
7581*7c356e86SAndroid Build Coastguard Worker	export a=$1
7582*7c356e86SAndroid Build Coastguard Worker	showargs 4 "$a" "$b" ksh
7583*7c356e86SAndroid Build Coastguard Worker	unset a b
7584*7c356e86SAndroid Build Coastguard Worker	showargs 5 a=$1 ksh
7585*7c356e86SAndroid Build Coastguard Worker	export \a=$1
7586*7c356e86SAndroid Build Coastguard Worker	showargs 6 "$a" "$b" ksh
7587*7c356e86SAndroid Build Coastguard Worker	unset a b
7588*7c356e86SAndroid Build Coastguard Worker	set -o posix
7589*7c356e86SAndroid Build Coastguard Worker	export a=$1
7590*7c356e86SAndroid Build Coastguard Worker	showargs 7 "$a" "$b" posix
7591*7c356e86SAndroid Build Coastguard Worker	unset a b
7592*7c356e86SAndroid Build Coastguard Worker	showargs 8 a=$1 posix
7593*7c356e86SAndroid Build Coastguard Worker	export \a=$1
7594*7c356e86SAndroid Build Coastguard Worker	showargs 9 "$a" "$b" posix
7595*7c356e86SAndroid Build Coastguard Worker	unset a b
7596*7c356e86SAndroid Build Coastguard Worker	set +o posix
7597*7c356e86SAndroid Build Coastguard Worker	command echo 10 ksh a=~
7598*7c356e86SAndroid Build Coastguard Worker	command command export a=~
7599*7c356e86SAndroid Build Coastguard Worker	showargs 11 "$a"
7600*7c356e86SAndroid Build Coastguard Worker	unset a
7601*7c356e86SAndroid Build Coastguard Worker	set -o posix
7602*7c356e86SAndroid Build Coastguard Worker	command echo 12 posix a=~
7603*7c356e86SAndroid Build Coastguard Worker	command command export a=~
7604*7c356e86SAndroid Build Coastguard Worker	showargs 13 "$a"
7605*7c356e86SAndroid Build Coastguard Worker	unset a
7606*7c356e86SAndroid Build Coastguard Worker	# unspecified whether /tmp or ~
7607*7c356e86SAndroid Build Coastguard Worker	var=export; command $var a=~
7608*7c356e86SAndroid Build Coastguard Worker	showargs 14 "$a"
7609*7c356e86SAndroid Build Coastguard Worker	echo 'echo "<$foo>"' >bar
7610*7c356e86SAndroid Build Coastguard Worker	"$__progname" bar
7611*7c356e86SAndroid Build Coastguard Worker	var=foo
7612*7c356e86SAndroid Build Coastguard Worker	export $var=1
7613*7c356e86SAndroid Build Coastguard Worker	"$__progname" bar
7614*7c356e86SAndroid Build Coastguard Worker	export $var=~
7615*7c356e86SAndroid Build Coastguard Worker	"$__progname" bar
7616*7c356e86SAndroid Build Coastguard Worker	# unspecified
7617*7c356e86SAndroid Build Coastguard Worker	command -- export a=~
7618*7c356e86SAndroid Build Coastguard Worker	showargs 18 "$a"
7619*7c356e86SAndroid Build Coastguard Worker	set -A bla
7620*7c356e86SAndroid Build Coastguard Worker	typeset bla[1]=~:~
7621*7c356e86SAndroid Build Coastguard Worker	typeset -g gbl=~ g2=$1
7622*7c356e86SAndroid Build Coastguard Worker	local lcl=~ l2=$1
7623*7c356e86SAndroid Build Coastguard Worker	readonly ro=~ r2=$1
7624*7c356e86SAndroid Build Coastguard Worker	showargs 19 "${bla[1]}" a=~ "$gbl" "$lcl" "$ro" "$g2" "$l2" "$r2"
7625*7c356e86SAndroid Build Coastguard Worker	set +o posix
7626*7c356e86SAndroid Build Coastguard Worker	echo "20 some arbitrary stuff "=~
7627*7c356e86SAndroid Build Coastguard Worker	set -o posix
7628*7c356e86SAndroid Build Coastguard Worker	echo "21 some arbitrary stuff "=~
7629*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7630*7c356e86SAndroid Build Coastguard Worker	<1> <1 b=2> <> <3> <4> .
7631*7c356e86SAndroid Build Coastguard Worker	<2> </tmp> </tmp> </tmp> </tmp> </tmp> <ksh> .
7632*7c356e86SAndroid Build Coastguard Worker	<3> <~> </tmp> </tmp> <~> </tmp> <posix> .
7633*7c356e86SAndroid Build Coastguard Worker	<4> <1 b=2> <> <ksh> .
7634*7c356e86SAndroid Build Coastguard Worker	<5> <a=1> <b=2> <ksh> .
7635*7c356e86SAndroid Build Coastguard Worker	<6> <1> <2> <ksh> .
7636*7c356e86SAndroid Build Coastguard Worker	<7> <1 b=2> <> <posix> .
7637*7c356e86SAndroid Build Coastguard Worker	<8> <a=1> <b=2> <posix> .
7638*7c356e86SAndroid Build Coastguard Worker	<9> <1> <2> <posix> .
7639*7c356e86SAndroid Build Coastguard Worker	10 ksh a=/tmp
7640*7c356e86SAndroid Build Coastguard Worker	<11> </tmp> .
7641*7c356e86SAndroid Build Coastguard Worker	12 posix a=~
7642*7c356e86SAndroid Build Coastguard Worker	<13> </tmp> .
7643*7c356e86SAndroid Build Coastguard Worker	<14> <~> .
7644*7c356e86SAndroid Build Coastguard Worker	<>
7645*7c356e86SAndroid Build Coastguard Worker	<1>
7646*7c356e86SAndroid Build Coastguard Worker	<~>
7647*7c356e86SAndroid Build Coastguard Worker	<18> <~> .
7648*7c356e86SAndroid Build Coastguard Worker	<19> </tmp:/tmp> <a=~> </tmp> </tmp> </tmp> <1 b=2> <1 b=2> <1 b=2> .
7649*7c356e86SAndroid Build Coastguard Worker	20 some arbitrary stuff =/tmp
7650*7c356e86SAndroid Build Coastguard Worker	21 some arbitrary stuff =~
7651*7c356e86SAndroid Build Coastguard Worker---
7652*7c356e86SAndroid Build Coastguard Workername: exit-err-1
7653*7c356e86SAndroid Build Coastguard Workerdescription:
7654*7c356e86SAndroid Build Coastguard Worker	Check some "exit on error" conditions
7655*7c356e86SAndroid Build Coastguard Workerstdin:
7656*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nexec "$1"' >env
7657*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nexit 1' >false
7658*7c356e86SAndroid Build Coastguard Worker	chmod +x env false
7659*7c356e86SAndroid Build Coastguard Worker	PATH=.$PATHSEP$PATH
7660*7c356e86SAndroid Build Coastguard Worker	set -ex
7661*7c356e86SAndroid Build Coastguard Worker	env false && echo something
7662*7c356e86SAndroid Build Coastguard Worker	echo END
7663*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7664*7c356e86SAndroid Build Coastguard Worker	END
7665*7c356e86SAndroid Build Coastguard Workerexpected-stderr:
7666*7c356e86SAndroid Build Coastguard Worker	+ env false
7667*7c356e86SAndroid Build Coastguard Worker	+ echo END
7668*7c356e86SAndroid Build Coastguard Worker---
7669*7c356e86SAndroid Build Coastguard Workername: exit-err-2
7670*7c356e86SAndroid Build Coastguard Workerdescription:
7671*7c356e86SAndroid Build Coastguard Worker	Check some "exit on error" edge conditions (POSIXly)
7672*7c356e86SAndroid Build Coastguard Workerstdin:
7673*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nexec "$1"' >env
7674*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nexit 1' >false
7675*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nexit 0' >true
7676*7c356e86SAndroid Build Coastguard Worker	chmod +x env false
7677*7c356e86SAndroid Build Coastguard Worker	PATH=.$PATHSEP$PATH
7678*7c356e86SAndroid Build Coastguard Worker	set -ex
7679*7c356e86SAndroid Build Coastguard Worker	if env true; then
7680*7c356e86SAndroid Build Coastguard Worker		env false && echo something
7681*7c356e86SAndroid Build Coastguard Worker	fi
7682*7c356e86SAndroid Build Coastguard Worker	echo END
7683*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7684*7c356e86SAndroid Build Coastguard Worker	END
7685*7c356e86SAndroid Build Coastguard Workerexpected-stderr:
7686*7c356e86SAndroid Build Coastguard Worker	+ env true
7687*7c356e86SAndroid Build Coastguard Worker	+ env false
7688*7c356e86SAndroid Build Coastguard Worker	+ echo END
7689*7c356e86SAndroid Build Coastguard Worker---
7690*7c356e86SAndroid Build Coastguard Workername: exit-err-3
7691*7c356e86SAndroid Build Coastguard Workerdescription:
7692*7c356e86SAndroid Build Coastguard Worker	pdksh regression which AT&T ksh does right
7693*7c356e86SAndroid Build Coastguard Worker	TFM says: [set] -e | errexit
7694*7c356e86SAndroid Build Coastguard Worker		Exit (after executing the ERR trap) ...
7695*7c356e86SAndroid Build Coastguard Workerstdin:
7696*7c356e86SAndroid Build Coastguard Worker	trap 'echo EXIT' EXIT
7697*7c356e86SAndroid Build Coastguard Worker	trap 'echo ERR' ERR
7698*7c356e86SAndroid Build Coastguard Worker	set -e
7699*7c356e86SAndroid Build Coastguard Worker	cd /XXXXX 2>/dev/null
7700*7c356e86SAndroid Build Coastguard Worker	echo DONE
7701*7c356e86SAndroid Build Coastguard Worker	exit 0
7702*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7703*7c356e86SAndroid Build Coastguard Worker	ERR
7704*7c356e86SAndroid Build Coastguard Worker	EXIT
7705*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
7706*7c356e86SAndroid Build Coastguard Worker---
7707*7c356e86SAndroid Build Coastguard Workername: exit-err-4
7708*7c356e86SAndroid Build Coastguard Workerdescription:
7709*7c356e86SAndroid Build Coastguard Worker	"set -e" test suite (POSIX)
7710*7c356e86SAndroid Build Coastguard Workerstdin:
7711*7c356e86SAndroid Build Coastguard Worker	set -e
7712*7c356e86SAndroid Build Coastguard Worker	echo pre
7713*7c356e86SAndroid Build Coastguard Worker	if true ; then
7714*7c356e86SAndroid Build Coastguard Worker		false && echo foo
7715*7c356e86SAndroid Build Coastguard Worker	fi
7716*7c356e86SAndroid Build Coastguard Worker	echo bar
7717*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7718*7c356e86SAndroid Build Coastguard Worker	pre
7719*7c356e86SAndroid Build Coastguard Worker	bar
7720*7c356e86SAndroid Build Coastguard Worker---
7721*7c356e86SAndroid Build Coastguard Workername: exit-err-5
7722*7c356e86SAndroid Build Coastguard Workerdescription:
7723*7c356e86SAndroid Build Coastguard Worker	"set -e" test suite (POSIX)
7724*7c356e86SAndroid Build Coastguard Workerstdin:
7725*7c356e86SAndroid Build Coastguard Worker	set -e
7726*7c356e86SAndroid Build Coastguard Worker	foo() {
7727*7c356e86SAndroid Build Coastguard Worker		while [ "$1" ]; do
7728*7c356e86SAndroid Build Coastguard Worker			for E in $x; do
7729*7c356e86SAndroid Build Coastguard Worker				[ "$1" = "$E" ] && { shift ; continue 2 ; }
7730*7c356e86SAndroid Build Coastguard Worker			done
7731*7c356e86SAndroid Build Coastguard Worker			x="$x $1"
7732*7c356e86SAndroid Build Coastguard Worker			shift
7733*7c356e86SAndroid Build Coastguard Worker		done
7734*7c356e86SAndroid Build Coastguard Worker		echo $x
7735*7c356e86SAndroid Build Coastguard Worker	}
7736*7c356e86SAndroid Build Coastguard Worker	echo pre
7737*7c356e86SAndroid Build Coastguard Worker	foo a b b c
7738*7c356e86SAndroid Build Coastguard Worker	echo post
7739*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7740*7c356e86SAndroid Build Coastguard Worker	pre
7741*7c356e86SAndroid Build Coastguard Worker	a b c
7742*7c356e86SAndroid Build Coastguard Worker	post
7743*7c356e86SAndroid Build Coastguard Worker---
7744*7c356e86SAndroid Build Coastguard Workername: exit-err-6
7745*7c356e86SAndroid Build Coastguard Workerdescription:
7746*7c356e86SAndroid Build Coastguard Worker	"set -e" test suite (BSD make)
7747*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd
7748*7c356e86SAndroid Build Coastguard Workerstdin:
7749*7c356e86SAndroid Build Coastguard Worker	mkdir zd zd/a zd/b
7750*7c356e86SAndroid Build Coastguard Worker	print 'all:\n\t@echo eins\n\t@exit 42\n' >zd/a/Makefile
7751*7c356e86SAndroid Build Coastguard Worker	print 'all:\n\t@echo zwei\n' >zd/b/Makefile
7752*7c356e86SAndroid Build Coastguard Worker	wd=$(pwd)
7753*7c356e86SAndroid Build Coastguard Worker	set -e
7754*7c356e86SAndroid Build Coastguard Worker	for entry in a b; do (  set -e;  if [[ -d $wd/zd/$entry.i386 ]]; then  _newdir_="$entry.i386";  else  _newdir_="$entry";  fi;  if [[ -z $_THISDIR_ ]]; then  _nextdir_="$_newdir_";  else  _nextdir_="$_THISDIR_/$_newdir_";  fi;  _makefile_spec_=;  [[ ! -f $wd/zd/$_newdir_/Makefile.bsd-wrapper ]]  || _makefile_spec_="-f Makefile.bsd-wrapper";  subskipdir=;  for skipdir in ; do  subentry=${skipdir#$entry};  if [[ $subentry != $skipdir ]]; then  if [[ -z $subentry ]]; then  echo "($_nextdir_ skipped)";  break;  fi;  subskipdir="$subskipdir ${subentry#/}";  fi;  done;  if [[ -z $skipdir || -n $subentry ]]; then  echo "===> $_nextdir_";  cd $wd/zd/$_newdir_;  make SKIPDIR="$subskipdir" $_makefile_spec_  _THISDIR_="$_nextdir_"   all;  fi;  ) done 2>&1 | sed "s!$wd!WD!g"
7755*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7756*7c356e86SAndroid Build Coastguard Worker	===> a
7757*7c356e86SAndroid Build Coastguard Worker	eins
7758*7c356e86SAndroid Build Coastguard Worker	*** Error code 42
7759*7c356e86SAndroid Build Coastguard Worker
7760*7c356e86SAndroid Build Coastguard Worker	Stop in WD/zd/a (line 2 of Makefile).
7761*7c356e86SAndroid Build Coastguard Worker---
7762*7c356e86SAndroid Build Coastguard Workername: exit-err-7
7763*7c356e86SAndroid Build Coastguard Workerdescription:
7764*7c356e86SAndroid Build Coastguard Worker	"set -e" regression (LP#1104543)
7765*7c356e86SAndroid Build Coastguard Workerstdin:
7766*7c356e86SAndroid Build Coastguard Worker	set -e
7767*7c356e86SAndroid Build Coastguard Worker	bla() {
7768*7c356e86SAndroid Build Coastguard Worker		[ -x $PWD/nonexistant ] && $PWD/nonexistant
7769*7c356e86SAndroid Build Coastguard Worker	}
7770*7c356e86SAndroid Build Coastguard Worker	echo x
7771*7c356e86SAndroid Build Coastguard Worker	bla
7772*7c356e86SAndroid Build Coastguard Worker	echo y$?
7773*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7774*7c356e86SAndroid Build Coastguard Worker	x
7775*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
7776*7c356e86SAndroid Build Coastguard Worker---
7777*7c356e86SAndroid Build Coastguard Workername: exit-err-8
7778*7c356e86SAndroid Build Coastguard Workerdescription:
7779*7c356e86SAndroid Build Coastguard Worker	"set -e" regression (Debian #700526)
7780*7c356e86SAndroid Build Coastguard Workerstdin:
7781*7c356e86SAndroid Build Coastguard Worker	set -e
7782*7c356e86SAndroid Build Coastguard Worker	_db_cmd() { return $1; }
7783*7c356e86SAndroid Build Coastguard Worker	db_input() { _db_cmd 30; }
7784*7c356e86SAndroid Build Coastguard Worker	db_go() { _db_cmd 0; }
7785*7c356e86SAndroid Build Coastguard Worker	db_input || :
7786*7c356e86SAndroid Build Coastguard Worker	db_go
7787*7c356e86SAndroid Build Coastguard Worker	exit 0
7788*7c356e86SAndroid Build Coastguard Worker---
7789*7c356e86SAndroid Build Coastguard Workername: exit-err-9
7790*7c356e86SAndroid Build Coastguard Workerdescription:
7791*7c356e86SAndroid Build Coastguard Worker	"set -e" versus bang pipelines
7792*7c356e86SAndroid Build Coastguard Workerstdin:
7793*7c356e86SAndroid Build Coastguard Worker	set -e
7794*7c356e86SAndroid Build Coastguard Worker	! false | false
7795*7c356e86SAndroid Build Coastguard Worker	echo 1 ok
7796*7c356e86SAndroid Build Coastguard Worker	! false && false
7797*7c356e86SAndroid Build Coastguard Worker	echo 2 wrong
7798*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7799*7c356e86SAndroid Build Coastguard Worker	1 ok
7800*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
7801*7c356e86SAndroid Build Coastguard Worker---
7802*7c356e86SAndroid Build Coastguard Workername: exit-err-10
7803*7c356e86SAndroid Build Coastguard Workerdescription:
7804*7c356e86SAndroid Build Coastguard Worker	Debian #269067 (cf. regression-38 but with eval)
7805*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
7806*7c356e86SAndroid Build Coastguard Workerstdin:
7807*7c356e86SAndroid Build Coastguard Worker	eval false || true
7808*7c356e86SAndroid Build Coastguard Worker	echo = $? .
7809*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7810*7c356e86SAndroid Build Coastguard Worker	= 0 .
7811*7c356e86SAndroid Build Coastguard Worker---
7812*7c356e86SAndroid Build Coastguard Workername: exit-err-11
7813*7c356e86SAndroid Build Coastguard Workerdescription:
7814*7c356e86SAndroid Build Coastguard Worker	Fix -e inside eval, from Martijn Dekker; expected-stdout from ksh93
7815*7c356e86SAndroid Build Coastguard Workerstdin:
7816*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'eval '\''echo ${-//[!eh]}; false; echo phantom e'\''; echo x$?'
7817*7c356e86SAndroid Build Coastguard Worker	echo = $?
7818*7c356e86SAndroid Build Coastguard Worker	"$__progname" -ec 'eval '\''echo ${-//[!eh]}; false; echo phantom e'\''; echo x$?'
7819*7c356e86SAndroid Build Coastguard Worker	echo = $?
7820*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7821*7c356e86SAndroid Build Coastguard Worker	h
7822*7c356e86SAndroid Build Coastguard Worker	phantom e
7823*7c356e86SAndroid Build Coastguard Worker	x0
7824*7c356e86SAndroid Build Coastguard Worker	= 0
7825*7c356e86SAndroid Build Coastguard Worker	eh
7826*7c356e86SAndroid Build Coastguard Worker	= 1
7827*7c356e86SAndroid Build Coastguard Worker---
7828*7c356e86SAndroid Build Coastguard Workername: exit-enoent-1
7829*7c356e86SAndroid Build Coastguard Workerdescription:
7830*7c356e86SAndroid Build Coastguard Worker	SUSv4 says that the shell should exit with 126/127 in some situations
7831*7c356e86SAndroid Build Coastguard Workerstdin:
7832*7c356e86SAndroid Build Coastguard Worker	i=0
7833*7c356e86SAndroid Build Coastguard Worker	(echo; echo :) >x
7834*7c356e86SAndroid Build Coastguard Worker	"$__progname" ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r .
7835*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r .
7836*7c356e86SAndroid Build Coastguard Worker	echo exit 42 >x
7837*7c356e86SAndroid Build Coastguard Worker	"$__progname" ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r .
7838*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r .
7839*7c356e86SAndroid Build Coastguard Worker	rm -f x
7840*7c356e86SAndroid Build Coastguard Worker	"$__progname" ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r .
7841*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r .
7842*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7843*7c356e86SAndroid Build Coastguard Worker	0 0 .
7844*7c356e86SAndroid Build Coastguard Worker	1 126 .
7845*7c356e86SAndroid Build Coastguard Worker	2 42 .
7846*7c356e86SAndroid Build Coastguard Worker	3 126 .
7847*7c356e86SAndroid Build Coastguard Worker	4 127 .
7848*7c356e86SAndroid Build Coastguard Worker	5 127 .
7849*7c356e86SAndroid Build Coastguard Worker---
7850*7c356e86SAndroid Build Coastguard Workername: exit-eval-1
7851*7c356e86SAndroid Build Coastguard Workerdescription:
7852*7c356e86SAndroid Build Coastguard Worker	Check eval vs substitution exit codes (ksh93 alike)
7853*7c356e86SAndroid Build Coastguard Workerstdin:
7854*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7855*7c356e86SAndroid Build Coastguard Worker	eval $(false)
7856*7c356e86SAndroid Build Coastguard Worker	echo A $?
7857*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7858*7c356e86SAndroid Build Coastguard Worker	eval ' $(false)'
7859*7c356e86SAndroid Build Coastguard Worker	echo B $?
7860*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7861*7c356e86SAndroid Build Coastguard Worker	eval " $(false)"
7862*7c356e86SAndroid Build Coastguard Worker	echo C $?
7863*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7864*7c356e86SAndroid Build Coastguard Worker	eval "eval $(false)"
7865*7c356e86SAndroid Build Coastguard Worker	echo D $?
7866*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7867*7c356e86SAndroid Build Coastguard Worker	eval 'eval '"$(false)"
7868*7c356e86SAndroid Build Coastguard Worker	echo E $?
7869*7c356e86SAndroid Build Coastguard Worker	IFS="$IFS:"
7870*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7871*7c356e86SAndroid Build Coastguard Worker	eval $(echo :; false)
7872*7c356e86SAndroid Build Coastguard Worker	echo F $?
7873*7c356e86SAndroid Build Coastguard Worker	echo -n "G "
7874*7c356e86SAndroid Build Coastguard Worker	(exit 12)
7875*7c356e86SAndroid Build Coastguard Worker	eval 'echo $?'
7876*7c356e86SAndroid Build Coastguard Worker	echo H $?
7877*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7878*7c356e86SAndroid Build Coastguard Worker	A 0
7879*7c356e86SAndroid Build Coastguard Worker	B 1
7880*7c356e86SAndroid Build Coastguard Worker	C 0
7881*7c356e86SAndroid Build Coastguard Worker	D 0
7882*7c356e86SAndroid Build Coastguard Worker	E 0
7883*7c356e86SAndroid Build Coastguard Worker	F 0
7884*7c356e86SAndroid Build Coastguard Worker	G 12
7885*7c356e86SAndroid Build Coastguard Worker	H 0
7886*7c356e86SAndroid Build Coastguard Worker---
7887*7c356e86SAndroid Build Coastguard Workername: exit-trap-1
7888*7c356e86SAndroid Build Coastguard Workerdescription:
7889*7c356e86SAndroid Build Coastguard Worker	Check that "exit" with no arguments behaves SUSv4 conformant.
7890*7c356e86SAndroid Build Coastguard Workerstdin:
7891*7c356e86SAndroid Build Coastguard Worker	trap 'echo hi; exit' EXIT
7892*7c356e86SAndroid Build Coastguard Worker	exit 9
7893*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7894*7c356e86SAndroid Build Coastguard Worker	hi
7895*7c356e86SAndroid Build Coastguard Workerexpected-exit: 9
7896*7c356e86SAndroid Build Coastguard Worker---
7897*7c356e86SAndroid Build Coastguard Workername: exit-trap-2
7898*7c356e86SAndroid Build Coastguard Workerdescription:
7899*7c356e86SAndroid Build Coastguard Worker	Check that ERR and EXIT traps are run just like GNU bash does.
7900*7c356e86SAndroid Build Coastguard Worker	ksh93 runs ERtrap after “parameter null or not set” (which mksh
7901*7c356e86SAndroid Build Coastguard Worker	used to do) but (bug) continues “and out”, exit 0, in +e eval-undef.
7902*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "x"
7903*7c356e86SAndroid Build Coastguard Worker	v=; unset v
7904*7c356e86SAndroid Build Coastguard Worker	trap 'echo EXtrap' EXIT
7905*7c356e86SAndroid Build Coastguard Worker	trap 'echo ERtrap' ERR
7906*7c356e86SAndroid Build Coastguard Worker	set $1
7907*7c356e86SAndroid Build Coastguard Worker	echo "and run $2"
7908*7c356e86SAndroid Build Coastguard Worker	eval $2
7909*7c356e86SAndroid Build Coastguard Worker	echo and out
7910*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "xt"
7911*7c356e86SAndroid Build Coastguard Worker	v=; unset v
7912*7c356e86SAndroid Build Coastguard Worker	trap 'echo EXtrap' EXIT
7913*7c356e86SAndroid Build Coastguard Worker	trap 'echo ERtrap' ERR
7914*7c356e86SAndroid Build Coastguard Worker	set $1
7915*7c356e86SAndroid Build Coastguard Worker	echo 'and run true'
7916*7c356e86SAndroid Build Coastguard Worker	true
7917*7c356e86SAndroid Build Coastguard Worker	echo and out
7918*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "xf"
7919*7c356e86SAndroid Build Coastguard Worker	v=; unset v
7920*7c356e86SAndroid Build Coastguard Worker	trap 'echo EXtrap' EXIT
7921*7c356e86SAndroid Build Coastguard Worker	trap 'echo ERtrap' ERR
7922*7c356e86SAndroid Build Coastguard Worker	set $1
7923*7c356e86SAndroid Build Coastguard Worker	echo 'and run false'
7924*7c356e86SAndroid Build Coastguard Worker	false
7925*7c356e86SAndroid Build Coastguard Worker	echo and out
7926*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "xu"
7927*7c356e86SAndroid Build Coastguard Worker	v=; unset v
7928*7c356e86SAndroid Build Coastguard Worker	trap 'echo EXtrap' EXIT
7929*7c356e86SAndroid Build Coastguard Worker	trap 'echo ERtrap' ERR
7930*7c356e86SAndroid Build Coastguard Worker	set $1
7931*7c356e86SAndroid Build Coastguard Worker	echo 'and run ${v?}'
7932*7c356e86SAndroid Build Coastguard Worker	${v?}
7933*7c356e86SAndroid Build Coastguard Worker	echo and out
7934*7c356e86SAndroid Build Coastguard Workerstdin:
7935*7c356e86SAndroid Build Coastguard Worker	runtest() {
7936*7c356e86SAndroid Build Coastguard Worker		rm -f rc
7937*7c356e86SAndroid Build Coastguard Worker		(
7938*7c356e86SAndroid Build Coastguard Worker			"$__progname" "$@"
7939*7c356e86SAndroid Build Coastguard Worker			echo $? >rc
7940*7c356e86SAndroid Build Coastguard Worker		) 2>&1 | sed \
7941*7c356e86SAndroid Build Coastguard Worker		    -e 's/parameter not set/parameter null or not set/' \
7942*7c356e86SAndroid Build Coastguard Worker		    -e 's/[[]6]//' -e 's/: eval: line 1//' -e 's/: line 6//' \
7943*7c356e86SAndroid Build Coastguard Worker		    -e "s^${__progname%.exe}\.*e*x*e*: <stdin>\[[0-9]*]PROG"
7944*7c356e86SAndroid Build Coastguard Worker	}
7945*7c356e86SAndroid Build Coastguard Worker	xe=-e
7946*7c356e86SAndroid Build Coastguard Worker	echo : $xe
7947*7c356e86SAndroid Build Coastguard Worker	runtest x $xe true
7948*7c356e86SAndroid Build Coastguard Worker	echo = eval-true $(<rc) .
7949*7c356e86SAndroid Build Coastguard Worker	runtest x $xe false
7950*7c356e86SAndroid Build Coastguard Worker	echo = eval-false $(<rc) .
7951*7c356e86SAndroid Build Coastguard Worker	runtest x $xe '${v?}'
7952*7c356e86SAndroid Build Coastguard Worker	echo = eval-undef $(<rc) .
7953*7c356e86SAndroid Build Coastguard Worker	runtest xt $xe
7954*7c356e86SAndroid Build Coastguard Worker	echo = noeval-true $(<rc) .
7955*7c356e86SAndroid Build Coastguard Worker	runtest xf $xe
7956*7c356e86SAndroid Build Coastguard Worker	echo = noeval-false $(<rc) .
7957*7c356e86SAndroid Build Coastguard Worker	runtest xu $xe
7958*7c356e86SAndroid Build Coastguard Worker	echo = noeval-undef $(<rc) .
7959*7c356e86SAndroid Build Coastguard Worker	xe=+e
7960*7c356e86SAndroid Build Coastguard Worker	echo : $xe
7961*7c356e86SAndroid Build Coastguard Worker	runtest x $xe true
7962*7c356e86SAndroid Build Coastguard Worker	echo = eval-true $(<rc) .
7963*7c356e86SAndroid Build Coastguard Worker	runtest x $xe false
7964*7c356e86SAndroid Build Coastguard Worker	echo = eval-false $(<rc) .
7965*7c356e86SAndroid Build Coastguard Worker	runtest x $xe '${v?}'
7966*7c356e86SAndroid Build Coastguard Worker	echo = eval-undef $(<rc) .
7967*7c356e86SAndroid Build Coastguard Worker	runtest xt $xe
7968*7c356e86SAndroid Build Coastguard Worker	echo = noeval-true $(<rc) .
7969*7c356e86SAndroid Build Coastguard Worker	runtest xf $xe
7970*7c356e86SAndroid Build Coastguard Worker	echo = noeval-false $(<rc) .
7971*7c356e86SAndroid Build Coastguard Worker	runtest xu $xe
7972*7c356e86SAndroid Build Coastguard Worker	echo = noeval-undef $(<rc) .
7973*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
7974*7c356e86SAndroid Build Coastguard Worker	: -e
7975*7c356e86SAndroid Build Coastguard Worker	and run true
7976*7c356e86SAndroid Build Coastguard Worker	and out
7977*7c356e86SAndroid Build Coastguard Worker	EXtrap
7978*7c356e86SAndroid Build Coastguard Worker	= eval-true 0 .
7979*7c356e86SAndroid Build Coastguard Worker	and run false
7980*7c356e86SAndroid Build Coastguard Worker	ERtrap
7981*7c356e86SAndroid Build Coastguard Worker	EXtrap
7982*7c356e86SAndroid Build Coastguard Worker	= eval-false 1 .
7983*7c356e86SAndroid Build Coastguard Worker	and run ${v?}
7984*7c356e86SAndroid Build Coastguard Worker	x: v: parameter null or not set
7985*7c356e86SAndroid Build Coastguard Worker	EXtrap
7986*7c356e86SAndroid Build Coastguard Worker	= eval-undef 1 .
7987*7c356e86SAndroid Build Coastguard Worker	and run true
7988*7c356e86SAndroid Build Coastguard Worker	and out
7989*7c356e86SAndroid Build Coastguard Worker	EXtrap
7990*7c356e86SAndroid Build Coastguard Worker	= noeval-true 0 .
7991*7c356e86SAndroid Build Coastguard Worker	and run false
7992*7c356e86SAndroid Build Coastguard Worker	ERtrap
7993*7c356e86SAndroid Build Coastguard Worker	EXtrap
7994*7c356e86SAndroid Build Coastguard Worker	= noeval-false 1 .
7995*7c356e86SAndroid Build Coastguard Worker	and run ${v?}
7996*7c356e86SAndroid Build Coastguard Worker	xu: v: parameter null or not set
7997*7c356e86SAndroid Build Coastguard Worker	EXtrap
7998*7c356e86SAndroid Build Coastguard Worker	= noeval-undef 1 .
7999*7c356e86SAndroid Build Coastguard Worker	: +e
8000*7c356e86SAndroid Build Coastguard Worker	and run true
8001*7c356e86SAndroid Build Coastguard Worker	and out
8002*7c356e86SAndroid Build Coastguard Worker	EXtrap
8003*7c356e86SAndroid Build Coastguard Worker	= eval-true 0 .
8004*7c356e86SAndroid Build Coastguard Worker	and run false
8005*7c356e86SAndroid Build Coastguard Worker	ERtrap
8006*7c356e86SAndroid Build Coastguard Worker	ERtrap
8007*7c356e86SAndroid Build Coastguard Worker	and out
8008*7c356e86SAndroid Build Coastguard Worker	EXtrap
8009*7c356e86SAndroid Build Coastguard Worker	= eval-false 0 .
8010*7c356e86SAndroid Build Coastguard Worker	and run ${v?}
8011*7c356e86SAndroid Build Coastguard Worker	x: v: parameter null or not set
8012*7c356e86SAndroid Build Coastguard Worker	EXtrap
8013*7c356e86SAndroid Build Coastguard Worker	= eval-undef 1 .
8014*7c356e86SAndroid Build Coastguard Worker	and run true
8015*7c356e86SAndroid Build Coastguard Worker	and out
8016*7c356e86SAndroid Build Coastguard Worker	EXtrap
8017*7c356e86SAndroid Build Coastguard Worker	= noeval-true 0 .
8018*7c356e86SAndroid Build Coastguard Worker	and run false
8019*7c356e86SAndroid Build Coastguard Worker	ERtrap
8020*7c356e86SAndroid Build Coastguard Worker	and out
8021*7c356e86SAndroid Build Coastguard Worker	EXtrap
8022*7c356e86SAndroid Build Coastguard Worker	= noeval-false 0 .
8023*7c356e86SAndroid Build Coastguard Worker	and run ${v?}
8024*7c356e86SAndroid Build Coastguard Worker	xu: v: parameter null or not set
8025*7c356e86SAndroid Build Coastguard Worker	EXtrap
8026*7c356e86SAndroid Build Coastguard Worker	= noeval-undef 1 .
8027*7c356e86SAndroid Build Coastguard Worker---
8028*7c356e86SAndroid Build Coastguard Workername: exit-trap-3
8029*7c356e86SAndroid Build Coastguard Workerdescription:
8030*7c356e86SAndroid Build Coastguard Worker	Check that the EXIT trap is run in many places, Debian #910276
8031*7c356e86SAndroid Build Coastguard Workerstdin:
8032*7c356e86SAndroid Build Coastguard Worker	fkt() {
8033*7c356e86SAndroid Build Coastguard Worker		trap -- "echo $1 >&2" EXIT
8034*7c356e86SAndroid Build Coastguard Worker	}
8035*7c356e86SAndroid Build Coastguard Worker	fkt shell_exit
8036*7c356e86SAndroid Build Coastguard Worker	$(fkt fn_exit)
8037*7c356e86SAndroid Build Coastguard Worker	$(trap -- "echo comsub_exit >&2" EXIT)
8038*7c356e86SAndroid Build Coastguard Worker	(trap -- "echo subshell_exit >&2" EXIT)
8039*7c356e86SAndroid Build Coastguard Workerexpected-stderr:
8040*7c356e86SAndroid Build Coastguard Worker	fn_exit
8041*7c356e86SAndroid Build Coastguard Worker	comsub_exit
8042*7c356e86SAndroid Build Coastguard Worker	subshell_exit
8043*7c356e86SAndroid Build Coastguard Worker	shell_exit
8044*7c356e86SAndroid Build Coastguard Worker---
8045*7c356e86SAndroid Build Coastguard Workername: exit-trap-interactive
8046*7c356e86SAndroid Build Coastguard Workerdescription:
8047*7c356e86SAndroid Build Coastguard Worker	Check that interactive shell doesn't exit via EXIT trap on syntax error
8048*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
8049*7c356e86SAndroid Build Coastguard Workerstdin:
8050*7c356e86SAndroid Build Coastguard Worker	trap -- EXIT
8051*7c356e86SAndroid Build Coastguard Worker	echo Syntax error <
8052*7c356e86SAndroid Build Coastguard Worker	echo 'After error 1'
8053*7c356e86SAndroid Build Coastguard Worker	trap 'echo Exit trap' EXIT
8054*7c356e86SAndroid Build Coastguard Worker	echo Syntax error <
8055*7c356e86SAndroid Build Coastguard Worker	echo 'After error 2'
8056*7c356e86SAndroid Build Coastguard Worker	trap 'echo Exit trap' EXIT
8057*7c356e86SAndroid Build Coastguard Worker	exit
8058*7c356e86SAndroid Build Coastguard Worker	echo 'After exit'
8059*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8060*7c356e86SAndroid Build Coastguard Worker	After error 1
8061*7c356e86SAndroid Build Coastguard Worker	After error 2
8062*7c356e86SAndroid Build Coastguard Worker	Exit trap
8063*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8064*7c356e86SAndroid Build Coastguard Worker	/syntax error: unexpected 'newline'/
8065*7c356e86SAndroid Build Coastguard Worker---
8066*7c356e86SAndroid Build Coastguard Workername: test-stlt-1
8067*7c356e86SAndroid Build Coastguard Workerdescription:
8068*7c356e86SAndroid Build Coastguard Worker	Check that test also can handle string1 < string2 etc.
8069*7c356e86SAndroid Build Coastguard Workerstdin:
8070*7c356e86SAndroid Build Coastguard Worker	test 2005/10/08 '<' 2005/08/21 && echo ja || echo nein
8071*7c356e86SAndroid Build Coastguard Worker	test 2005/08/21 \< 2005/10/08 && echo ja || echo nein
8072*7c356e86SAndroid Build Coastguard Worker	test 2005/10/08 '>' 2005/08/21 && echo ja || echo nein
8073*7c356e86SAndroid Build Coastguard Worker	test 2005/08/21 \> 2005/10/08 && echo ja || echo nein
8074*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8075*7c356e86SAndroid Build Coastguard Worker	nein
8076*7c356e86SAndroid Build Coastguard Worker	ja
8077*7c356e86SAndroid Build Coastguard Worker	ja
8078*7c356e86SAndroid Build Coastguard Worker	nein
8079*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: !/unexpected op/
8080*7c356e86SAndroid Build Coastguard Worker---
8081*7c356e86SAndroid Build Coastguard Workername: test-str-pattern
8082*7c356e86SAndroid Build Coastguard Workerdescription:
8083*7c356e86SAndroid Build Coastguard Worker	Check that [[ x = $y ]] can take extglobs, like ksh93
8084*7c356e86SAndroid Build Coastguard Workerstdin:
8085*7c356e86SAndroid Build Coastguard Worker	[[ -n $BASH_VERSION ]] && shopt -s extglob
8086*7c356e86SAndroid Build Coastguard Worker	function one {
8087*7c356e86SAndroid Build Coastguard Worker		n=$1 x=$2 y=$3 z=${4:-$3}
8088*7c356e86SAndroid Build Coastguard Worker		[[ $x = $y ]]; a=$?
8089*7c356e86SAndroid Build Coastguard Worker		[[ $x = "$y" ]]; b=$?
8090*7c356e86SAndroid Build Coastguard Worker		eval '[[ $x = '"$z"' ]]; c=$?'
8091*7c356e86SAndroid Build Coastguard Worker		eval '[[ $x = "'"$z"'" ]]; d=$?'
8092*7c356e86SAndroid Build Coastguard Worker		echo $n $a $b $c $d .
8093*7c356e86SAndroid Build Coastguard Worker	}
8094*7c356e86SAndroid Build Coastguard Worker	x='a\'
8095*7c356e86SAndroid Build Coastguard Worker	[[ $x = a\  ]]; echo 01 $? .
8096*7c356e86SAndroid Build Coastguard Worker	[[ $x = a\\ ]]; echo 02 $? .
8097*7c356e86SAndroid Build Coastguard Worker	one 03 'a\'	'a\'	'a\\'
8098*7c356e86SAndroid Build Coastguard Worker	one 04 'a\b'	'a\b'
8099*7c356e86SAndroid Build Coastguard Worker	one 05 'a\b'	'a\\b'
8100*7c356e86SAndroid Build Coastguard Worker	one 06 'foo'	'f+(o)'
8101*7c356e86SAndroid Build Coastguard Worker	one 07 'f+(o)'	'f+(o)'
8102*7c356e86SAndroid Build Coastguard Worker	one 08 'f+(o'	'f+(o'	'f+\(o'
8103*7c356e86SAndroid Build Coastguard Worker	one 09 foo	'f+(o'	'f+\(o'
8104*7c356e86SAndroid Build Coastguard Worker	one 10 abcde	'a\*e'
8105*7c356e86SAndroid Build Coastguard Worker	one 11 'a*e'	'a\*e'
8106*7c356e86SAndroid Build Coastguard Worker	one 12 'a\*e'	'a\*e'
8107*7c356e86SAndroid Build Coastguard Worker	echo extras:
8108*7c356e86SAndroid Build Coastguard Worker	x='f+(o'
8109*7c356e86SAndroid Build Coastguard Worker	z='f+(o'
8110*7c356e86SAndroid Build Coastguard Worker	eval '[[ $x = "'"$z"'" ]]; echo 14 $? "(08:4)" .'
8111*7c356e86SAndroid Build Coastguard Worker	x=foo
8112*7c356e86SAndroid Build Coastguard Worker	eval '[[ $x = "'"$z"'" ]]; echo 15 $? "(09:4)" .'
8113*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8114*7c356e86SAndroid Build Coastguard Worker	01 1 .
8115*7c356e86SAndroid Build Coastguard Worker	02 0 .
8116*7c356e86SAndroid Build Coastguard Worker	03 0 0 0 0 .
8117*7c356e86SAndroid Build Coastguard Worker	04 1 0 1 0 .
8118*7c356e86SAndroid Build Coastguard Worker	05 0 1 0 0 .
8119*7c356e86SAndroid Build Coastguard Worker	06 0 1 0 1 .
8120*7c356e86SAndroid Build Coastguard Worker	07 1 0 1 0 .
8121*7c356e86SAndroid Build Coastguard Worker	08 0 0 0 1 .
8122*7c356e86SAndroid Build Coastguard Worker	09 1 1 1 1 .
8123*7c356e86SAndroid Build Coastguard Worker	10 1 1 1 1 .
8124*7c356e86SAndroid Build Coastguard Worker	11 0 1 0 1 .
8125*7c356e86SAndroid Build Coastguard Worker	12 1 0 1 0 .
8126*7c356e86SAndroid Build Coastguard Worker	extras:
8127*7c356e86SAndroid Build Coastguard Worker	14 0 (08:4) .
8128*7c356e86SAndroid Build Coastguard Worker	15 1 (09:4) .
8129*7c356e86SAndroid Build Coastguard Worker---
8130*7c356e86SAndroid Build Coastguard Workername: test-precedence-1
8131*7c356e86SAndroid Build Coastguard Workerdescription:
8132*7c356e86SAndroid Build Coastguard Worker	Check a weird precedence case (and POSIX echo)
8133*7c356e86SAndroid Build Coastguard Workerstdin:
8134*7c356e86SAndroid Build Coastguard Worker	test \( -f = -f \)
8135*7c356e86SAndroid Build Coastguard Worker	rv=$?
8136*7c356e86SAndroid Build Coastguard Worker	echo $rv
8137*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8138*7c356e86SAndroid Build Coastguard Worker	0
8139*7c356e86SAndroid Build Coastguard Worker---
8140*7c356e86SAndroid Build Coastguard Workername: test-option-1
8141*7c356e86SAndroid Build Coastguard Workerdescription:
8142*7c356e86SAndroid Build Coastguard Worker	Test the test -o operator
8143*7c356e86SAndroid Build Coastguard Workerstdin:
8144*7c356e86SAndroid Build Coastguard Worker	runtest() {
8145*7c356e86SAndroid Build Coastguard Worker		test -o $1; echo $?
8146*7c356e86SAndroid Build Coastguard Worker		[ -o $1 ]; echo $?
8147*7c356e86SAndroid Build Coastguard Worker		[[ -o $1 ]]; echo $?
8148*7c356e86SAndroid Build Coastguard Worker	}
8149*7c356e86SAndroid Build Coastguard Worker	if_test() {
8150*7c356e86SAndroid Build Coastguard Worker		test -o $1 -o -o !$1; echo $?
8151*7c356e86SAndroid Build Coastguard Worker		[ -o $1 -o -o !$1 ]; echo $?
8152*7c356e86SAndroid Build Coastguard Worker		[[ -o $1 || -o !$1 ]]; echo $?
8153*7c356e86SAndroid Build Coastguard Worker		test -o ?$1; echo $?
8154*7c356e86SAndroid Build Coastguard Worker	}
8155*7c356e86SAndroid Build Coastguard Worker	echo 0y $(if_test utf8-mode) =
8156*7c356e86SAndroid Build Coastguard Worker	echo 0n $(if_test utf8-hack) =
8157*7c356e86SAndroid Build Coastguard Worker	echo 1= $(runtest utf8-hack) =
8158*7c356e86SAndroid Build Coastguard Worker	echo 2= $(runtest !utf8-hack) =
8159*7c356e86SAndroid Build Coastguard Worker	echo 3= $(runtest ?utf8-hack) =
8160*7c356e86SAndroid Build Coastguard Worker	set +U
8161*7c356e86SAndroid Build Coastguard Worker	echo 1+ $(runtest utf8-mode) =
8162*7c356e86SAndroid Build Coastguard Worker	echo 2+ $(runtest !utf8-mode) =
8163*7c356e86SAndroid Build Coastguard Worker	echo 3+ $(runtest ?utf8-mode) =
8164*7c356e86SAndroid Build Coastguard Worker	set -U
8165*7c356e86SAndroid Build Coastguard Worker	echo 1- $(runtest utf8-mode) =
8166*7c356e86SAndroid Build Coastguard Worker	echo 2- $(runtest !utf8-mode) =
8167*7c356e86SAndroid Build Coastguard Worker	echo 3- $(runtest ?utf8-mode) =
8168*7c356e86SAndroid Build Coastguard Worker	echo = short flags =
8169*7c356e86SAndroid Build Coastguard Worker	echo 0y $(if_test -U) =
8170*7c356e86SAndroid Build Coastguard Worker	echo 0y $(if_test +U) =
8171*7c356e86SAndroid Build Coastguard Worker	echo 0n $(if_test -_) =
8172*7c356e86SAndroid Build Coastguard Worker	echo 0n $(if_test -U-) =
8173*7c356e86SAndroid Build Coastguard Worker	echo 1= $(runtest -_) =
8174*7c356e86SAndroid Build Coastguard Worker	echo 2= $(runtest !-_) =
8175*7c356e86SAndroid Build Coastguard Worker	echo 3= $(runtest ?-_) =
8176*7c356e86SAndroid Build Coastguard Worker	set +U
8177*7c356e86SAndroid Build Coastguard Worker	echo 1+ $(runtest -U) =
8178*7c356e86SAndroid Build Coastguard Worker	echo 2+ $(runtest !-U) =
8179*7c356e86SAndroid Build Coastguard Worker	echo 3+ $(runtest ?-U) =
8180*7c356e86SAndroid Build Coastguard Worker	echo 1+ $(runtest +U) =
8181*7c356e86SAndroid Build Coastguard Worker	echo 2+ $(runtest !+U) =
8182*7c356e86SAndroid Build Coastguard Worker	echo 3+ $(runtest ?+U) =
8183*7c356e86SAndroid Build Coastguard Worker	set -U
8184*7c356e86SAndroid Build Coastguard Worker	echo 1- $(runtest -U) =
8185*7c356e86SAndroid Build Coastguard Worker	echo 2- $(runtest !-U) =
8186*7c356e86SAndroid Build Coastguard Worker	echo 3- $(runtest ?-U) =
8187*7c356e86SAndroid Build Coastguard Worker	echo 1- $(runtest +U) =
8188*7c356e86SAndroid Build Coastguard Worker	echo 2- $(runtest !+U) =
8189*7c356e86SAndroid Build Coastguard Worker	echo 3- $(runtest ?+U) =
8190*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8191*7c356e86SAndroid Build Coastguard Worker	0y 0 0 0 0 =
8192*7c356e86SAndroid Build Coastguard Worker	0n 1 1 1 1 =
8193*7c356e86SAndroid Build Coastguard Worker	1= 1 1 1 =
8194*7c356e86SAndroid Build Coastguard Worker	2= 1 1 1 =
8195*7c356e86SAndroid Build Coastguard Worker	3= 1 1 1 =
8196*7c356e86SAndroid Build Coastguard Worker	1+ 1 1 1 =
8197*7c356e86SAndroid Build Coastguard Worker	2+ 0 0 0 =
8198*7c356e86SAndroid Build Coastguard Worker	3+ 0 0 0 =
8199*7c356e86SAndroid Build Coastguard Worker	1- 0 0 0 =
8200*7c356e86SAndroid Build Coastguard Worker	2- 1 1 1 =
8201*7c356e86SAndroid Build Coastguard Worker	3- 0 0 0 =
8202*7c356e86SAndroid Build Coastguard Worker	= short flags =
8203*7c356e86SAndroid Build Coastguard Worker	0y 0 0 0 0 =
8204*7c356e86SAndroid Build Coastguard Worker	0y 0 0 0 0 =
8205*7c356e86SAndroid Build Coastguard Worker	0n 1 1 1 1 =
8206*7c356e86SAndroid Build Coastguard Worker	0n 1 1 1 1 =
8207*7c356e86SAndroid Build Coastguard Worker	1= 1 1 1 =
8208*7c356e86SAndroid Build Coastguard Worker	2= 1 1 1 =
8209*7c356e86SAndroid Build Coastguard Worker	3= 1 1 1 =
8210*7c356e86SAndroid Build Coastguard Worker	1+ 1 1 1 =
8211*7c356e86SAndroid Build Coastguard Worker	2+ 0 0 0 =
8212*7c356e86SAndroid Build Coastguard Worker	3+ 0 0 0 =
8213*7c356e86SAndroid Build Coastguard Worker	1+ 1 1 1 =
8214*7c356e86SAndroid Build Coastguard Worker	2+ 0 0 0 =
8215*7c356e86SAndroid Build Coastguard Worker	3+ 0 0 0 =
8216*7c356e86SAndroid Build Coastguard Worker	1- 0 0 0 =
8217*7c356e86SAndroid Build Coastguard Worker	2- 1 1 1 =
8218*7c356e86SAndroid Build Coastguard Worker	3- 0 0 0 =
8219*7c356e86SAndroid Build Coastguard Worker	1- 0 0 0 =
8220*7c356e86SAndroid Build Coastguard Worker	2- 1 1 1 =
8221*7c356e86SAndroid Build Coastguard Worker	3- 0 0 0 =
8222*7c356e86SAndroid Build Coastguard Worker---
8223*7c356e86SAndroid Build Coastguard Workername: test-varset-1
8224*7c356e86SAndroid Build Coastguard Workerdescription:
8225*7c356e86SAndroid Build Coastguard Worker	Test the test -v operator
8226*7c356e86SAndroid Build Coastguard Workerstdin:
8227*7c356e86SAndroid Build Coastguard Worker	[[ -v a ]]
8228*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8229*7c356e86SAndroid Build Coastguard Worker	a=
8230*7c356e86SAndroid Build Coastguard Worker	[[ -v a ]]
8231*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8232*7c356e86SAndroid Build Coastguard Worker	unset a
8233*7c356e86SAndroid Build Coastguard Worker	[[ -v a ]]
8234*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8235*7c356e86SAndroid Build Coastguard Worker	a=x
8236*7c356e86SAndroid Build Coastguard Worker	[[ -v a ]]
8237*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8238*7c356e86SAndroid Build Coastguard Worker	nameref b=a
8239*7c356e86SAndroid Build Coastguard Worker	[[ -v b ]]
8240*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8241*7c356e86SAndroid Build Coastguard Worker	unset a
8242*7c356e86SAndroid Build Coastguard Worker	[[ -v b ]]
8243*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8244*7c356e86SAndroid Build Coastguard Worker	x[1]=y
8245*7c356e86SAndroid Build Coastguard Worker	[[ -v x ]]
8246*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8247*7c356e86SAndroid Build Coastguard Worker	[[ -v x[0] ]]
8248*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8249*7c356e86SAndroid Build Coastguard Worker	[[ -v x[1] ]]
8250*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8251*7c356e86SAndroid Build Coastguard Worker	[[ -v x[2] ]]
8252*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8253*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8254*7c356e86SAndroid Build Coastguard Worker	1 1
8255*7c356e86SAndroid Build Coastguard Worker	2 0
8256*7c356e86SAndroid Build Coastguard Worker	3 1
8257*7c356e86SAndroid Build Coastguard Worker	4 0
8258*7c356e86SAndroid Build Coastguard Worker	5 0
8259*7c356e86SAndroid Build Coastguard Worker	6 1
8260*7c356e86SAndroid Build Coastguard Worker	7 1
8261*7c356e86SAndroid Build Coastguard Worker	8 1
8262*7c356e86SAndroid Build Coastguard Worker	9 0
8263*7c356e86SAndroid Build Coastguard Worker	10 1
8264*7c356e86SAndroid Build Coastguard Worker---
8265*7c356e86SAndroid Build Coastguard Workername: test-varset-2
8266*7c356e86SAndroid Build Coastguard Workerdescription:
8267*7c356e86SAndroid Build Coastguard Worker	test -v works only on scalars
8268*7c356e86SAndroid Build Coastguard Workerstdin:
8269*7c356e86SAndroid Build Coastguard Worker	[[ -v x[*] ]]
8270*7c356e86SAndroid Build Coastguard Worker	echo ok
8271*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
8272*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8273*7c356e86SAndroid Build Coastguard Worker	/unexpected '\*'/
8274*7c356e86SAndroid Build Coastguard Worker---
8275*7c356e86SAndroid Build Coastguard Workername: test-stnze-1
8276*7c356e86SAndroid Build Coastguard Workerdescription:
8277*7c356e86SAndroid Build Coastguard Worker	Check that the short form [ $x ] works
8278*7c356e86SAndroid Build Coastguard Workerstdin:
8279*7c356e86SAndroid Build Coastguard Worker	i=0
8280*7c356e86SAndroid Build Coastguard Worker	[ -n $x ]
8281*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8282*7c356e86SAndroid Build Coastguard Worker	[ $x ]
8283*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8284*7c356e86SAndroid Build Coastguard Worker	[ -n "$x" ]
8285*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8286*7c356e86SAndroid Build Coastguard Worker	[ "$x" ]
8287*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8288*7c356e86SAndroid Build Coastguard Worker	x=0
8289*7c356e86SAndroid Build Coastguard Worker	[ -n $x ]
8290*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8291*7c356e86SAndroid Build Coastguard Worker	[ $x ]
8292*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8293*7c356e86SAndroid Build Coastguard Worker	[ -n "$x" ]
8294*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8295*7c356e86SAndroid Build Coastguard Worker	[ "$x" ]
8296*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8297*7c356e86SAndroid Build Coastguard Worker	x='1 -a 1 = 2'
8298*7c356e86SAndroid Build Coastguard Worker	[ -n $x ]
8299*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8300*7c356e86SAndroid Build Coastguard Worker	[ $x ]
8301*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8302*7c356e86SAndroid Build Coastguard Worker	[ -n "$x" ]
8303*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8304*7c356e86SAndroid Build Coastguard Worker	[ "$x" ]
8305*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8306*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8307*7c356e86SAndroid Build Coastguard Worker	1 0
8308*7c356e86SAndroid Build Coastguard Worker	2 1
8309*7c356e86SAndroid Build Coastguard Worker	3 1
8310*7c356e86SAndroid Build Coastguard Worker	4 1
8311*7c356e86SAndroid Build Coastguard Worker	5 0
8312*7c356e86SAndroid Build Coastguard Worker	6 0
8313*7c356e86SAndroid Build Coastguard Worker	7 0
8314*7c356e86SAndroid Build Coastguard Worker	8 0
8315*7c356e86SAndroid Build Coastguard Worker	9 1
8316*7c356e86SAndroid Build Coastguard Worker	10 1
8317*7c356e86SAndroid Build Coastguard Worker	11 0
8318*7c356e86SAndroid Build Coastguard Worker	12 0
8319*7c356e86SAndroid Build Coastguard Worker---
8320*7c356e86SAndroid Build Coastguard Workername: test-stnze-2
8321*7c356e86SAndroid Build Coastguard Workerdescription:
8322*7c356e86SAndroid Build Coastguard Worker	Check that the short form [[ $x ]] works (ksh93 extension)
8323*7c356e86SAndroid Build Coastguard Workerstdin:
8324*7c356e86SAndroid Build Coastguard Worker	i=0
8325*7c356e86SAndroid Build Coastguard Worker	[[ -n $x ]]
8326*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8327*7c356e86SAndroid Build Coastguard Worker	[[ $x ]]
8328*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8329*7c356e86SAndroid Build Coastguard Worker	[[ -n "$x" ]]
8330*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8331*7c356e86SAndroid Build Coastguard Worker	[[ "$x" ]]
8332*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8333*7c356e86SAndroid Build Coastguard Worker	x=0
8334*7c356e86SAndroid Build Coastguard Worker	[[ -n $x ]]
8335*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8336*7c356e86SAndroid Build Coastguard Worker	[[ $x ]]
8337*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8338*7c356e86SAndroid Build Coastguard Worker	[[ -n "$x" ]]
8339*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8340*7c356e86SAndroid Build Coastguard Worker	[[ "$x" ]]
8341*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8342*7c356e86SAndroid Build Coastguard Worker	x='1 -a 1 = 2'
8343*7c356e86SAndroid Build Coastguard Worker	[[ -n $x ]]
8344*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8345*7c356e86SAndroid Build Coastguard Worker	[[ $x ]]
8346*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8347*7c356e86SAndroid Build Coastguard Worker	[[ -n "$x" ]]
8348*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8349*7c356e86SAndroid Build Coastguard Worker	[[ "$x" ]]
8350*7c356e86SAndroid Build Coastguard Worker	rv=$?; echo $((++i)) $rv
8351*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8352*7c356e86SAndroid Build Coastguard Worker	1 1
8353*7c356e86SAndroid Build Coastguard Worker	2 1
8354*7c356e86SAndroid Build Coastguard Worker	3 1
8355*7c356e86SAndroid Build Coastguard Worker	4 1
8356*7c356e86SAndroid Build Coastguard Worker	5 0
8357*7c356e86SAndroid Build Coastguard Worker	6 0
8358*7c356e86SAndroid Build Coastguard Worker	7 0
8359*7c356e86SAndroid Build Coastguard Worker	8 0
8360*7c356e86SAndroid Build Coastguard Worker	9 0
8361*7c356e86SAndroid Build Coastguard Worker	10 0
8362*7c356e86SAndroid Build Coastguard Worker	11 0
8363*7c356e86SAndroid Build Coastguard Worker	12 0
8364*7c356e86SAndroid Build Coastguard Worker---
8365*7c356e86SAndroid Build Coastguard Workername: test-numeq
8366*7c356e86SAndroid Build Coastguard Workerdescription:
8367*7c356e86SAndroid Build Coastguard Worker	Check numeric -eq works (R40d regression); spotted by Martijn Dekker
8368*7c356e86SAndroid Build Coastguard Workerstdin:
8369*7c356e86SAndroid Build Coastguard Worker	tst() {
8370*7c356e86SAndroid Build Coastguard Worker		eval "$2"
8371*7c356e86SAndroid Build Coastguard Worker		case $? in
8372*7c356e86SAndroid Build Coastguard Worker		(0) echo yepp 0 \#"$*" ;;
8373*7c356e86SAndroid Build Coastguard Worker		(1) echo nope 1 \#"$*" ;;
8374*7c356e86SAndroid Build Coastguard Worker		(2) echo terr 2 \#"$*" ;;
8375*7c356e86SAndroid Build Coastguard Worker		(*) echo wtf\? $? \#"$*" ;;
8376*7c356e86SAndroid Build Coastguard Worker		esac
8377*7c356e86SAndroid Build Coastguard Worker	}
8378*7c356e86SAndroid Build Coastguard Worker	tst 1 'test 2 -eq 2'
8379*7c356e86SAndroid Build Coastguard Worker	tst 2 'test 2 -eq 2a'
8380*7c356e86SAndroid Build Coastguard Worker	tst 3 'test 2 -eq 3'
8381*7c356e86SAndroid Build Coastguard Worker	tst 4 'test 2 -ne 2'
8382*7c356e86SAndroid Build Coastguard Worker	tst 5 'test 2 -ne 2a'
8383*7c356e86SAndroid Build Coastguard Worker	tst 6 'test 2 -ne 3'
8384*7c356e86SAndroid Build Coastguard Worker	tst 7 'test \! 2 -eq 2'
8385*7c356e86SAndroid Build Coastguard Worker	tst 8 'test \! 2 -eq 2a'
8386*7c356e86SAndroid Build Coastguard Worker	tst 9 'test \! 2 -eq 3'
8387*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8388*7c356e86SAndroid Build Coastguard Worker	yepp 0 #1 test 2 -eq 2
8389*7c356e86SAndroid Build Coastguard Worker	terr 2 #2 test 2 -eq 2a
8390*7c356e86SAndroid Build Coastguard Worker	nope 1 #3 test 2 -eq 3
8391*7c356e86SAndroid Build Coastguard Worker	nope 1 #4 test 2 -ne 2
8392*7c356e86SAndroid Build Coastguard Worker	terr 2 #5 test 2 -ne 2a
8393*7c356e86SAndroid Build Coastguard Worker	yepp 0 #6 test 2 -ne 3
8394*7c356e86SAndroid Build Coastguard Worker	nope 1 #7 test \! 2 -eq 2
8395*7c356e86SAndroid Build Coastguard Worker	terr 2 #8 test \! 2 -eq 2a
8396*7c356e86SAndroid Build Coastguard Worker	yepp 0 #9 test \! 2 -eq 3
8397*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8398*7c356e86SAndroid Build Coastguard Worker	/bad number/
8399*7c356e86SAndroid Build Coastguard Worker---
8400*7c356e86SAndroid Build Coastguard Workername: mkshrc-1
8401*7c356e86SAndroid Build Coastguard Workerdescription:
8402*7c356e86SAndroid Build Coastguard Worker	Check that ~/.mkshrc works correctly.
8403*7c356e86SAndroid Build Coastguard Worker	Part 1: verify user environment is not read (internal)
8404*7c356e86SAndroid Build Coastguard Workerstdin:
8405*7c356e86SAndroid Build Coastguard Worker	echo x $FNORD
8406*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8407*7c356e86SAndroid Build Coastguard Worker	x
8408*7c356e86SAndroid Build Coastguard Worker---
8409*7c356e86SAndroid Build Coastguard Workername: mkshrc-2a
8410*7c356e86SAndroid Build Coastguard Workerdescription:
8411*7c356e86SAndroid Build Coastguard Worker	Check that ~/.mkshrc works correctly.
8412*7c356e86SAndroid Build Coastguard Worker	Part 2: verify mkshrc is not read (non-interactive shells)
8413*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".mkshrc"
8414*7c356e86SAndroid Build Coastguard Worker	FNORD=42
8415*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=.!ENV=!
8416*7c356e86SAndroid Build Coastguard Workerstdin:
8417*7c356e86SAndroid Build Coastguard Worker	echo x $FNORD
8418*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8419*7c356e86SAndroid Build Coastguard Worker	x
8420*7c356e86SAndroid Build Coastguard Worker---
8421*7c356e86SAndroid Build Coastguard Workername: mkshrc-2b
8422*7c356e86SAndroid Build Coastguard Workerdescription:
8423*7c356e86SAndroid Build Coastguard Worker	Check that ~/.mkshrc works correctly.
8424*7c356e86SAndroid Build Coastguard Worker	Part 2: verify mkshrc can be read (interactive shells)
8425*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".mkshrc"
8426*7c356e86SAndroid Build Coastguard Worker	FNORD=42
8427*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
8428*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
8429*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=.!ENV=!PS1=!
8430*7c356e86SAndroid Build Coastguard Workerstdin:
8431*7c356e86SAndroid Build Coastguard Worker	echo x $FNORD
8432*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8433*7c356e86SAndroid Build Coastguard Worker	x 42
8434*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8435*7c356e86SAndroid Build Coastguard Worker	/(# )*/
8436*7c356e86SAndroid Build Coastguard Worker---
8437*7c356e86SAndroid Build Coastguard Workername: mkshrc-3
8438*7c356e86SAndroid Build Coastguard Workerdescription:
8439*7c356e86SAndroid Build Coastguard Worker	Check that ~/.mkshrc works correctly.
8440*7c356e86SAndroid Build Coastguard Worker	Part 3: verify mkshrc can be turned off
8441*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".mkshrc"
8442*7c356e86SAndroid Build Coastguard Worker	FNORD=42
8443*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=.!ENV=nonexistant!
8444*7c356e86SAndroid Build Coastguard Workerstdin:
8445*7c356e86SAndroid Build Coastguard Worker	echo x $FNORD
8446*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8447*7c356e86SAndroid Build Coastguard Worker	x
8448*7c356e86SAndroid Build Coastguard Worker---
8449*7c356e86SAndroid Build Coastguard Workername: sh-mode-1
8450*7c356e86SAndroid Build Coastguard Workerdescription:
8451*7c356e86SAndroid Build Coastguard Worker	Check that sh mode turns braceexpand off
8452*7c356e86SAndroid Build Coastguard Worker	and that that works correctly
8453*7c356e86SAndroid Build Coastguard Workerstdin:
8454*7c356e86SAndroid Build Coastguard Worker	set -o braceexpand
8455*7c356e86SAndroid Build Coastguard Worker	set +o sh
8456*7c356e86SAndroid Build Coastguard Worker	[[ -o sh ]] && echo sh
8457*7c356e86SAndroid Build Coastguard Worker	[[ -o !sh ]] && echo nosh
8458*7c356e86SAndroid Build Coastguard Worker	[[ -o braceexpand ]] && echo brex
8459*7c356e86SAndroid Build Coastguard Worker	[[ -o !braceexpand ]] && echo nobrex
8460*7c356e86SAndroid Build Coastguard Worker	echo {a,b,c}
8461*7c356e86SAndroid Build Coastguard Worker	set +o braceexpand
8462*7c356e86SAndroid Build Coastguard Worker	echo {a,b,c}
8463*7c356e86SAndroid Build Coastguard Worker	set -o braceexpand
8464*7c356e86SAndroid Build Coastguard Worker	echo {a,b,c}
8465*7c356e86SAndroid Build Coastguard Worker	set -o sh
8466*7c356e86SAndroid Build Coastguard Worker	echo {a,b,c}
8467*7c356e86SAndroid Build Coastguard Worker	[[ -o sh ]] && echo sh
8468*7c356e86SAndroid Build Coastguard Worker	[[ -o !sh ]] && echo nosh
8469*7c356e86SAndroid Build Coastguard Worker	[[ -o braceexpand ]] && echo brex
8470*7c356e86SAndroid Build Coastguard Worker	[[ -o !braceexpand ]] && echo nobrex
8471*7c356e86SAndroid Build Coastguard Worker	set -o braceexpand
8472*7c356e86SAndroid Build Coastguard Worker	echo {a,b,c}
8473*7c356e86SAndroid Build Coastguard Worker	[[ -o sh ]] && echo sh
8474*7c356e86SAndroid Build Coastguard Worker	[[ -o !sh ]] && echo nosh
8475*7c356e86SAndroid Build Coastguard Worker	[[ -o braceexpand ]] && echo brex
8476*7c356e86SAndroid Build Coastguard Worker	[[ -o !braceexpand ]] && echo nobrex
8477*7c356e86SAndroid Build Coastguard Worker	[[ $(exec -a -set "$__progname" -o) = *login+(' ')on* ]]; echo $?
8478*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8479*7c356e86SAndroid Build Coastguard Worker	nosh
8480*7c356e86SAndroid Build Coastguard Worker	brex
8481*7c356e86SAndroid Build Coastguard Worker	a b c
8482*7c356e86SAndroid Build Coastguard Worker	{a,b,c}
8483*7c356e86SAndroid Build Coastguard Worker	a b c
8484*7c356e86SAndroid Build Coastguard Worker	{a,b,c}
8485*7c356e86SAndroid Build Coastguard Worker	sh
8486*7c356e86SAndroid Build Coastguard Worker	nobrex
8487*7c356e86SAndroid Build Coastguard Worker	a b c
8488*7c356e86SAndroid Build Coastguard Worker	sh
8489*7c356e86SAndroid Build Coastguard Worker	brex
8490*7c356e86SAndroid Build Coastguard Worker	0
8491*7c356e86SAndroid Build Coastguard Worker---
8492*7c356e86SAndroid Build Coastguard Workername: sh-mode-2a
8493*7c356e86SAndroid Build Coastguard Workerdescription:
8494*7c356e86SAndroid Build Coastguard Worker	Check that posix or sh mode is *not* automatically turned on
8495*7c356e86SAndroid Build Coastguard Workercategory: !binsh
8496*7c356e86SAndroid Build Coastguard Workerstdin:
8497*7c356e86SAndroid Build Coastguard Worker	for shell in {,-}{,r}{,k,mk}sh {,-}{,R}{,K,MK}SH.EXE; do
8498*7c356e86SAndroid Build Coastguard Worker		ln -s "$__progname" ./$shell || cp "$__progname" ./$shell
8499*7c356e86SAndroid Build Coastguard Worker		print -- $shell $(./$shell +l -c '
8500*7c356e86SAndroid Build Coastguard Worker			[[ -o sh || -o posix ]] && echo sh
8501*7c356e86SAndroid Build Coastguard Worker			[[ -o !sh && -o !posix ]] && echo nosh
8502*7c356e86SAndroid Build Coastguard Worker			[[ -o restricted ]] && echo lim || echo ok
8503*7c356e86SAndroid Build Coastguard Worker		    ')
8504*7c356e86SAndroid Build Coastguard Worker	done
8505*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8506*7c356e86SAndroid Build Coastguard Worker	sh nosh ok
8507*7c356e86SAndroid Build Coastguard Worker	ksh nosh ok
8508*7c356e86SAndroid Build Coastguard Worker	mksh nosh ok
8509*7c356e86SAndroid Build Coastguard Worker	rsh nosh lim
8510*7c356e86SAndroid Build Coastguard Worker	rksh nosh lim
8511*7c356e86SAndroid Build Coastguard Worker	rmksh nosh lim
8512*7c356e86SAndroid Build Coastguard Worker	-sh nosh ok
8513*7c356e86SAndroid Build Coastguard Worker	-ksh nosh ok
8514*7c356e86SAndroid Build Coastguard Worker	-mksh nosh ok
8515*7c356e86SAndroid Build Coastguard Worker	-rsh nosh lim
8516*7c356e86SAndroid Build Coastguard Worker	-rksh nosh lim
8517*7c356e86SAndroid Build Coastguard Worker	-rmksh nosh lim
8518*7c356e86SAndroid Build Coastguard Worker	SH.EXE nosh ok
8519*7c356e86SAndroid Build Coastguard Worker	KSH.EXE nosh ok
8520*7c356e86SAndroid Build Coastguard Worker	MKSH.EXE nosh ok
8521*7c356e86SAndroid Build Coastguard Worker	RSH.EXE nosh lim
8522*7c356e86SAndroid Build Coastguard Worker	RKSH.EXE nosh lim
8523*7c356e86SAndroid Build Coastguard Worker	RMKSH.EXE nosh lim
8524*7c356e86SAndroid Build Coastguard Worker	-SH.EXE nosh ok
8525*7c356e86SAndroid Build Coastguard Worker	-KSH.EXE nosh ok
8526*7c356e86SAndroid Build Coastguard Worker	-MKSH.EXE nosh ok
8527*7c356e86SAndroid Build Coastguard Worker	-RSH.EXE nosh lim
8528*7c356e86SAndroid Build Coastguard Worker	-RKSH.EXE nosh lim
8529*7c356e86SAndroid Build Coastguard Worker	-RMKSH.EXE nosh lim
8530*7c356e86SAndroid Build Coastguard Worker---
8531*7c356e86SAndroid Build Coastguard Workername: sh-mode-2b
8532*7c356e86SAndroid Build Coastguard Workerdescription:
8533*7c356e86SAndroid Build Coastguard Worker	Check that posix or sh mode *is* automatically turned on
8534*7c356e86SAndroid Build Coastguard Workercategory: binsh
8535*7c356e86SAndroid Build Coastguard Workerstdin:
8536*7c356e86SAndroid Build Coastguard Worker	for shell in {,-}{,r}{,k,mk}sh {,-}{,R}{,K,MK}SH.EXE; do
8537*7c356e86SAndroid Build Coastguard Worker		ln -s "$__progname" ./$shell || cp "$__progname" ./$shell
8538*7c356e86SAndroid Build Coastguard Worker		print -- $shell $(./$shell +l -c '
8539*7c356e86SAndroid Build Coastguard Worker			[[ -o sh || -o posix ]] && echo sh
8540*7c356e86SAndroid Build Coastguard Worker			[[ -o !sh && -o !posix ]] && echo nosh
8541*7c356e86SAndroid Build Coastguard Worker			[[ -o restricted ]] && echo lim || echo ok
8542*7c356e86SAndroid Build Coastguard Worker		    ')
8543*7c356e86SAndroid Build Coastguard Worker	done
8544*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8545*7c356e86SAndroid Build Coastguard Worker	sh sh ok
8546*7c356e86SAndroid Build Coastguard Worker	ksh nosh ok
8547*7c356e86SAndroid Build Coastguard Worker	mksh nosh ok
8548*7c356e86SAndroid Build Coastguard Worker	rsh sh lim
8549*7c356e86SAndroid Build Coastguard Worker	rksh nosh lim
8550*7c356e86SAndroid Build Coastguard Worker	rmksh nosh lim
8551*7c356e86SAndroid Build Coastguard Worker	-sh sh ok
8552*7c356e86SAndroid Build Coastguard Worker	-ksh nosh ok
8553*7c356e86SAndroid Build Coastguard Worker	-mksh nosh ok
8554*7c356e86SAndroid Build Coastguard Worker	-rsh sh lim
8555*7c356e86SAndroid Build Coastguard Worker	-rksh nosh lim
8556*7c356e86SAndroid Build Coastguard Worker	-rmksh nosh lim
8557*7c356e86SAndroid Build Coastguard Worker	SH.EXE sh ok
8558*7c356e86SAndroid Build Coastguard Worker	KSH.EXE nosh ok
8559*7c356e86SAndroid Build Coastguard Worker	MKSH.EXE nosh ok
8560*7c356e86SAndroid Build Coastguard Worker	RSH.EXE sh lim
8561*7c356e86SAndroid Build Coastguard Worker	RKSH.EXE nosh lim
8562*7c356e86SAndroid Build Coastguard Worker	RMKSH.EXE nosh lim
8563*7c356e86SAndroid Build Coastguard Worker	-SH.EXE sh ok
8564*7c356e86SAndroid Build Coastguard Worker	-KSH.EXE nosh ok
8565*7c356e86SAndroid Build Coastguard Worker	-MKSH.EXE nosh ok
8566*7c356e86SAndroid Build Coastguard Worker	-RSH.EXE sh lim
8567*7c356e86SAndroid Build Coastguard Worker	-RKSH.EXE nosh lim
8568*7c356e86SAndroid Build Coastguard Worker	-RMKSH.EXE nosh lim
8569*7c356e86SAndroid Build Coastguard Worker---
8570*7c356e86SAndroid Build Coastguard Workername: sh-options
8571*7c356e86SAndroid Build Coastguard Workerdescription:
8572*7c356e86SAndroid Build Coastguard Worker	Check that "set +o" DTRT per POSIX
8573*7c356e86SAndroid Build Coastguard Workerstdin:
8574*7c356e86SAndroid Build Coastguard Worker	t() {
8575*7c356e86SAndroid Build Coastguard Worker		[[ -o vi ]]; a=$?
8576*7c356e86SAndroid Build Coastguard Worker		[[ -o pipefail ]]; b=$?
8577*7c356e86SAndroid Build Coastguard Worker		echo $((++i)) $a $b .
8578*7c356e86SAndroid Build Coastguard Worker	}
8579*7c356e86SAndroid Build Coastguard Worker	set -e
8580*7c356e86SAndroid Build Coastguard Worker	set -o vi
8581*7c356e86SAndroid Build Coastguard Worker	set +o pipefail
8582*7c356e86SAndroid Build Coastguard Worker	set +e
8583*7c356e86SAndroid Build Coastguard Worker	t
8584*7c356e86SAndroid Build Coastguard Worker	x=$(set +o)
8585*7c356e86SAndroid Build Coastguard Worker	set +o vi
8586*7c356e86SAndroid Build Coastguard Worker	set -o pipefail
8587*7c356e86SAndroid Build Coastguard Worker	t
8588*7c356e86SAndroid Build Coastguard Worker	eval "$x"
8589*7c356e86SAndroid Build Coastguard Worker	t
8590*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8591*7c356e86SAndroid Build Coastguard Worker	1 0 1 .
8592*7c356e86SAndroid Build Coastguard Worker	2 1 0 .
8593*7c356e86SAndroid Build Coastguard Worker	3 0 1 .
8594*7c356e86SAndroid Build Coastguard Worker---
8595*7c356e86SAndroid Build Coastguard Workername: pipeline-1
8596*7c356e86SAndroid Build Coastguard Workerdescription:
8597*7c356e86SAndroid Build Coastguard Worker	pdksh bug: last command of a pipeline is executed in a
8598*7c356e86SAndroid Build Coastguard Worker	subshell - make sure it still is, scripts depend on it
8599*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcx"
8600*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcy"
8601*7c356e86SAndroid Build Coastguard Workerstdin:
8602*7c356e86SAndroid Build Coastguard Worker	echo *
8603*7c356e86SAndroid Build Coastguard Worker	echo a | while read d; do
8604*7c356e86SAndroid Build Coastguard Worker		echo $d
8605*7c356e86SAndroid Build Coastguard Worker		echo $d*
8606*7c356e86SAndroid Build Coastguard Worker		echo *
8607*7c356e86SAndroid Build Coastguard Worker		set -o noglob
8608*7c356e86SAndroid Build Coastguard Worker		echo $d*
8609*7c356e86SAndroid Build Coastguard Worker		echo *
8610*7c356e86SAndroid Build Coastguard Worker	done
8611*7c356e86SAndroid Build Coastguard Worker	echo *
8612*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8613*7c356e86SAndroid Build Coastguard Worker	abcx abcy
8614*7c356e86SAndroid Build Coastguard Worker	a
8615*7c356e86SAndroid Build Coastguard Worker	abcx abcy
8616*7c356e86SAndroid Build Coastguard Worker	abcx abcy
8617*7c356e86SAndroid Build Coastguard Worker	a*
8618*7c356e86SAndroid Build Coastguard Worker	*
8619*7c356e86SAndroid Build Coastguard Worker	abcx abcy
8620*7c356e86SAndroid Build Coastguard Worker---
8621*7c356e86SAndroid Build Coastguard Workername: pipeline-2
8622*7c356e86SAndroid Build Coastguard Workerdescription:
8623*7c356e86SAndroid Build Coastguard Worker	check that co-processes work with TCOMs, TPIPEs and TPARENs
8624*7c356e86SAndroid Build Coastguard Workercategory: !nojsig
8625*7c356e86SAndroid Build Coastguard Workerstdin:
8626*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'i=100; echo hi |& while read -p line; do echo "$((i++)) $line"; done'
8627*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'i=200; echo hi | cat |& while read -p line; do echo "$((i++)) $line"; done'
8628*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'i=300; (echo hi | cat) |& while read -p line; do echo "$((i++)) $line"; done'
8629*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8630*7c356e86SAndroid Build Coastguard Worker	100 hi
8631*7c356e86SAndroid Build Coastguard Worker	200 hi
8632*7c356e86SAndroid Build Coastguard Worker	300 hi
8633*7c356e86SAndroid Build Coastguard Worker---
8634*7c356e86SAndroid Build Coastguard Workername: pipeline-3
8635*7c356e86SAndroid Build Coastguard Workerdescription:
8636*7c356e86SAndroid Build Coastguard Worker	Check that PIPESTATUS does what it's supposed to
8637*7c356e86SAndroid Build Coastguard Workerstdin:
8638*7c356e86SAndroid Build Coastguard Worker	echo 1 $PIPESTATUS .
8639*7c356e86SAndroid Build Coastguard Worker	echo 2 ${PIPESTATUS[0]} .
8640*7c356e86SAndroid Build Coastguard Worker	echo 3 ${PIPESTATUS[1]} .
8641*7c356e86SAndroid Build Coastguard Worker	(echo x; exit 12) | (cat; exit 23) | (cat; exit 42)
8642*7c356e86SAndroid Build Coastguard Worker	echo 5 $? , $PIPESTATUS , ${PIPESTATUS[0]} , ${PIPESTATUS[1]} , ${PIPESTATUS[2]} , ${PIPESTATUS[3]} .
8643*7c356e86SAndroid Build Coastguard Worker	echo 6 ${PIPESTATUS[0]} .
8644*7c356e86SAndroid Build Coastguard Worker	set | fgrep PIPESTATUS
8645*7c356e86SAndroid Build Coastguard Worker	echo 8 $(set | fgrep PIPESTATUS) .
8646*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8647*7c356e86SAndroid Build Coastguard Worker	1 0 .
8648*7c356e86SAndroid Build Coastguard Worker	2 0 .
8649*7c356e86SAndroid Build Coastguard Worker	3 .
8650*7c356e86SAndroid Build Coastguard Worker	x
8651*7c356e86SAndroid Build Coastguard Worker	5 42 , 12 , 12 , 23 , 42 , .
8652*7c356e86SAndroid Build Coastguard Worker	6 0 .
8653*7c356e86SAndroid Build Coastguard Worker	PIPESTATUS[0]=0
8654*7c356e86SAndroid Build Coastguard Worker	8 PIPESTATUS[0]=0 PIPESTATUS[1]=0 .
8655*7c356e86SAndroid Build Coastguard Worker---
8656*7c356e86SAndroid Build Coastguard Workername: pipeline-4
8657*7c356e86SAndroid Build Coastguard Workerdescription:
8658*7c356e86SAndroid Build Coastguard Worker	Check that "set -o pipefail" does what it's supposed to
8659*7c356e86SAndroid Build Coastguard Workerstdin:
8660*7c356e86SAndroid Build Coastguard Worker	echo 1 "$("$__progname" -c '(exit 12) | (exit 23) | (exit 42); echo $?')" .
8661*7c356e86SAndroid Build Coastguard Worker	echo 2 "$("$__progname" -c '! (exit 12) | (exit 23) | (exit 42); echo $?')" .
8662*7c356e86SAndroid Build Coastguard Worker	echo 3 "$("$__progname" -o pipefail -c '(exit 12) | (exit 23) | (exit 42); echo $?')" .
8663*7c356e86SAndroid Build Coastguard Worker	echo 4 "$("$__progname" -o pipefail -c '! (exit 12) | (exit 23) | (exit 42); echo $?')" .
8664*7c356e86SAndroid Build Coastguard Worker	echo 5 "$("$__progname" -c '(exit 23) | (exit 42) | :; echo $?')" .
8665*7c356e86SAndroid Build Coastguard Worker	echo 6 "$("$__progname" -c '! (exit 23) | (exit 42) | :; echo $?')" .
8666*7c356e86SAndroid Build Coastguard Worker	echo 7 "$("$__progname" -o pipefail -c '(exit 23) | (exit 42) | :; echo $?')" .
8667*7c356e86SAndroid Build Coastguard Worker	echo 8 "$("$__progname" -o pipefail -c '! (exit 23) | (exit 42) | :; echo $?')" .
8668*7c356e86SAndroid Build Coastguard Worker	echo 9 "$("$__progname" -o pipefail -c 'x=$( (exit 23) | (exit 42) | :); echo $?')" .
8669*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8670*7c356e86SAndroid Build Coastguard Worker	1 42 .
8671*7c356e86SAndroid Build Coastguard Worker	2 0 .
8672*7c356e86SAndroid Build Coastguard Worker	3 42 .
8673*7c356e86SAndroid Build Coastguard Worker	4 0 .
8674*7c356e86SAndroid Build Coastguard Worker	5 0 .
8675*7c356e86SAndroid Build Coastguard Worker	6 1 .
8676*7c356e86SAndroid Build Coastguard Worker	7 42 .
8677*7c356e86SAndroid Build Coastguard Worker	8 0 .
8678*7c356e86SAndroid Build Coastguard Worker	9 42 .
8679*7c356e86SAndroid Build Coastguard Worker---
8680*7c356e86SAndroid Build Coastguard Workername: persist-history-1
8681*7c356e86SAndroid Build Coastguard Workerdescription:
8682*7c356e86SAndroid Build Coastguard Worker	Check if persistent history saving works
8683*7c356e86SAndroid Build Coastguard Workercategory: !no-histfile
8684*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
8685*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
8686*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!
8687*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env"
8688*7c356e86SAndroid Build Coastguard Worker	PS1=X
8689*7c356e86SAndroid Build Coastguard Workerstdin:
8690*7c356e86SAndroid Build Coastguard Worker	cat hist.file
8691*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern:
8692*7c356e86SAndroid Build Coastguard Worker	/cat hist.file/
8693*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8694*7c356e86SAndroid Build Coastguard Worker	/^X*$/
8695*7c356e86SAndroid Build Coastguard Worker---
8696*7c356e86SAndroid Build Coastguard Workername: typeset-1
8697*7c356e86SAndroid Build Coastguard Workerdescription:
8698*7c356e86SAndroid Build Coastguard Worker	Check that typeset -g works correctly
8699*7c356e86SAndroid Build Coastguard Workerstdin:
8700*7c356e86SAndroid Build Coastguard Worker	set -A arrfoo 65
8701*7c356e86SAndroid Build Coastguard Worker	foo() {
8702*7c356e86SAndroid Build Coastguard Worker		typeset -g -Uui16 arrfoo[*]
8703*7c356e86SAndroid Build Coastguard Worker	}
8704*7c356e86SAndroid Build Coastguard Worker	echo before ${arrfoo[0]} .
8705*7c356e86SAndroid Build Coastguard Worker	foo
8706*7c356e86SAndroid Build Coastguard Worker	echo after ${arrfoo[0]} .
8707*7c356e86SAndroid Build Coastguard Worker	set -A arrbar 65
8708*7c356e86SAndroid Build Coastguard Worker	bar() {
8709*7c356e86SAndroid Build Coastguard Worker		echo inside before ${arrbar[0]} .
8710*7c356e86SAndroid Build Coastguard Worker		arrbar[0]=97
8711*7c356e86SAndroid Build Coastguard Worker		echo inside changed ${arrbar[0]} .
8712*7c356e86SAndroid Build Coastguard Worker		typeset -g -Uui16 arrbar[*]
8713*7c356e86SAndroid Build Coastguard Worker		echo inside typeset ${arrbar[0]} .
8714*7c356e86SAndroid Build Coastguard Worker		arrbar[0]=48
8715*7c356e86SAndroid Build Coastguard Worker		echo inside changed ${arrbar[0]} .
8716*7c356e86SAndroid Build Coastguard Worker	}
8717*7c356e86SAndroid Build Coastguard Worker	echo before ${arrbar[0]} .
8718*7c356e86SAndroid Build Coastguard Worker	bar
8719*7c356e86SAndroid Build Coastguard Worker	echo after ${arrbar[0]} .
8720*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8721*7c356e86SAndroid Build Coastguard Worker	before 65 .
8722*7c356e86SAndroid Build Coastguard Worker	after 16#41 .
8723*7c356e86SAndroid Build Coastguard Worker	before 65 .
8724*7c356e86SAndroid Build Coastguard Worker	inside before 65 .
8725*7c356e86SAndroid Build Coastguard Worker	inside changed 97 .
8726*7c356e86SAndroid Build Coastguard Worker	inside typeset 16#61 .
8727*7c356e86SAndroid Build Coastguard Worker	inside changed 16#30 .
8728*7c356e86SAndroid Build Coastguard Worker	after 16#30 .
8729*7c356e86SAndroid Build Coastguard Worker---
8730*7c356e86SAndroid Build Coastguard Workername: typeset-2
8731*7c356e86SAndroid Build Coastguard Workerdescription:
8732*7c356e86SAndroid Build Coastguard Worker	Check that typeset -p on arrays works correctly
8733*7c356e86SAndroid Build Coastguard Workerstdin:
8734*7c356e86SAndroid Build Coastguard Worker	set -A x -- a b c
8735*7c356e86SAndroid Build Coastguard Worker	echo =
8736*7c356e86SAndroid Build Coastguard Worker	typeset -p x
8737*7c356e86SAndroid Build Coastguard Worker	echo =
8738*7c356e86SAndroid Build Coastguard Worker	typeset -p x[1]
8739*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8740*7c356e86SAndroid Build Coastguard Worker	=
8741*7c356e86SAndroid Build Coastguard Worker	set -A x
8742*7c356e86SAndroid Build Coastguard Worker	typeset x[0]=a
8743*7c356e86SAndroid Build Coastguard Worker	typeset x[1]=b
8744*7c356e86SAndroid Build Coastguard Worker	typeset x[2]=c
8745*7c356e86SAndroid Build Coastguard Worker	=
8746*7c356e86SAndroid Build Coastguard Worker	typeset x[1]=b
8747*7c356e86SAndroid Build Coastguard Worker---
8748*7c356e86SAndroid Build Coastguard Workername: typeset-padding-1
8749*7c356e86SAndroid Build Coastguard Workerdescription:
8750*7c356e86SAndroid Build Coastguard Worker	Check if left/right justification works as per TFM
8751*7c356e86SAndroid Build Coastguard Workerstdin:
8752*7c356e86SAndroid Build Coastguard Worker	typeset -L10 ln=0hall0
8753*7c356e86SAndroid Build Coastguard Worker	typeset -R10 rn=0hall0
8754*7c356e86SAndroid Build Coastguard Worker	typeset -ZL10 lz=0hall0
8755*7c356e86SAndroid Build Coastguard Worker	typeset -ZR10 rz=0hall0
8756*7c356e86SAndroid Build Coastguard Worker	typeset -Z10 rx=" hallo "
8757*7c356e86SAndroid Build Coastguard Worker	echo "<$ln> <$rn> <$lz> <$rz> <$rx>"
8758*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8759*7c356e86SAndroid Build Coastguard Worker	<0hall0    > <    0hall0> <hall0     > <00000hall0> <0000 hallo>
8760*7c356e86SAndroid Build Coastguard Worker---
8761*7c356e86SAndroid Build Coastguard Workername: typeset-padding-2
8762*7c356e86SAndroid Build Coastguard Workerdescription:
8763*7c356e86SAndroid Build Coastguard Worker	Check if base-!10 integers are padded right
8764*7c356e86SAndroid Build Coastguard Workerstdin:
8765*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 -L9 ln=16#1
8766*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 -R9 rn=16#1
8767*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 -Z9 zn=16#1
8768*7c356e86SAndroid Build Coastguard Worker	typeset -L9 ls=16#1
8769*7c356e86SAndroid Build Coastguard Worker	typeset -R9 rs=16#1
8770*7c356e86SAndroid Build Coastguard Worker	typeset -Z9 zs=16#1
8771*7c356e86SAndroid Build Coastguard Worker	echo "<$ln> <$rn> <$zn> <$ls> <$rs> <$zs>"
8772*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8773*7c356e86SAndroid Build Coastguard Worker	<16#1     > <     16#1> <16#000001> <16#1     > <     16#1> <0000016#1>
8774*7c356e86SAndroid Build Coastguard Worker---
8775*7c356e86SAndroid Build Coastguard Workername: typeset-padding-3
8776*7c356e86SAndroid Build Coastguard Workerdescription:
8777*7c356e86SAndroid Build Coastguard Worker	Check for a regression in which UTF-8 wasn’t left-padded right
8778*7c356e86SAndroid Build Coastguard Workerstdin:
8779*7c356e86SAndroid Build Coastguard Worker	set -U
8780*7c356e86SAndroid Build Coastguard Worker	nl=$'\n'
8781*7c356e86SAndroid Build Coastguard Worker	typeset -L20 x='.  ak'
8782*7c356e86SAndroid Build Coastguard Worker	typeset -R20 y='.  ak'
8783*7c356e86SAndroid Build Coastguard Worker	print -r -- "<$x> (1$nl<12345678910 345678920$nl<$y> 1)"
8784*7c356e86SAndroid Build Coastguard Worker	typeset -L20 x='.  aẞ'
8785*7c356e86SAndroid Build Coastguard Worker	typeset -R20 y='.  aẞ'
8786*7c356e86SAndroid Build Coastguard Worker	print -r -- "<$x> (2$nl<12345678910 345678920$nl<$y> 2)"
8787*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8788*7c356e86SAndroid Build Coastguard Worker	<.  ak               > (1
8789*7c356e86SAndroid Build Coastguard Worker	<12345678910 345678920
8790*7c356e86SAndroid Build Coastguard Worker	<               .  ak> 1)
8791*7c356e86SAndroid Build Coastguard Worker	<.  aẞ               > (2
8792*7c356e86SAndroid Build Coastguard Worker	<12345678910 345678920
8793*7c356e86SAndroid Build Coastguard Worker	<               .  aẞ> 2)
8794*7c356e86SAndroid Build Coastguard Worker---
8795*7c356e86SAndroid Build Coastguard Workername: utf8bom-1
8796*7c356e86SAndroid Build Coastguard Workerdescription:
8797*7c356e86SAndroid Build Coastguard Worker	Check that the UTF-8 Byte Order Mark is ignored as the first
8798*7c356e86SAndroid Build Coastguard Worker	multibyte character of the shell input (with -c, from standard
8799*7c356e86SAndroid Build Coastguard Worker	input, as file, or as eval argument), but nowhere else
8800*7c356e86SAndroid Build Coastguard Worker# breaks on Mac OSX (HFS+ non-standard UTF-8 canonical decomposition)
8801*7c356e86SAndroid Build Coastguard Workercategory: !os:darwin,!shell:ebcdic-yes
8802*7c356e86SAndroid Build Coastguard Workerstdin:
8803*7c356e86SAndroid Build Coastguard Worker	mkdir foo
8804*7c356e86SAndroid Build Coastguard Worker	print '#!/bin/sh\necho ohne' >foo/fnord
8805*7c356e86SAndroid Build Coastguard Worker	print '#!/bin/sh\necho mit' >foo/fnord
8806*7c356e86SAndroid Build Coastguard Worker	print 'fnord\nfnord\nfnord\nfnord' >foo/bar
8807*7c356e86SAndroid Build Coastguard Worker	print eval \''fnord\nfnord\nfnord\nfnord'\' >foo/zoo
8808*7c356e86SAndroid Build Coastguard Worker	set -A anzahl -- foo/*
8809*7c356e86SAndroid Build Coastguard Worker	echo got ${#anzahl[*]} files
8810*7c356e86SAndroid Build Coastguard Worker	chmod +x foo/*
8811*7c356e86SAndroid Build Coastguard Worker	export PATH=$(pwd)/foo$PATHSEP$PATH
8812*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'fnord'
8813*7c356e86SAndroid Build Coastguard Worker	echo =
8814*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'fnord; fnord; fnord; fnord'
8815*7c356e86SAndroid Build Coastguard Worker	echo =
8816*7c356e86SAndroid Build Coastguard Worker	"$__progname" foo/bar
8817*7c356e86SAndroid Build Coastguard Worker	echo =
8818*7c356e86SAndroid Build Coastguard Worker	"$__progname" <foo/bar
8819*7c356e86SAndroid Build Coastguard Worker	echo =
8820*7c356e86SAndroid Build Coastguard Worker	"$__progname" foo/zoo
8821*7c356e86SAndroid Build Coastguard Worker	echo =
8822*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo : $(fnord)'
8823*7c356e86SAndroid Build Coastguard Worker	rm -rf foo
8824*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8825*7c356e86SAndroid Build Coastguard Worker	got 4 files
8826*7c356e86SAndroid Build Coastguard Worker	ohne
8827*7c356e86SAndroid Build Coastguard Worker	=
8828*7c356e86SAndroid Build Coastguard Worker	ohne
8829*7c356e86SAndroid Build Coastguard Worker	ohne
8830*7c356e86SAndroid Build Coastguard Worker	mit
8831*7c356e86SAndroid Build Coastguard Worker	ohne
8832*7c356e86SAndroid Build Coastguard Worker	=
8833*7c356e86SAndroid Build Coastguard Worker	ohne
8834*7c356e86SAndroid Build Coastguard Worker	ohne
8835*7c356e86SAndroid Build Coastguard Worker	mit
8836*7c356e86SAndroid Build Coastguard Worker	ohne
8837*7c356e86SAndroid Build Coastguard Worker	=
8838*7c356e86SAndroid Build Coastguard Worker	ohne
8839*7c356e86SAndroid Build Coastguard Worker	ohne
8840*7c356e86SAndroid Build Coastguard Worker	mit
8841*7c356e86SAndroid Build Coastguard Worker	ohne
8842*7c356e86SAndroid Build Coastguard Worker	=
8843*7c356e86SAndroid Build Coastguard Worker	ohne
8844*7c356e86SAndroid Build Coastguard Worker	ohne
8845*7c356e86SAndroid Build Coastguard Worker	mit
8846*7c356e86SAndroid Build Coastguard Worker	ohne
8847*7c356e86SAndroid Build Coastguard Worker	=
8848*7c356e86SAndroid Build Coastguard Worker	: ohne
8849*7c356e86SAndroid Build Coastguard Worker---
8850*7c356e86SAndroid Build Coastguard Workername: utf8bom-2
8851*7c356e86SAndroid Build Coastguard Workerdescription:
8852*7c356e86SAndroid Build Coastguard Worker	Check that we can execute BOM-shebangs (failures not fatal)
8853*7c356e86SAndroid Build Coastguard Worker	XXX if the OS can already execute them, we lose
8854*7c356e86SAndroid Build Coastguard Worker	note: cygwin execve(2) doesn't return to us with ENOEXEC, we lose
8855*7c356e86SAndroid Build Coastguard Worker	note: Ultrix perl5 t4 returns 65280 (exit-code 255) and no text
8856*7c356e86SAndroid Build Coastguard Worker	note: A/UX perl5 returns 6400 (exit-code 25), passes #1-3
8857*7c356e86SAndroid Build Coastguard Worker	XXX fails when LD_PRELOAD is set with -e and Perl chokes it (ASan)
8858*7c356e86SAndroid Build Coastguard Workerneed-pass: no
8859*7c356e86SAndroid Build Coastguard Workercategory: !os:aux,!os:cygwin,!os:midipix,!os:msys,!os:ultrix,!os:uwin-nt,!smksh
8860*7c356e86SAndroid Build Coastguard Workerenv-setup: !FOO=BAR!
8861*7c356e86SAndroid Build Coastguard Workerstdin:
8862*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nprint "1 a=$ENV{FOO}";' >t1
8863*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nprint "2 a=$ENV{FOO}";' >t2
8864*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__perlname"'\nprint "3 a=$ENV{FOO}\n";' >t3
8865*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__perlname"'\nprint "4 a=$ENV{FOO}\n";' >t4
8866*7c356e86SAndroid Build Coastguard Worker	chmod +x t?
8867*7c356e86SAndroid Build Coastguard Worker	./t1
8868*7c356e86SAndroid Build Coastguard Worker	./t2
8869*7c356e86SAndroid Build Coastguard Worker	./t3
8870*7c356e86SAndroid Build Coastguard Worker	./t4
8871*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8872*7c356e86SAndroid Build Coastguard Worker	1 a=/nonexistant{FOO}
8873*7c356e86SAndroid Build Coastguard Worker	2 a=/nonexistant{FOO}
8874*7c356e86SAndroid Build Coastguard Worker	3 a=BAR
8875*7c356e86SAndroid Build Coastguard Worker	4 a=BAR
8876*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8877*7c356e86SAndroid Build Coastguard Worker	/(Unrecognized character .... ignored at \..t4 line 1)*/
8878*7c356e86SAndroid Build Coastguard Worker---
8879*7c356e86SAndroid Build Coastguard Workername: utf8opt-1
8880*7c356e86SAndroid Build Coastguard Workerdescription:
8881*7c356e86SAndroid Build Coastguard Worker	Check that the utf8-mode flag is not set at non-interactive startup
8882*7c356e86SAndroid Build Coastguard Workerenv-setup: !PS1=!PS2=!LC_CTYPE=@utflocale@!
8883*7c356e86SAndroid Build Coastguard Workerstdin:
8884*7c356e86SAndroid Build Coastguard Worker	if [[ $- = *U* ]]; then
8885*7c356e86SAndroid Build Coastguard Worker		echo is set
8886*7c356e86SAndroid Build Coastguard Worker	else
8887*7c356e86SAndroid Build Coastguard Worker		echo is not set
8888*7c356e86SAndroid Build Coastguard Worker	fi
8889*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8890*7c356e86SAndroid Build Coastguard Worker	is not set
8891*7c356e86SAndroid Build Coastguard Worker---
8892*7c356e86SAndroid Build Coastguard Workername: utf8opt-2
8893*7c356e86SAndroid Build Coastguard Workerdescription:
8894*7c356e86SAndroid Build Coastguard Worker	Check that the utf8-mode flag is set at interactive startup.
8895*7c356e86SAndroid Build Coastguard Worker	If your OS is old, try passing HAVE_SETLOCALE_CTYPE=0 to Build.sh
8896*7c356e86SAndroid Build Coastguard Workerneed-pass: no
8897*7c356e86SAndroid Build Coastguard Workercategory: !noutf8
8898*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
8899*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
8900*7c356e86SAndroid Build Coastguard Workerenv-setup: !PS1=!PS2=!LC_CTYPE=@utflocale@!
8901*7c356e86SAndroid Build Coastguard Workerstdin:
8902*7c356e86SAndroid Build Coastguard Worker	if [[ $- = *U* ]]; then
8903*7c356e86SAndroid Build Coastguard Worker		echo is set
8904*7c356e86SAndroid Build Coastguard Worker	else
8905*7c356e86SAndroid Build Coastguard Worker		echo is not set
8906*7c356e86SAndroid Build Coastguard Worker	fi
8907*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8908*7c356e86SAndroid Build Coastguard Worker	is set
8909*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
8910*7c356e86SAndroid Build Coastguard Worker	/(# )*/
8911*7c356e86SAndroid Build Coastguard Worker---
8912*7c356e86SAndroid Build Coastguard Workername: utf8opt-3a
8913*7c356e86SAndroid Build Coastguard Workerdescription:
8914*7c356e86SAndroid Build Coastguard Worker	Ensure ±U on the command line is honoured
8915*7c356e86SAndroid Build Coastguard Worker	(these two tests may pass falsely depending on CPPFLAGS)
8916*7c356e86SAndroid Build Coastguard Workerstdin:
8917*7c356e86SAndroid Build Coastguard Worker	export i=0
8918*7c356e86SAndroid Build Coastguard Worker	code='if [[ $- = *U* ]]; then echo $i on; else echo $i off; fi'
8919*7c356e86SAndroid Build Coastguard Worker	let i++; "$__progname" -U -c "$code"
8920*7c356e86SAndroid Build Coastguard Worker	let i++; "$__progname" +U -c "$code"
8921*7c356e86SAndroid Build Coastguard Worker	echo $((++i)) done
8922*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8923*7c356e86SAndroid Build Coastguard Worker	1 on
8924*7c356e86SAndroid Build Coastguard Worker	2 off
8925*7c356e86SAndroid Build Coastguard Worker	3 done
8926*7c356e86SAndroid Build Coastguard Worker---
8927*7c356e86SAndroid Build Coastguard Workername: utf8opt-3b
8928*7c356e86SAndroid Build Coastguard Workerdescription:
8929*7c356e86SAndroid Build Coastguard Worker	Ensure ±U on the command line is honoured, interactive shells
8930*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
8931*7c356e86SAndroid Build Coastguard Workerstdin:
8932*7c356e86SAndroid Build Coastguard Worker	export i=0
8933*7c356e86SAndroid Build Coastguard Worker	code='if [[ $- = *U* ]]; then echo $i on; else echo $i off; fi'
8934*7c356e86SAndroid Build Coastguard Worker	let i++; "$__progname" -U -ic "$code"
8935*7c356e86SAndroid Build Coastguard Worker	let i++; "$__progname" +U -ic "$code"
8936*7c356e86SAndroid Build Coastguard Worker	echo $((++i)) done
8937*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8938*7c356e86SAndroid Build Coastguard Worker	1 on
8939*7c356e86SAndroid Build Coastguard Worker	2 off
8940*7c356e86SAndroid Build Coastguard Worker	3 done
8941*7c356e86SAndroid Build Coastguard Worker---
8942*7c356e86SAndroid Build Coastguard Workername: utf8bug-1
8943*7c356e86SAndroid Build Coastguard Workerdescription:
8944*7c356e86SAndroid Build Coastguard Worker	Ensure trailing combining characters are not lost
8945*7c356e86SAndroid Build Coastguard Workerstdin:
8946*7c356e86SAndroid Build Coastguard Worker	set -U
8947*7c356e86SAndroid Build Coastguard Worker	a=a
8948*7c356e86SAndroid Build Coastguard Worker	b=$'\u0301'
8949*7c356e86SAndroid Build Coastguard Worker	x=$a$b
8950*7c356e86SAndroid Build Coastguard Worker	print -r -- "<e$x>"
8951*7c356e86SAndroid Build Coastguard Worker	x=$a
8952*7c356e86SAndroid Build Coastguard Worker	x+=$b
8953*7c356e86SAndroid Build Coastguard Worker	print -r -- "<e$x>"
8954*7c356e86SAndroid Build Coastguard Worker	b=$'\u0301'b
8955*7c356e86SAndroid Build Coastguard Worker	x=$a
8956*7c356e86SAndroid Build Coastguard Worker	x+=$b
8957*7c356e86SAndroid Build Coastguard Worker	print -r -- "<e$x>"
8958*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8959*7c356e86SAndroid Build Coastguard Worker	<eá>
8960*7c356e86SAndroid Build Coastguard Worker	<eá>
8961*7c356e86SAndroid Build Coastguard Worker	<eáb>
8962*7c356e86SAndroid Build Coastguard Worker---
8963*7c356e86SAndroid Build Coastguard Workername: aliases-1
8964*7c356e86SAndroid Build Coastguard Workerdescription:
8965*7c356e86SAndroid Build Coastguard Worker	Check if built-in shell aliases are okay
8966*7c356e86SAndroid Build Coastguard Workerstdin:
8967*7c356e86SAndroid Build Coastguard Worker	alias
8968*7c356e86SAndroid Build Coastguard Worker	typeset -f
8969*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8970*7c356e86SAndroid Build Coastguard Worker	autoload='\\builtin typeset -fu'
8971*7c356e86SAndroid Build Coastguard Worker	functions='\\builtin typeset -f'
8972*7c356e86SAndroid Build Coastguard Worker	hash='\\builtin alias -t'
8973*7c356e86SAndroid Build Coastguard Worker	history='\\builtin fc -l'
8974*7c356e86SAndroid Build Coastguard Worker	integer='\\builtin typeset -i'
8975*7c356e86SAndroid Build Coastguard Worker	local='\\builtin typeset'
8976*7c356e86SAndroid Build Coastguard Worker	login='\\builtin exec login'
8977*7c356e86SAndroid Build Coastguard Worker	nameref='\\builtin typeset -n'
8978*7c356e86SAndroid Build Coastguard Worker	nohup='nohup '
8979*7c356e86SAndroid Build Coastguard Worker	r='\\builtin fc -e -'
8980*7c356e86SAndroid Build Coastguard Worker	type='\\builtin whence -v'
8981*7c356e86SAndroid Build Coastguard Worker---
8982*7c356e86SAndroid Build Coastguard Workername: aliases-2b
8983*7c356e86SAndroid Build Coastguard Workerdescription:
8984*7c356e86SAndroid Build Coastguard Worker	Check if “set -o sh” does not influence built-in aliases
8985*7c356e86SAndroid Build Coastguard Workerarguments: !-o!sh!
8986*7c356e86SAndroid Build Coastguard Workerstdin:
8987*7c356e86SAndroid Build Coastguard Worker	alias
8988*7c356e86SAndroid Build Coastguard Worker	typeset -f
8989*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
8990*7c356e86SAndroid Build Coastguard Worker	autoload='\\builtin typeset -fu'
8991*7c356e86SAndroid Build Coastguard Worker	functions='\\builtin typeset -f'
8992*7c356e86SAndroid Build Coastguard Worker	hash='\\builtin alias -t'
8993*7c356e86SAndroid Build Coastguard Worker	history='\\builtin fc -l'
8994*7c356e86SAndroid Build Coastguard Worker	integer='\\builtin typeset -i'
8995*7c356e86SAndroid Build Coastguard Worker	local='\\builtin typeset'
8996*7c356e86SAndroid Build Coastguard Worker	login='\\builtin exec login'
8997*7c356e86SAndroid Build Coastguard Worker	nameref='\\builtin typeset -n'
8998*7c356e86SAndroid Build Coastguard Worker	nohup='nohup '
8999*7c356e86SAndroid Build Coastguard Worker	r='\\builtin fc -e -'
9000*7c356e86SAndroid Build Coastguard Worker	type='\\builtin whence -v'
9001*7c356e86SAndroid Build Coastguard Worker---
9002*7c356e86SAndroid Build Coastguard Workername: aliases-3b
9003*7c356e86SAndroid Build Coastguard Workerdescription:
9004*7c356e86SAndroid Build Coastguard Worker	Check if running as sh does not influence built-in aliases
9005*7c356e86SAndroid Build Coastguard Workerstdin:
9006*7c356e86SAndroid Build Coastguard Worker	cp "$__progname" sh
9007*7c356e86SAndroid Build Coastguard Worker	./sh -c 'alias; typeset -f'
9008*7c356e86SAndroid Build Coastguard Worker	rm -f sh
9009*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9010*7c356e86SAndroid Build Coastguard Worker	autoload='\\builtin typeset -fu'
9011*7c356e86SAndroid Build Coastguard Worker	functions='\\builtin typeset -f'
9012*7c356e86SAndroid Build Coastguard Worker	hash='\\builtin alias -t'
9013*7c356e86SAndroid Build Coastguard Worker	history='\\builtin fc -l'
9014*7c356e86SAndroid Build Coastguard Worker	integer='\\builtin typeset -i'
9015*7c356e86SAndroid Build Coastguard Worker	local='\\builtin typeset'
9016*7c356e86SAndroid Build Coastguard Worker	login='\\builtin exec login'
9017*7c356e86SAndroid Build Coastguard Worker	nameref='\\builtin typeset -n'
9018*7c356e86SAndroid Build Coastguard Worker	nohup='nohup '
9019*7c356e86SAndroid Build Coastguard Worker	r='\\builtin fc -e -'
9020*7c356e86SAndroid Build Coastguard Worker	type='\\builtin whence -v'
9021*7c356e86SAndroid Build Coastguard Worker---
9022*7c356e86SAndroid Build Coastguard Workername: aliases-cmdline
9023*7c356e86SAndroid Build Coastguard Workerdescription:
9024*7c356e86SAndroid Build Coastguard Worker	Check that aliases work from the command line (Debian #517009)
9025*7c356e86SAndroid Build Coastguard Worker	Note that due to the nature of the lexing process, defining
9026*7c356e86SAndroid Build Coastguard Worker	aliases in COMSUBs then immediately using them, and things
9027*7c356e86SAndroid Build Coastguard Worker	like 'alias foo=bar && foo', still fail.
9028*7c356e86SAndroid Build Coastguard Workerstdin:
9029*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c $'alias a="echo OK"\na'
9030*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9031*7c356e86SAndroid Build Coastguard Worker	OK
9032*7c356e86SAndroid Build Coastguard Worker---
9033*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-1
9034*7c356e86SAndroid Build Coastguard Workerdescription:
9035*7c356e86SAndroid Build Coastguard Worker	Check if POSIX functions take precedences over aliases
9036*7c356e86SAndroid Build Coastguard Workerstdin:
9037*7c356e86SAndroid Build Coastguard Worker	alias foo='echo makro'
9038*7c356e86SAndroid Build Coastguard Worker	foo() {
9039*7c356e86SAndroid Build Coastguard Worker		echo funktion
9040*7c356e86SAndroid Build Coastguard Worker	}
9041*7c356e86SAndroid Build Coastguard Worker	foo
9042*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9043*7c356e86SAndroid Build Coastguard Worker	makro
9044*7c356e86SAndroid Build Coastguard Worker---
9045*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-2
9046*7c356e86SAndroid Build Coastguard Workerdescription:
9047*7c356e86SAndroid Build Coastguard Worker	Check if POSIX functions take precedences over aliases
9048*7c356e86SAndroid Build Coastguard Workerstdin:
9049*7c356e86SAndroid Build Coastguard Worker	alias foo='echo makro'
9050*7c356e86SAndroid Build Coastguard Worker	foo () {
9051*7c356e86SAndroid Build Coastguard Worker		echo funktion
9052*7c356e86SAndroid Build Coastguard Worker	}
9053*7c356e86SAndroid Build Coastguard Worker	foo
9054*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9055*7c356e86SAndroid Build Coastguard Worker	makro
9056*7c356e86SAndroid Build Coastguard Worker---
9057*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-3
9058*7c356e86SAndroid Build Coastguard Workerdescription:
9059*7c356e86SAndroid Build Coastguard Worker	Check if aliases take precedences over Korn functions
9060*7c356e86SAndroid Build Coastguard Workerstdin:
9061*7c356e86SAndroid Build Coastguard Worker	alias foo='echo makro'
9062*7c356e86SAndroid Build Coastguard Worker	function foo {
9063*7c356e86SAndroid Build Coastguard Worker		echo funktion
9064*7c356e86SAndroid Build Coastguard Worker	}
9065*7c356e86SAndroid Build Coastguard Worker	foo
9066*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9067*7c356e86SAndroid Build Coastguard Worker	makro
9068*7c356e86SAndroid Build Coastguard Worker---
9069*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-4
9070*7c356e86SAndroid Build Coastguard Workerdescription:
9071*7c356e86SAndroid Build Coastguard Worker	Functions should only take over if actually being defined
9072*7c356e86SAndroid Build Coastguard Workerstdin:
9073*7c356e86SAndroid Build Coastguard Worker	alias local
9074*7c356e86SAndroid Build Coastguard Worker	:|| local() { :; }
9075*7c356e86SAndroid Build Coastguard Worker	alias local
9076*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9077*7c356e86SAndroid Build Coastguard Worker	local='\\builtin typeset'
9078*7c356e86SAndroid Build Coastguard Worker	local='\\builtin typeset'
9079*7c356e86SAndroid Build Coastguard Worker---
9080*7c356e86SAndroid Build Coastguard Workername: arrays-1
9081*7c356e86SAndroid Build Coastguard Workerdescription:
9082*7c356e86SAndroid Build Coastguard Worker	Check if Korn Shell arrays work as expected
9083*7c356e86SAndroid Build Coastguard Workerstdin:
9084*7c356e86SAndroid Build Coastguard Worker	v="c d"
9085*7c356e86SAndroid Build Coastguard Worker	set -A foo -- a \$v "$v" '$v' b
9086*7c356e86SAndroid Build Coastguard Worker	echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|"
9087*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9088*7c356e86SAndroid Build Coastguard Worker	5|a|$v|c d|$v|b|
9089*7c356e86SAndroid Build Coastguard Worker---
9090*7c356e86SAndroid Build Coastguard Workername: arrays-2a
9091*7c356e86SAndroid Build Coastguard Workerdescription:
9092*7c356e86SAndroid Build Coastguard Worker	Check if bash-style arrays work as expected
9093*7c356e86SAndroid Build Coastguard Workerstdin:
9094*7c356e86SAndroid Build Coastguard Worker	v="c d"
9095*7c356e86SAndroid Build Coastguard Worker	foo=(a \$v "$v" '$v' b)
9096*7c356e86SAndroid Build Coastguard Worker	echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|"
9097*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9098*7c356e86SAndroid Build Coastguard Worker	5|a|$v|c d|$v|b|
9099*7c356e86SAndroid Build Coastguard Worker---
9100*7c356e86SAndroid Build Coastguard Workername: arrays-2b
9101*7c356e86SAndroid Build Coastguard Workerdescription:
9102*7c356e86SAndroid Build Coastguard Worker	Check if bash-style arrays work as expected, with newlines
9103*7c356e86SAndroid Build Coastguard Workerstdin:
9104*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nfor x in "$@"; do print -nr -- "$x|"; done' >pfp
9105*7c356e86SAndroid Build Coastguard Worker	chmod +x pfp
9106*7c356e86SAndroid Build Coastguard Worker	test -n "$ZSH_VERSION" && setopt KSH_ARRAYS
9107*7c356e86SAndroid Build Coastguard Worker	v="e f"
9108*7c356e86SAndroid Build Coastguard Worker	foo=(a
9109*7c356e86SAndroid Build Coastguard Worker		bc
9110*7c356e86SAndroid Build Coastguard Worker		d \$v "$v" '$v' g
9111*7c356e86SAndroid Build Coastguard Worker	)
9112*7c356e86SAndroid Build Coastguard Worker	./pfp "${#foo[*]}" "${foo[0]}" "${foo[1]}" "${foo[2]}" "${foo[3]}" "${foo[4]}" "${foo[5]}" "${foo[6]}"; echo
9113*7c356e86SAndroid Build Coastguard Worker	foo=(a\
9114*7c356e86SAndroid Build Coastguard Worker		bc
9115*7c356e86SAndroid Build Coastguard Worker		d \$v "$v" '$v' g
9116*7c356e86SAndroid Build Coastguard Worker	)
9117*7c356e86SAndroid Build Coastguard Worker	./pfp "${#foo[*]}" "${foo[0]}" "${foo[1]}" "${foo[2]}" "${foo[3]}" "${foo[4]}" "${foo[5]}" "${foo[6]}"; echo
9118*7c356e86SAndroid Build Coastguard Worker	foo=(a\
9119*7c356e86SAndroid Build Coastguard Worker	bc\\
9120*7c356e86SAndroid Build Coastguard Worker		d \$v "$v" '$v'
9121*7c356e86SAndroid Build Coastguard Worker	g)
9122*7c356e86SAndroid Build Coastguard Worker	./pfp "${#foo[*]}" "${foo[0]}" "${foo[1]}" "${foo[2]}" "${foo[3]}" "${foo[4]}" "${foo[5]}" "${foo[6]}"; echo
9123*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9124*7c356e86SAndroid Build Coastguard Worker	7|a|bc|d|$v|e f|$v|g|
9125*7c356e86SAndroid Build Coastguard Worker	7|a|bc|d|$v|e f|$v|g|
9126*7c356e86SAndroid Build Coastguard Worker	6|abc\|d|$v|e f|$v|g||
9127*7c356e86SAndroid Build Coastguard Worker---
9128*7c356e86SAndroid Build Coastguard Workername: arrays-3
9129*7c356e86SAndroid Build Coastguard Workerdescription:
9130*7c356e86SAndroid Build Coastguard Worker	Check if array bounds are uint32_t
9131*7c356e86SAndroid Build Coastguard Workerstdin:
9132*7c356e86SAndroid Build Coastguard Worker	set -A foo a b c
9133*7c356e86SAndroid Build Coastguard Worker	foo[4097]=d
9134*7c356e86SAndroid Build Coastguard Worker	foo[2147483637]=e
9135*7c356e86SAndroid Build Coastguard Worker	echo ${foo[*]}
9136*7c356e86SAndroid Build Coastguard Worker	foo[-1]=f
9137*7c356e86SAndroid Build Coastguard Worker	echo ${foo[4294967295]} g ${foo[*]}
9138*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9139*7c356e86SAndroid Build Coastguard Worker	a b c d e
9140*7c356e86SAndroid Build Coastguard Worker	f g a b c d e f
9141*7c356e86SAndroid Build Coastguard Worker---
9142*7c356e86SAndroid Build Coastguard Workername: arrays-4
9143*7c356e86SAndroid Build Coastguard Workerdescription:
9144*7c356e86SAndroid Build Coastguard Worker	Check if Korn Shell arrays with specified indices work as expected
9145*7c356e86SAndroid Build Coastguard Workerstdin:
9146*7c356e86SAndroid Build Coastguard Worker	v="c d"
9147*7c356e86SAndroid Build Coastguard Worker	set -A foo -- [1]=\$v [2]="$v" [4]='$v' [0]=a [5]=b
9148*7c356e86SAndroid Build Coastguard Worker	echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|${foo[5]}|"
9149*7c356e86SAndroid Build Coastguard Worker	# we don't want this at all:
9150*7c356e86SAndroid Build Coastguard Worker	#	5|a|$v|c d||$v|b|
9151*7c356e86SAndroid Build Coastguard Worker	set -A arr "[5]=meh"
9152*7c356e86SAndroid Build Coastguard Worker	echo "<${arr[0]}><${arr[5]}>"
9153*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9154*7c356e86SAndroid Build Coastguard Worker	5|[1]=$v|[2]=c d|[4]=$v|[0]=a|[5]=b||
9155*7c356e86SAndroid Build Coastguard Worker	<[5]=meh><>
9156*7c356e86SAndroid Build Coastguard Worker---
9157*7c356e86SAndroid Build Coastguard Workername: arrays-5
9158*7c356e86SAndroid Build Coastguard Workerdescription:
9159*7c356e86SAndroid Build Coastguard Worker	Check if bash-style arrays with specified indices work as expected
9160*7c356e86SAndroid Build Coastguard Worker	(taken out temporarily to fix arrays-4; see also arrays-9a comment)
9161*7c356e86SAndroid Build Coastguard Workercategory: disabled
9162*7c356e86SAndroid Build Coastguard Workerstdin:
9163*7c356e86SAndroid Build Coastguard Worker	v="c d"
9164*7c356e86SAndroid Build Coastguard Worker	foo=([1]=\$v [2]="$v" [4]='$v' [0]=a [5]=b)
9165*7c356e86SAndroid Build Coastguard Worker	echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|${foo[5]}|"
9166*7c356e86SAndroid Build Coastguard Worker	x=([128]=foo bar baz)
9167*7c356e86SAndroid Build Coastguard Worker	echo k= ${!x[*]} .
9168*7c356e86SAndroid Build Coastguard Worker	echo v= ${x[*]} .
9169*7c356e86SAndroid Build Coastguard Worker	# Check that we do not break this by globbing
9170*7c356e86SAndroid Build Coastguard Worker	:>b=blah
9171*7c356e86SAndroid Build Coastguard Worker	bleh=5
9172*7c356e86SAndroid Build Coastguard Worker	typeset -a arr
9173*7c356e86SAndroid Build Coastguard Worker	arr+=([bleh]=blah)
9174*7c356e86SAndroid Build Coastguard Worker	echo "<${arr[0]}><${arr[5]}>"
9175*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9176*7c356e86SAndroid Build Coastguard Worker	5|a|$v|c d||$v|b|
9177*7c356e86SAndroid Build Coastguard Worker	k= 128 129 130 .
9178*7c356e86SAndroid Build Coastguard Worker	v= foo bar baz .
9179*7c356e86SAndroid Build Coastguard Worker	<><blah>
9180*7c356e86SAndroid Build Coastguard Worker---
9181*7c356e86SAndroid Build Coastguard Workername: arrays-6
9182*7c356e86SAndroid Build Coastguard Workerdescription:
9183*7c356e86SAndroid Build Coastguard Worker	Check if we can get the array keys (indices) for indexed arrays,
9184*7c356e86SAndroid Build Coastguard Worker	Korn shell style
9185*7c356e86SAndroid Build Coastguard Workerstdin:
9186*7c356e86SAndroid Build Coastguard Worker	of() {
9187*7c356e86SAndroid Build Coastguard Worker		i=0
9188*7c356e86SAndroid Build Coastguard Worker		for x in "$@"; do
9189*7c356e86SAndroid Build Coastguard Worker			echo -n "$((i++))<$x>"
9190*7c356e86SAndroid Build Coastguard Worker		done
9191*7c356e86SAndroid Build Coastguard Worker		echo
9192*7c356e86SAndroid Build Coastguard Worker	}
9193*7c356e86SAndroid Build Coastguard Worker	foo[1]=eins
9194*7c356e86SAndroid Build Coastguard Worker	set | grep '^foo'
9195*7c356e86SAndroid Build Coastguard Worker	echo =
9196*7c356e86SAndroid Build Coastguard Worker	foo[0]=zwei
9197*7c356e86SAndroid Build Coastguard Worker	foo[4]=drei
9198*7c356e86SAndroid Build Coastguard Worker	set | grep '^foo'
9199*7c356e86SAndroid Build Coastguard Worker	echo =
9200*7c356e86SAndroid Build Coastguard Worker	echo a $(of ${foo[*]}) = $(of ${bar[*]}) a
9201*7c356e86SAndroid Build Coastguard Worker	echo b $(of "${foo[*]}") = $(of "${bar[*]}") b
9202*7c356e86SAndroid Build Coastguard Worker	echo c $(of ${foo[@]}) = $(of ${bar[@]}) c
9203*7c356e86SAndroid Build Coastguard Worker	echo d $(of "${foo[@]}") = $(of "${bar[@]}") d
9204*7c356e86SAndroid Build Coastguard Worker	echo e $(of ${!foo[*]}) = $(of ${!bar[*]}) e
9205*7c356e86SAndroid Build Coastguard Worker	echo f $(of "${!foo[*]}") = $(of "${!bar[*]}") f
9206*7c356e86SAndroid Build Coastguard Worker	echo g $(of ${!foo[@]}) = $(of ${!bar[@]}) g
9207*7c356e86SAndroid Build Coastguard Worker	echo h $(of "${!foo[@]}") = $(of "${!bar[@]}") h
9208*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9209*7c356e86SAndroid Build Coastguard Worker	foo[1]=eins
9210*7c356e86SAndroid Build Coastguard Worker	=
9211*7c356e86SAndroid Build Coastguard Worker	foo[0]=zwei
9212*7c356e86SAndroid Build Coastguard Worker	foo[1]=eins
9213*7c356e86SAndroid Build Coastguard Worker	foo[4]=drei
9214*7c356e86SAndroid Build Coastguard Worker	=
9215*7c356e86SAndroid Build Coastguard Worker	a 0<zwei>1<eins>2<drei> = a
9216*7c356e86SAndroid Build Coastguard Worker	b 0<zwei eins drei> = 0<> b
9217*7c356e86SAndroid Build Coastguard Worker	c 0<zwei>1<eins>2<drei> = c
9218*7c356e86SAndroid Build Coastguard Worker	d 0<zwei>1<eins>2<drei> = d
9219*7c356e86SAndroid Build Coastguard Worker	e 0<0>1<1>2<4> = e
9220*7c356e86SAndroid Build Coastguard Worker	f 0<0 1 4> = 0<> f
9221*7c356e86SAndroid Build Coastguard Worker	g 0<0>1<1>2<4> = g
9222*7c356e86SAndroid Build Coastguard Worker	h 0<0>1<1>2<4> = h
9223*7c356e86SAndroid Build Coastguard Worker---
9224*7c356e86SAndroid Build Coastguard Workername: arrays-7
9225*7c356e86SAndroid Build Coastguard Workerdescription:
9226*7c356e86SAndroid Build Coastguard Worker	Check if we can get the array keys (indices) for indexed arrays,
9227*7c356e86SAndroid Build Coastguard Worker	Korn shell style, in some corner cases
9228*7c356e86SAndroid Build Coastguard Workerstdin:
9229*7c356e86SAndroid Build Coastguard Worker	echo !arz: ${!arz}
9230*7c356e86SAndroid Build Coastguard Worker	echo !arz[0]: ${!arz[0]}
9231*7c356e86SAndroid Build Coastguard Worker	echo !arz[1]: ${!arz[1]}
9232*7c356e86SAndroid Build Coastguard Worker	arz=foo
9233*7c356e86SAndroid Build Coastguard Worker	echo !arz: ${!arz}
9234*7c356e86SAndroid Build Coastguard Worker	echo !arz[0]: ${!arz[0]}
9235*7c356e86SAndroid Build Coastguard Worker	echo !arz[1]: ${!arz[1]}
9236*7c356e86SAndroid Build Coastguard Worker	unset arz
9237*7c356e86SAndroid Build Coastguard Worker	echo !arz: ${!arz}
9238*7c356e86SAndroid Build Coastguard Worker	echo !arz[0]: ${!arz[0]}
9239*7c356e86SAndroid Build Coastguard Worker	echo !arz[1]: ${!arz[1]}
9240*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9241*7c356e86SAndroid Build Coastguard Worker	!arz: arz
9242*7c356e86SAndroid Build Coastguard Worker	!arz[0]: arz[0]
9243*7c356e86SAndroid Build Coastguard Worker	!arz[1]: arz[1]
9244*7c356e86SAndroid Build Coastguard Worker	!arz: arz
9245*7c356e86SAndroid Build Coastguard Worker	!arz[0]: arz[0]
9246*7c356e86SAndroid Build Coastguard Worker	!arz[1]: arz[1]
9247*7c356e86SAndroid Build Coastguard Worker	!arz: arz
9248*7c356e86SAndroid Build Coastguard Worker	!arz[0]: arz[0]
9249*7c356e86SAndroid Build Coastguard Worker	!arz[1]: arz[1]
9250*7c356e86SAndroid Build Coastguard Worker---
9251*7c356e86SAndroid Build Coastguard Workername: arrays-8
9252*7c356e86SAndroid Build Coastguard Workerdescription:
9253*7c356e86SAndroid Build Coastguard Worker	Check some behavioural rules for arrays.
9254*7c356e86SAndroid Build Coastguard Workerstdin:
9255*7c356e86SAndroid Build Coastguard Worker	fna() {
9256*7c356e86SAndroid Build Coastguard Worker		set -A aa 9
9257*7c356e86SAndroid Build Coastguard Worker	}
9258*7c356e86SAndroid Build Coastguard Worker	fnb() {
9259*7c356e86SAndroid Build Coastguard Worker		typeset ab
9260*7c356e86SAndroid Build Coastguard Worker		set -A ab 9
9261*7c356e86SAndroid Build Coastguard Worker	}
9262*7c356e86SAndroid Build Coastguard Worker	fnc() {
9263*7c356e86SAndroid Build Coastguard Worker		typeset ac
9264*7c356e86SAndroid Build Coastguard Worker		set -A ac 91
9265*7c356e86SAndroid Build Coastguard Worker		unset ac
9266*7c356e86SAndroid Build Coastguard Worker		set -A ac 92
9267*7c356e86SAndroid Build Coastguard Worker	}
9268*7c356e86SAndroid Build Coastguard Worker	fnd() {
9269*7c356e86SAndroid Build Coastguard Worker		set +A ad 9
9270*7c356e86SAndroid Build Coastguard Worker	}
9271*7c356e86SAndroid Build Coastguard Worker	fne() {
9272*7c356e86SAndroid Build Coastguard Worker		unset ae
9273*7c356e86SAndroid Build Coastguard Worker		set +A ae 9
9274*7c356e86SAndroid Build Coastguard Worker	}
9275*7c356e86SAndroid Build Coastguard Worker	fnf() {
9276*7c356e86SAndroid Build Coastguard Worker		unset af[0]
9277*7c356e86SAndroid Build Coastguard Worker		set +A af 9
9278*7c356e86SAndroid Build Coastguard Worker	}
9279*7c356e86SAndroid Build Coastguard Worker	fng() {
9280*7c356e86SAndroid Build Coastguard Worker		unset ag[*]
9281*7c356e86SAndroid Build Coastguard Worker		set +A ag 9
9282*7c356e86SAndroid Build Coastguard Worker	}
9283*7c356e86SAndroid Build Coastguard Worker	set -A aa 1 2
9284*7c356e86SAndroid Build Coastguard Worker	set -A ab 1 2
9285*7c356e86SAndroid Build Coastguard Worker	set -A ac 1 2
9286*7c356e86SAndroid Build Coastguard Worker	set -A ad 1 2
9287*7c356e86SAndroid Build Coastguard Worker	set -A ae 1 2
9288*7c356e86SAndroid Build Coastguard Worker	set -A af 1 2
9289*7c356e86SAndroid Build Coastguard Worker	set -A ag 1 2
9290*7c356e86SAndroid Build Coastguard Worker	set -A ah 1 2
9291*7c356e86SAndroid Build Coastguard Worker	typeset -Z3 aa ab ac ad ae af ag
9292*7c356e86SAndroid Build Coastguard Worker	print 1a ${aa[*]} .
9293*7c356e86SAndroid Build Coastguard Worker	print 1b ${ab[*]} .
9294*7c356e86SAndroid Build Coastguard Worker	print 1c ${ac[*]} .
9295*7c356e86SAndroid Build Coastguard Worker	print 1d ${ad[*]} .
9296*7c356e86SAndroid Build Coastguard Worker	print 1e ${ae[*]} .
9297*7c356e86SAndroid Build Coastguard Worker	print 1f ${af[*]} .
9298*7c356e86SAndroid Build Coastguard Worker	print 1g ${ag[*]} .
9299*7c356e86SAndroid Build Coastguard Worker	print 1h ${ah[*]} .
9300*7c356e86SAndroid Build Coastguard Worker	fna
9301*7c356e86SAndroid Build Coastguard Worker	fnb
9302*7c356e86SAndroid Build Coastguard Worker	fnc
9303*7c356e86SAndroid Build Coastguard Worker	fnd
9304*7c356e86SAndroid Build Coastguard Worker	fne
9305*7c356e86SAndroid Build Coastguard Worker	fnf
9306*7c356e86SAndroid Build Coastguard Worker	fng
9307*7c356e86SAndroid Build Coastguard Worker	typeset -Z5 ah[*]
9308*7c356e86SAndroid Build Coastguard Worker	print 2a ${aa[*]} .
9309*7c356e86SAndroid Build Coastguard Worker	print 2b ${ab[*]} .
9310*7c356e86SAndroid Build Coastguard Worker	print 2c ${ac[*]} .
9311*7c356e86SAndroid Build Coastguard Worker	print 2d ${ad[*]} .
9312*7c356e86SAndroid Build Coastguard Worker	print 2e ${ae[*]} .
9313*7c356e86SAndroid Build Coastguard Worker	print 2f ${af[*]} .
9314*7c356e86SAndroid Build Coastguard Worker	print 2g ${ag[*]} .
9315*7c356e86SAndroid Build Coastguard Worker	print 2h ${ah[*]} .
9316*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9317*7c356e86SAndroid Build Coastguard Worker	1a 001 002 .
9318*7c356e86SAndroid Build Coastguard Worker	1b 001 002 .
9319*7c356e86SAndroid Build Coastguard Worker	1c 001 002 .
9320*7c356e86SAndroid Build Coastguard Worker	1d 001 002 .
9321*7c356e86SAndroid Build Coastguard Worker	1e 001 002 .
9322*7c356e86SAndroid Build Coastguard Worker	1f 001 002 .
9323*7c356e86SAndroid Build Coastguard Worker	1g 001 002 .
9324*7c356e86SAndroid Build Coastguard Worker	1h 1 2 .
9325*7c356e86SAndroid Build Coastguard Worker	2a 9 .
9326*7c356e86SAndroid Build Coastguard Worker	2b 001 002 .
9327*7c356e86SAndroid Build Coastguard Worker	2c 92 .
9328*7c356e86SAndroid Build Coastguard Worker	2d 009 002 .
9329*7c356e86SAndroid Build Coastguard Worker	2e 9 .
9330*7c356e86SAndroid Build Coastguard Worker	2f 9 002 .
9331*7c356e86SAndroid Build Coastguard Worker	2g 009 .
9332*7c356e86SAndroid Build Coastguard Worker	2h 00001 00002 .
9333*7c356e86SAndroid Build Coastguard Worker---
9334*7c356e86SAndroid Build Coastguard Workername: arrays-9a
9335*7c356e86SAndroid Build Coastguard Workerdescription:
9336*7c356e86SAndroid Build Coastguard Worker	Check that we can concatenate arrays
9337*7c356e86SAndroid Build Coastguard Workerstdin:
9338*7c356e86SAndroid Build Coastguard Worker	unset foo; foo=(bar); foo+=(baz); echo 1 ${!foo[*]} : ${foo[*]} .
9339*7c356e86SAndroid Build Coastguard Worker	unset foo; foo=(foo bar); foo+=(baz); echo 2 ${!foo[*]} : ${foo[*]} .
9340*7c356e86SAndroid Build Coastguard Worker#	unset foo; foo=([2]=foo [0]=bar); foo+=(baz [5]=quux); echo 3 ${!foo[*]} : ${foo[*]} .
9341*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9342*7c356e86SAndroid Build Coastguard Worker	1 0 1 : bar baz .
9343*7c356e86SAndroid Build Coastguard Worker	2 0 1 2 : foo bar baz .
9344*7c356e86SAndroid Build Coastguard Worker#	3 0 2 3 5 : bar foo baz quux .
9345*7c356e86SAndroid Build Coastguard Worker---
9346*7c356e86SAndroid Build Coastguard Workername: arrays-9b
9347*7c356e86SAndroid Build Coastguard Workerdescription:
9348*7c356e86SAndroid Build Coastguard Worker	Check that we can concatenate parameters too
9349*7c356e86SAndroid Build Coastguard Workerstdin:
9350*7c356e86SAndroid Build Coastguard Worker	unset foo; foo=bar; foo+=baz; echo 1 $foo .
9351*7c356e86SAndroid Build Coastguard Worker	unset foo; typeset -i16 foo=10; foo+=20; echo 2 $foo .
9352*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9353*7c356e86SAndroid Build Coastguard Worker	1 barbaz .
9354*7c356e86SAndroid Build Coastguard Worker	2 16#a20 .
9355*7c356e86SAndroid Build Coastguard Worker---
9356*7c356e86SAndroid Build Coastguard Workername: arrassign-basic
9357*7c356e86SAndroid Build Coastguard Workerdescription:
9358*7c356e86SAndroid Build Coastguard Worker	Check basic whitespace conserving properties of wdarrassign
9359*7c356e86SAndroid Build Coastguard Workerstdin:
9360*7c356e86SAndroid Build Coastguard Worker	a=($(echo a  b))
9361*7c356e86SAndroid Build Coastguard Worker	b=($(echo "a  b"))
9362*7c356e86SAndroid Build Coastguard Worker	c=("$(echo "a  b")")
9363*7c356e86SAndroid Build Coastguard Worker	d=("$(echo a  b)")
9364*7c356e86SAndroid Build Coastguard Worker	a+=($(echo c  d))
9365*7c356e86SAndroid Build Coastguard Worker	b+=($(echo "c  d"))
9366*7c356e86SAndroid Build Coastguard Worker	c+=("$(echo "c  d")")
9367*7c356e86SAndroid Build Coastguard Worker	d+=("$(echo c  d)")
9368*7c356e86SAndroid Build Coastguard Worker	echo ".a:${a[0]}.${a[1]}.${a[2]}.${a[3]}:"
9369*7c356e86SAndroid Build Coastguard Worker	echo ".b:${b[0]}.${b[1]}.${b[2]}.${b[3]}:"
9370*7c356e86SAndroid Build Coastguard Worker	echo ".c:${c[0]}.${c[1]}.${c[2]}.${c[3]}:"
9371*7c356e86SAndroid Build Coastguard Worker	echo ".d:${d[0]}.${d[1]}.${d[2]}.${d[3]}:"
9372*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9373*7c356e86SAndroid Build Coastguard Worker	.a:a.b.c.d:
9374*7c356e86SAndroid Build Coastguard Worker	.b:a.b.c.d:
9375*7c356e86SAndroid Build Coastguard Worker	.c:a  b.c  d..:
9376*7c356e86SAndroid Build Coastguard Worker	.d:a b.c d..:
9377*7c356e86SAndroid Build Coastguard Worker---
9378*7c356e86SAndroid Build Coastguard Workername: arrassign-eol
9379*7c356e86SAndroid Build Coastguard Workerdescription:
9380*7c356e86SAndroid Build Coastguard Worker	Commands after array assignments are not permitted
9381*7c356e86SAndroid Build Coastguard Workerstdin:
9382*7c356e86SAndroid Build Coastguard Worker	foo=(a b) env
9383*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
9384*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
9385*7c356e86SAndroid Build Coastguard Worker	/syntax error: unexpected 'env'/
9386*7c356e86SAndroid Build Coastguard Worker---
9387*7c356e86SAndroid Build Coastguard Workername: arrassign-fnc-none
9388*7c356e86SAndroid Build Coastguard Workerdescription:
9389*7c356e86SAndroid Build Coastguard Worker	Check locality of array access inside a function
9390*7c356e86SAndroid Build Coastguard Workerstdin:
9391*7c356e86SAndroid Build Coastguard Worker	function fn {
9392*7c356e86SAndroid Build Coastguard Worker		x+=(f)
9393*7c356e86SAndroid Build Coastguard Worker		echo ".fn:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9394*7c356e86SAndroid Build Coastguard Worker	}
9395*7c356e86SAndroid Build Coastguard Worker	function rfn {
9396*7c356e86SAndroid Build Coastguard Worker		if [[ -n $BASH_VERSION ]]; then
9397*7c356e86SAndroid Build Coastguard Worker			y=()
9398*7c356e86SAndroid Build Coastguard Worker		else
9399*7c356e86SAndroid Build Coastguard Worker			set -A y
9400*7c356e86SAndroid Build Coastguard Worker		fi
9401*7c356e86SAndroid Build Coastguard Worker		y+=(f)
9402*7c356e86SAndroid Build Coastguard Worker		echo ".rfn:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9403*7c356e86SAndroid Build Coastguard Worker	}
9404*7c356e86SAndroid Build Coastguard Worker	x=(m m)
9405*7c356e86SAndroid Build Coastguard Worker	y=(m m)
9406*7c356e86SAndroid Build Coastguard Worker	echo ".f0:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9407*7c356e86SAndroid Build Coastguard Worker	fn
9408*7c356e86SAndroid Build Coastguard Worker	echo ".f1:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9409*7c356e86SAndroid Build Coastguard Worker	fn
9410*7c356e86SAndroid Build Coastguard Worker	echo ".f2:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9411*7c356e86SAndroid Build Coastguard Worker	echo ".rf0:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9412*7c356e86SAndroid Build Coastguard Worker	rfn
9413*7c356e86SAndroid Build Coastguard Worker	echo ".rf1:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9414*7c356e86SAndroid Build Coastguard Worker	rfn
9415*7c356e86SAndroid Build Coastguard Worker	echo ".rf2:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9416*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9417*7c356e86SAndroid Build Coastguard Worker	.f0:m.m..:
9418*7c356e86SAndroid Build Coastguard Worker	.fn:m.m.f.:
9419*7c356e86SAndroid Build Coastguard Worker	.f1:m.m.f.:
9420*7c356e86SAndroid Build Coastguard Worker	.fn:m.m.f.f:
9421*7c356e86SAndroid Build Coastguard Worker	.f2:m.m.f.f:
9422*7c356e86SAndroid Build Coastguard Worker	.rf0:m.m..:
9423*7c356e86SAndroid Build Coastguard Worker	.rfn:f...:
9424*7c356e86SAndroid Build Coastguard Worker	.rf1:f...:
9425*7c356e86SAndroid Build Coastguard Worker	.rfn:f...:
9426*7c356e86SAndroid Build Coastguard Worker	.rf2:f...:
9427*7c356e86SAndroid Build Coastguard Worker---
9428*7c356e86SAndroid Build Coastguard Workername: arrassign-fnc-local
9429*7c356e86SAndroid Build Coastguard Workerdescription:
9430*7c356e86SAndroid Build Coastguard Worker	Check locality of array access inside a function
9431*7c356e86SAndroid Build Coastguard Worker	with the bash/mksh/ksh93 local/typeset keyword
9432*7c356e86SAndroid Build Coastguard Worker	(note: ksh93 has no local; typeset works only in FKSH)
9433*7c356e86SAndroid Build Coastguard Workerstdin:
9434*7c356e86SAndroid Build Coastguard Worker	function fn {
9435*7c356e86SAndroid Build Coastguard Worker		typeset x
9436*7c356e86SAndroid Build Coastguard Worker		x+=(f)
9437*7c356e86SAndroid Build Coastguard Worker		echo ".fn:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9438*7c356e86SAndroid Build Coastguard Worker	}
9439*7c356e86SAndroid Build Coastguard Worker	function rfn {
9440*7c356e86SAndroid Build Coastguard Worker		if [[ -n $BASH_VERSION ]]; then
9441*7c356e86SAndroid Build Coastguard Worker			y=()
9442*7c356e86SAndroid Build Coastguard Worker		else
9443*7c356e86SAndroid Build Coastguard Worker			set -A y
9444*7c356e86SAndroid Build Coastguard Worker		fi
9445*7c356e86SAndroid Build Coastguard Worker		typeset y
9446*7c356e86SAndroid Build Coastguard Worker		y+=(f)
9447*7c356e86SAndroid Build Coastguard Worker		echo ".rfn:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9448*7c356e86SAndroid Build Coastguard Worker	}
9449*7c356e86SAndroid Build Coastguard Worker	function fnr {
9450*7c356e86SAndroid Build Coastguard Worker		typeset z
9451*7c356e86SAndroid Build Coastguard Worker		if [[ -n $BASH_VERSION ]]; then
9452*7c356e86SAndroid Build Coastguard Worker			z=()
9453*7c356e86SAndroid Build Coastguard Worker		else
9454*7c356e86SAndroid Build Coastguard Worker			set -A z
9455*7c356e86SAndroid Build Coastguard Worker		fi
9456*7c356e86SAndroid Build Coastguard Worker		z+=(f)
9457*7c356e86SAndroid Build Coastguard Worker		echo ".fnr:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9458*7c356e86SAndroid Build Coastguard Worker	}
9459*7c356e86SAndroid Build Coastguard Worker	x=(m m)
9460*7c356e86SAndroid Build Coastguard Worker	y=(m m)
9461*7c356e86SAndroid Build Coastguard Worker	z=(m m)
9462*7c356e86SAndroid Build Coastguard Worker	echo ".f0:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9463*7c356e86SAndroid Build Coastguard Worker	fn
9464*7c356e86SAndroid Build Coastguard Worker	echo ".f1:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9465*7c356e86SAndroid Build Coastguard Worker	fn
9466*7c356e86SAndroid Build Coastguard Worker	echo ".f2:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9467*7c356e86SAndroid Build Coastguard Worker	echo ".rf0:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9468*7c356e86SAndroid Build Coastguard Worker	rfn
9469*7c356e86SAndroid Build Coastguard Worker	echo ".rf1:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9470*7c356e86SAndroid Build Coastguard Worker	rfn
9471*7c356e86SAndroid Build Coastguard Worker	echo ".rf2:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9472*7c356e86SAndroid Build Coastguard Worker	echo ".f0r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9473*7c356e86SAndroid Build Coastguard Worker	fnr
9474*7c356e86SAndroid Build Coastguard Worker	echo ".f1r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9475*7c356e86SAndroid Build Coastguard Worker	fnr
9476*7c356e86SAndroid Build Coastguard Worker	echo ".f2r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9477*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9478*7c356e86SAndroid Build Coastguard Worker	.f0:m.m..:
9479*7c356e86SAndroid Build Coastguard Worker	.fn:f...:
9480*7c356e86SAndroid Build Coastguard Worker	.f1:m.m..:
9481*7c356e86SAndroid Build Coastguard Worker	.fn:f...:
9482*7c356e86SAndroid Build Coastguard Worker	.f2:m.m..:
9483*7c356e86SAndroid Build Coastguard Worker	.rf0:m.m..:
9484*7c356e86SAndroid Build Coastguard Worker	.rfn:f...:
9485*7c356e86SAndroid Build Coastguard Worker	.rf1:...:
9486*7c356e86SAndroid Build Coastguard Worker	.rfn:f...:
9487*7c356e86SAndroid Build Coastguard Worker	.rf2:...:
9488*7c356e86SAndroid Build Coastguard Worker	.f0r:m.m..:
9489*7c356e86SAndroid Build Coastguard Worker	.fnr:f...:
9490*7c356e86SAndroid Build Coastguard Worker	.f1r:m.m..:
9491*7c356e86SAndroid Build Coastguard Worker	.fnr:f...:
9492*7c356e86SAndroid Build Coastguard Worker	.f2r:m.m..:
9493*7c356e86SAndroid Build Coastguard Worker---
9494*7c356e86SAndroid Build Coastguard Workername: arrassign-fnc-global
9495*7c356e86SAndroid Build Coastguard Workerdescription:
9496*7c356e86SAndroid Build Coastguard Worker	Check locality of array access inside a function
9497*7c356e86SAndroid Build Coastguard Worker	with the bash4/mksh/yash/zsh typeset -g keyword
9498*7c356e86SAndroid Build Coastguard Workerstdin:
9499*7c356e86SAndroid Build Coastguard Worker	function fn {
9500*7c356e86SAndroid Build Coastguard Worker		typeset -g x
9501*7c356e86SAndroid Build Coastguard Worker		x+=(f)
9502*7c356e86SAndroid Build Coastguard Worker		echo ".fn:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9503*7c356e86SAndroid Build Coastguard Worker	}
9504*7c356e86SAndroid Build Coastguard Worker	function rfn {
9505*7c356e86SAndroid Build Coastguard Worker		set -A y
9506*7c356e86SAndroid Build Coastguard Worker		typeset -g y
9507*7c356e86SAndroid Build Coastguard Worker		y+=(f)
9508*7c356e86SAndroid Build Coastguard Worker		echo ".rfn:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9509*7c356e86SAndroid Build Coastguard Worker	}
9510*7c356e86SAndroid Build Coastguard Worker	function fnr {
9511*7c356e86SAndroid Build Coastguard Worker		typeset -g z
9512*7c356e86SAndroid Build Coastguard Worker		set -A z
9513*7c356e86SAndroid Build Coastguard Worker		z+=(f)
9514*7c356e86SAndroid Build Coastguard Worker		echo ".fnr:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9515*7c356e86SAndroid Build Coastguard Worker	}
9516*7c356e86SAndroid Build Coastguard Worker	x=(m m)
9517*7c356e86SAndroid Build Coastguard Worker	y=(m m)
9518*7c356e86SAndroid Build Coastguard Worker	z=(m m)
9519*7c356e86SAndroid Build Coastguard Worker	echo ".f0:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9520*7c356e86SAndroid Build Coastguard Worker	fn
9521*7c356e86SAndroid Build Coastguard Worker	echo ".f1:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9522*7c356e86SAndroid Build Coastguard Worker	fn
9523*7c356e86SAndroid Build Coastguard Worker	echo ".f2:${x[0]}.${x[1]}.${x[2]}.${x[3]}:"
9524*7c356e86SAndroid Build Coastguard Worker	echo ".rf0:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9525*7c356e86SAndroid Build Coastguard Worker	rfn
9526*7c356e86SAndroid Build Coastguard Worker	echo ".rf1:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9527*7c356e86SAndroid Build Coastguard Worker	rfn
9528*7c356e86SAndroid Build Coastguard Worker	echo ".rf2:${y[0]}.${y[1]}.${y[2]}.${y[3]}:"
9529*7c356e86SAndroid Build Coastguard Worker	echo ".f0r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9530*7c356e86SAndroid Build Coastguard Worker	fnr
9531*7c356e86SAndroid Build Coastguard Worker	echo ".f1r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9532*7c356e86SAndroid Build Coastguard Worker	fnr
9533*7c356e86SAndroid Build Coastguard Worker	echo ".f2r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:"
9534*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9535*7c356e86SAndroid Build Coastguard Worker	.f0:m.m..:
9536*7c356e86SAndroid Build Coastguard Worker	.fn:m.m.f.:
9537*7c356e86SAndroid Build Coastguard Worker	.f1:m.m.f.:
9538*7c356e86SAndroid Build Coastguard Worker	.fn:m.m.f.f:
9539*7c356e86SAndroid Build Coastguard Worker	.f2:m.m.f.f:
9540*7c356e86SAndroid Build Coastguard Worker	.rf0:m.m..:
9541*7c356e86SAndroid Build Coastguard Worker	.rfn:f...:
9542*7c356e86SAndroid Build Coastguard Worker	.rf1:f...:
9543*7c356e86SAndroid Build Coastguard Worker	.rfn:f...:
9544*7c356e86SAndroid Build Coastguard Worker	.rf2:f...:
9545*7c356e86SAndroid Build Coastguard Worker	.f0r:m.m..:
9546*7c356e86SAndroid Build Coastguard Worker	.fnr:f...:
9547*7c356e86SAndroid Build Coastguard Worker	.f1r:f...:
9548*7c356e86SAndroid Build Coastguard Worker	.fnr:f...:
9549*7c356e86SAndroid Build Coastguard Worker	.f2r:f...:
9550*7c356e86SAndroid Build Coastguard Worker---
9551*7c356e86SAndroid Build Coastguard Workername: strassign-fnc-none
9552*7c356e86SAndroid Build Coastguard Workerdescription:
9553*7c356e86SAndroid Build Coastguard Worker	Check locality of string access inside a function
9554*7c356e86SAndroid Build Coastguard Workerstdin:
9555*7c356e86SAndroid Build Coastguard Worker	function fn {
9556*7c356e86SAndroid Build Coastguard Worker		x+=f
9557*7c356e86SAndroid Build Coastguard Worker		echo ".fn:$x:"
9558*7c356e86SAndroid Build Coastguard Worker	}
9559*7c356e86SAndroid Build Coastguard Worker	function rfn {
9560*7c356e86SAndroid Build Coastguard Worker		y=
9561*7c356e86SAndroid Build Coastguard Worker		y+=f
9562*7c356e86SAndroid Build Coastguard Worker		echo ".rfn:$y:"
9563*7c356e86SAndroid Build Coastguard Worker	}
9564*7c356e86SAndroid Build Coastguard Worker	x=m
9565*7c356e86SAndroid Build Coastguard Worker	y=m
9566*7c356e86SAndroid Build Coastguard Worker	echo ".f0:$x:"
9567*7c356e86SAndroid Build Coastguard Worker	fn
9568*7c356e86SAndroid Build Coastguard Worker	echo ".f1:$x:"
9569*7c356e86SAndroid Build Coastguard Worker	fn
9570*7c356e86SAndroid Build Coastguard Worker	echo ".f2:$x:"
9571*7c356e86SAndroid Build Coastguard Worker	echo ".rf0:$y:"
9572*7c356e86SAndroid Build Coastguard Worker	rfn
9573*7c356e86SAndroid Build Coastguard Worker	echo ".rf1:$y:"
9574*7c356e86SAndroid Build Coastguard Worker	rfn
9575*7c356e86SAndroid Build Coastguard Worker	echo ".rf2:$y:"
9576*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9577*7c356e86SAndroid Build Coastguard Worker	.f0:m:
9578*7c356e86SAndroid Build Coastguard Worker	.fn:mf:
9579*7c356e86SAndroid Build Coastguard Worker	.f1:mf:
9580*7c356e86SAndroid Build Coastguard Worker	.fn:mff:
9581*7c356e86SAndroid Build Coastguard Worker	.f2:mff:
9582*7c356e86SAndroid Build Coastguard Worker	.rf0:m:
9583*7c356e86SAndroid Build Coastguard Worker	.rfn:f:
9584*7c356e86SAndroid Build Coastguard Worker	.rf1:f:
9585*7c356e86SAndroid Build Coastguard Worker	.rfn:f:
9586*7c356e86SAndroid Build Coastguard Worker	.rf2:f:
9587*7c356e86SAndroid Build Coastguard Worker---
9588*7c356e86SAndroid Build Coastguard Workername: strassign-fnc-local
9589*7c356e86SAndroid Build Coastguard Workerdescription:
9590*7c356e86SAndroid Build Coastguard Worker	Check locality of string access inside a function
9591*7c356e86SAndroid Build Coastguard Worker	with the bash/mksh/ksh93 local/typeset keyword
9592*7c356e86SAndroid Build Coastguard Worker	(note: ksh93 has no local; typeset works only in FKSH)
9593*7c356e86SAndroid Build Coastguard Workerstdin:
9594*7c356e86SAndroid Build Coastguard Worker	function fn {
9595*7c356e86SAndroid Build Coastguard Worker		typeset x
9596*7c356e86SAndroid Build Coastguard Worker		x+=f
9597*7c356e86SAndroid Build Coastguard Worker		echo ".fn:$x:"
9598*7c356e86SAndroid Build Coastguard Worker	}
9599*7c356e86SAndroid Build Coastguard Worker	function rfn {
9600*7c356e86SAndroid Build Coastguard Worker		y=
9601*7c356e86SAndroid Build Coastguard Worker		typeset y
9602*7c356e86SAndroid Build Coastguard Worker		y+=f
9603*7c356e86SAndroid Build Coastguard Worker		echo ".rfn:$y:"
9604*7c356e86SAndroid Build Coastguard Worker	}
9605*7c356e86SAndroid Build Coastguard Worker	function fnr {
9606*7c356e86SAndroid Build Coastguard Worker		typeset z
9607*7c356e86SAndroid Build Coastguard Worker		z=
9608*7c356e86SAndroid Build Coastguard Worker		z+=f
9609*7c356e86SAndroid Build Coastguard Worker		echo ".fnr:$z:"
9610*7c356e86SAndroid Build Coastguard Worker	}
9611*7c356e86SAndroid Build Coastguard Worker	x=m
9612*7c356e86SAndroid Build Coastguard Worker	y=m
9613*7c356e86SAndroid Build Coastguard Worker	z=m
9614*7c356e86SAndroid Build Coastguard Worker	echo ".f0:$x:"
9615*7c356e86SAndroid Build Coastguard Worker	fn
9616*7c356e86SAndroid Build Coastguard Worker	echo ".f1:$x:"
9617*7c356e86SAndroid Build Coastguard Worker	fn
9618*7c356e86SAndroid Build Coastguard Worker	echo ".f2:$x:"
9619*7c356e86SAndroid Build Coastguard Worker	echo ".rf0:$y:"
9620*7c356e86SAndroid Build Coastguard Worker	rfn
9621*7c356e86SAndroid Build Coastguard Worker	echo ".rf1:$y:"
9622*7c356e86SAndroid Build Coastguard Worker	rfn
9623*7c356e86SAndroid Build Coastguard Worker	echo ".rf2:$y:"
9624*7c356e86SAndroid Build Coastguard Worker	echo ".f0r:$z:"
9625*7c356e86SAndroid Build Coastguard Worker	fnr
9626*7c356e86SAndroid Build Coastguard Worker	echo ".f1r:$z:"
9627*7c356e86SAndroid Build Coastguard Worker	fnr
9628*7c356e86SAndroid Build Coastguard Worker	echo ".f2r:$z:"
9629*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9630*7c356e86SAndroid Build Coastguard Worker	.f0:m:
9631*7c356e86SAndroid Build Coastguard Worker	.fn:f:
9632*7c356e86SAndroid Build Coastguard Worker	.f1:m:
9633*7c356e86SAndroid Build Coastguard Worker	.fn:f:
9634*7c356e86SAndroid Build Coastguard Worker	.f2:m:
9635*7c356e86SAndroid Build Coastguard Worker	.rf0:m:
9636*7c356e86SAndroid Build Coastguard Worker	.rfn:f:
9637*7c356e86SAndroid Build Coastguard Worker	.rf1::
9638*7c356e86SAndroid Build Coastguard Worker	.rfn:f:
9639*7c356e86SAndroid Build Coastguard Worker	.rf2::
9640*7c356e86SAndroid Build Coastguard Worker	.f0r:m:
9641*7c356e86SAndroid Build Coastguard Worker	.fnr:f:
9642*7c356e86SAndroid Build Coastguard Worker	.f1r:m:
9643*7c356e86SAndroid Build Coastguard Worker	.fnr:f:
9644*7c356e86SAndroid Build Coastguard Worker	.f2r:m:
9645*7c356e86SAndroid Build Coastguard Worker---
9646*7c356e86SAndroid Build Coastguard Workername: strassign-fnc-global
9647*7c356e86SAndroid Build Coastguard Workerdescription:
9648*7c356e86SAndroid Build Coastguard Worker	Check locality of string access inside a function
9649*7c356e86SAndroid Build Coastguard Worker	with the bash4/mksh/yash/zsh typeset -g keyword
9650*7c356e86SAndroid Build Coastguard Workerstdin:
9651*7c356e86SAndroid Build Coastguard Worker	function fn {
9652*7c356e86SAndroid Build Coastguard Worker		typeset -g x
9653*7c356e86SAndroid Build Coastguard Worker		x+=f
9654*7c356e86SAndroid Build Coastguard Worker		echo ".fn:$x:"
9655*7c356e86SAndroid Build Coastguard Worker	}
9656*7c356e86SAndroid Build Coastguard Worker	function rfn {
9657*7c356e86SAndroid Build Coastguard Worker		y=
9658*7c356e86SAndroid Build Coastguard Worker		typeset -g y
9659*7c356e86SAndroid Build Coastguard Worker		y+=f
9660*7c356e86SAndroid Build Coastguard Worker		echo ".rfn:$y:"
9661*7c356e86SAndroid Build Coastguard Worker	}
9662*7c356e86SAndroid Build Coastguard Worker	function fnr {
9663*7c356e86SAndroid Build Coastguard Worker		typeset -g z
9664*7c356e86SAndroid Build Coastguard Worker		z=
9665*7c356e86SAndroid Build Coastguard Worker		z+=f
9666*7c356e86SAndroid Build Coastguard Worker		echo ".fnr:$z:"
9667*7c356e86SAndroid Build Coastguard Worker	}
9668*7c356e86SAndroid Build Coastguard Worker	x=m
9669*7c356e86SAndroid Build Coastguard Worker	y=m
9670*7c356e86SAndroid Build Coastguard Worker	z=m
9671*7c356e86SAndroid Build Coastguard Worker	echo ".f0:$x:"
9672*7c356e86SAndroid Build Coastguard Worker	fn
9673*7c356e86SAndroid Build Coastguard Worker	echo ".f1:$x:"
9674*7c356e86SAndroid Build Coastguard Worker	fn
9675*7c356e86SAndroid Build Coastguard Worker	echo ".f2:$x:"
9676*7c356e86SAndroid Build Coastguard Worker	echo ".rf0:$y:"
9677*7c356e86SAndroid Build Coastguard Worker	rfn
9678*7c356e86SAndroid Build Coastguard Worker	echo ".rf1:$y:"
9679*7c356e86SAndroid Build Coastguard Worker	rfn
9680*7c356e86SAndroid Build Coastguard Worker	echo ".rf2:$y:"
9681*7c356e86SAndroid Build Coastguard Worker	echo ".f0r:$z:"
9682*7c356e86SAndroid Build Coastguard Worker	fnr
9683*7c356e86SAndroid Build Coastguard Worker	echo ".f1r:$z:"
9684*7c356e86SAndroid Build Coastguard Worker	fnr
9685*7c356e86SAndroid Build Coastguard Worker	echo ".f2r:$z:"
9686*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9687*7c356e86SAndroid Build Coastguard Worker	.f0:m:
9688*7c356e86SAndroid Build Coastguard Worker	.fn:mf:
9689*7c356e86SAndroid Build Coastguard Worker	.f1:mf:
9690*7c356e86SAndroid Build Coastguard Worker	.fn:mff:
9691*7c356e86SAndroid Build Coastguard Worker	.f2:mff:
9692*7c356e86SAndroid Build Coastguard Worker	.rf0:m:
9693*7c356e86SAndroid Build Coastguard Worker	.rfn:f:
9694*7c356e86SAndroid Build Coastguard Worker	.rf1:f:
9695*7c356e86SAndroid Build Coastguard Worker	.rfn:f:
9696*7c356e86SAndroid Build Coastguard Worker	.rf2:f:
9697*7c356e86SAndroid Build Coastguard Worker	.f0r:m:
9698*7c356e86SAndroid Build Coastguard Worker	.fnr:f:
9699*7c356e86SAndroid Build Coastguard Worker	.f1r:f:
9700*7c356e86SAndroid Build Coastguard Worker	.fnr:f:
9701*7c356e86SAndroid Build Coastguard Worker	.f2r:f:
9702*7c356e86SAndroid Build Coastguard Worker---
9703*7c356e86SAndroid Build Coastguard Workername: unset-fnc-local-ksh
9704*7c356e86SAndroid Build Coastguard Workerdescription:
9705*7c356e86SAndroid Build Coastguard Worker	Check that “unset” removes a previous “local”
9706*7c356e86SAndroid Build Coastguard Worker	(ksh93 syntax compatible version); apparently,
9707*7c356e86SAndroid Build Coastguard Worker	there are shells which fail this?
9708*7c356e86SAndroid Build Coastguard Workerstdin:
9709*7c356e86SAndroid Build Coastguard Worker	function f {
9710*7c356e86SAndroid Build Coastguard Worker		echo f0: $x
9711*7c356e86SAndroid Build Coastguard Worker		typeset x
9712*7c356e86SAndroid Build Coastguard Worker		echo f1: $x
9713*7c356e86SAndroid Build Coastguard Worker		x=fa
9714*7c356e86SAndroid Build Coastguard Worker		echo f2: $x
9715*7c356e86SAndroid Build Coastguard Worker		unset x
9716*7c356e86SAndroid Build Coastguard Worker		echo f3: $x
9717*7c356e86SAndroid Build Coastguard Worker		x=fb
9718*7c356e86SAndroid Build Coastguard Worker		echo f4: $x
9719*7c356e86SAndroid Build Coastguard Worker	}
9720*7c356e86SAndroid Build Coastguard Worker	x=o
9721*7c356e86SAndroid Build Coastguard Worker	echo before: $x
9722*7c356e86SAndroid Build Coastguard Worker	f
9723*7c356e86SAndroid Build Coastguard Worker	echo after: $x
9724*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9725*7c356e86SAndroid Build Coastguard Worker	before: o
9726*7c356e86SAndroid Build Coastguard Worker	f0: o
9727*7c356e86SAndroid Build Coastguard Worker	f1:
9728*7c356e86SAndroid Build Coastguard Worker	f2: fa
9729*7c356e86SAndroid Build Coastguard Worker	f3: o
9730*7c356e86SAndroid Build Coastguard Worker	f4: fb
9731*7c356e86SAndroid Build Coastguard Worker	after: fb
9732*7c356e86SAndroid Build Coastguard Worker---
9733*7c356e86SAndroid Build Coastguard Workername: unset-fnc-local-sh
9734*7c356e86SAndroid Build Coastguard Workerdescription:
9735*7c356e86SAndroid Build Coastguard Worker	Check that “unset” removes a previous “local”
9736*7c356e86SAndroid Build Coastguard Worker	(Debian Policy §10.4 sh version); apparently,
9737*7c356e86SAndroid Build Coastguard Worker	there are shells which fail this?
9738*7c356e86SAndroid Build Coastguard Workerstdin:
9739*7c356e86SAndroid Build Coastguard Worker	f() {
9740*7c356e86SAndroid Build Coastguard Worker		echo f0: $x
9741*7c356e86SAndroid Build Coastguard Worker		local x
9742*7c356e86SAndroid Build Coastguard Worker		echo f1: $x
9743*7c356e86SAndroid Build Coastguard Worker		x=fa
9744*7c356e86SAndroid Build Coastguard Worker		echo f2: $x
9745*7c356e86SAndroid Build Coastguard Worker		unset x
9746*7c356e86SAndroid Build Coastguard Worker		echo f3: $x
9747*7c356e86SAndroid Build Coastguard Worker		x=fb
9748*7c356e86SAndroid Build Coastguard Worker		echo f4: $x
9749*7c356e86SAndroid Build Coastguard Worker	}
9750*7c356e86SAndroid Build Coastguard Worker	x=o
9751*7c356e86SAndroid Build Coastguard Worker	echo before: $x
9752*7c356e86SAndroid Build Coastguard Worker	f
9753*7c356e86SAndroid Build Coastguard Worker	echo after: $x
9754*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9755*7c356e86SAndroid Build Coastguard Worker	before: o
9756*7c356e86SAndroid Build Coastguard Worker	f0: o
9757*7c356e86SAndroid Build Coastguard Worker	f1:
9758*7c356e86SAndroid Build Coastguard Worker	f2: fa
9759*7c356e86SAndroid Build Coastguard Worker	f3: o
9760*7c356e86SAndroid Build Coastguard Worker	f4: fb
9761*7c356e86SAndroid Build Coastguard Worker	after: fb
9762*7c356e86SAndroid Build Coastguard Worker---
9763*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-1
9764*7c356e86SAndroid Build Coastguard Workerdescription:
9765*7c356e86SAndroid Build Coastguard Worker	Check if bash-style substring expansion works
9766*7c356e86SAndroid Build Coastguard Worker	when using positive numerics
9767*7c356e86SAndroid Build Coastguard Workerstdin:
9768*7c356e86SAndroid Build Coastguard Worker	x=abcdefghi
9769*7c356e86SAndroid Build Coastguard Worker	typeset -i y=123456789
9770*7c356e86SAndroid Build Coastguard Worker	typeset -i 16 z=123456789	# 16#75bcd15
9771*7c356e86SAndroid Build Coastguard Worker	echo a t${x:2:2} ${y:2:3} ${z:2:3} a
9772*7c356e86SAndroid Build Coastguard Worker	echo b ${x::3} ${y::3} ${z::3} b
9773*7c356e86SAndroid Build Coastguard Worker	echo c ${x:2:} ${y:2:} ${z:2:} c
9774*7c356e86SAndroid Build Coastguard Worker	echo d ${x:2} ${y:2} ${z:2} d
9775*7c356e86SAndroid Build Coastguard Worker	echo e ${x:2:6} ${y:2:6} ${z:2:7} e
9776*7c356e86SAndroid Build Coastguard Worker	echo f ${x:2:7} ${y:2:7} ${z:2:8} f
9777*7c356e86SAndroid Build Coastguard Worker	echo g ${x:2:8} ${y:2:8} ${z:2:9} g
9778*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9779*7c356e86SAndroid Build Coastguard Worker	a tcd 345 #75 a
9780*7c356e86SAndroid Build Coastguard Worker	b abc 123 16# b
9781*7c356e86SAndroid Build Coastguard Worker	c c
9782*7c356e86SAndroid Build Coastguard Worker	d cdefghi 3456789 #75bcd15 d
9783*7c356e86SAndroid Build Coastguard Worker	e cdefgh 345678 #75bcd1 e
9784*7c356e86SAndroid Build Coastguard Worker	f cdefghi 3456789 #75bcd15 f
9785*7c356e86SAndroid Build Coastguard Worker	g cdefghi 3456789 #75bcd15 g
9786*7c356e86SAndroid Build Coastguard Worker---
9787*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-2
9788*7c356e86SAndroid Build Coastguard Workerdescription:
9789*7c356e86SAndroid Build Coastguard Worker	Check if bash-style substring expansion works
9790*7c356e86SAndroid Build Coastguard Worker	when using negative numerics or expressions
9791*7c356e86SAndroid Build Coastguard Workerstdin:
9792*7c356e86SAndroid Build Coastguard Worker	x=abcdefghi
9793*7c356e86SAndroid Build Coastguard Worker	typeset -i y=123456789
9794*7c356e86SAndroid Build Coastguard Worker	typeset -i 16 z=123456789	# 16#75bcd15
9795*7c356e86SAndroid Build Coastguard Worker	n=2
9796*7c356e86SAndroid Build Coastguard Worker	echo a ${x:$n:3} ${y:$n:3} ${z:$n:3} a
9797*7c356e86SAndroid Build Coastguard Worker	echo b ${x:(n):3} ${y:(n):3} ${z:(n):3} b
9798*7c356e86SAndroid Build Coastguard Worker	echo c ${x:(-2):1} ${y:(-2):1} ${z:(-2):1} c
9799*7c356e86SAndroid Build Coastguard Worker	echo d t${x: n:2} ${y: n:3} ${z: n:3} d
9800*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9801*7c356e86SAndroid Build Coastguard Worker	a cde 345 #75 a
9802*7c356e86SAndroid Build Coastguard Worker	b cde 345 #75 b
9803*7c356e86SAndroid Build Coastguard Worker	c h 8 1 c
9804*7c356e86SAndroid Build Coastguard Worker	d tcd 345 #75 d
9805*7c356e86SAndroid Build Coastguard Worker---
9806*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-3
9807*7c356e86SAndroid Build Coastguard Workerdescription:
9808*7c356e86SAndroid Build Coastguard Worker	Match bash5
9809*7c356e86SAndroid Build Coastguard Workerstdin:
9810*7c356e86SAndroid Build Coastguard Worker	export x=abcdefghi n=2
9811*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo v${x:(n)}x'
9812*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo w${x: n}x'
9813*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo x${x:n}x'
9814*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo y${x:}x'
9815*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo z${x}x'
9816*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'x=abcdef;y=123;echo q${x:${y:2:1}:2}q'
9817*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9818*7c356e86SAndroid Build Coastguard Worker	vcdefghix
9819*7c356e86SAndroid Build Coastguard Worker	wcdefghix
9820*7c356e86SAndroid Build Coastguard Worker	xcdefghix
9821*7c356e86SAndroid Build Coastguard Worker	zabcdefghix
9822*7c356e86SAndroid Build Coastguard Worker	qdeq
9823*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
9824*7c356e86SAndroid Build Coastguard Worker	/x:}.*bad substitution/
9825*7c356e86SAndroid Build Coastguard Worker---
9826*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-4
9827*7c356e86SAndroid Build Coastguard Workerdescription:
9828*7c356e86SAndroid Build Coastguard Worker	Check corner cases for substring expansion
9829*7c356e86SAndroid Build Coastguard Workerstdin:
9830*7c356e86SAndroid Build Coastguard Worker	x=abcdefghi
9831*7c356e86SAndroid Build Coastguard Worker	integer y=2
9832*7c356e86SAndroid Build Coastguard Worker	echo a ${x:(y == 1 ? 2 : 3):4} a
9833*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9834*7c356e86SAndroid Build Coastguard Worker	a defg a
9835*7c356e86SAndroid Build Coastguard Worker---
9836*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-5A
9837*7c356e86SAndroid Build Coastguard Workerdescription:
9838*7c356e86SAndroid Build Coastguard Worker	Check that substring expansions work on characters
9839*7c356e86SAndroid Build Coastguard Workerstdin:
9840*7c356e86SAndroid Build Coastguard Worker	set +U
9841*7c356e86SAndroid Build Coastguard Worker	x=mäh
9842*7c356e86SAndroid Build Coastguard Worker	echo a ${x::1} ${x: -1} a
9843*7c356e86SAndroid Build Coastguard Worker	echo b ${x::3} ${x: -3} b
9844*7c356e86SAndroid Build Coastguard Worker	echo c ${x:1:2} ${x: -3:2} c
9845*7c356e86SAndroid Build Coastguard Worker	echo d ${#x} d
9846*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9847*7c356e86SAndroid Build Coastguard Worker	a m h a
9848*7c356e86SAndroid Build Coastguard Worker	b mä äh b
9849*7c356e86SAndroid Build Coastguard Worker	c ä ä c
9850*7c356e86SAndroid Build Coastguard Worker	d 4 d
9851*7c356e86SAndroid Build Coastguard Worker---
9852*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-5W
9853*7c356e86SAndroid Build Coastguard Workerdescription:
9854*7c356e86SAndroid Build Coastguard Worker	Check that substring expansions work on characters
9855*7c356e86SAndroid Build Coastguard Workerstdin:
9856*7c356e86SAndroid Build Coastguard Worker	set -U
9857*7c356e86SAndroid Build Coastguard Worker	x=mäh
9858*7c356e86SAndroid Build Coastguard Worker	echo a ${x::1} ${x: -1} a
9859*7c356e86SAndroid Build Coastguard Worker	echo b ${x::2} ${x: -2} b
9860*7c356e86SAndroid Build Coastguard Worker	echo c ${x:1:1} ${x: -2:1} c
9861*7c356e86SAndroid Build Coastguard Worker	echo d ${#x} d
9862*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9863*7c356e86SAndroid Build Coastguard Worker	a m h a
9864*7c356e86SAndroid Build Coastguard Worker	b mä äh b
9865*7c356e86SAndroid Build Coastguard Worker	c ä ä c
9866*7c356e86SAndroid Build Coastguard Worker	d 3 d
9867*7c356e86SAndroid Build Coastguard Worker---
9868*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-6
9869*7c356e86SAndroid Build Coastguard Workerdescription:
9870*7c356e86SAndroid Build Coastguard Worker	Check that string substitution works correctly
9871*7c356e86SAndroid Build Coastguard Workerstdin:
9872*7c356e86SAndroid Build Coastguard Worker	foo=1
9873*7c356e86SAndroid Build Coastguard Worker	bar=2
9874*7c356e86SAndroid Build Coastguard Worker	baz=qwertyuiop
9875*7c356e86SAndroid Build Coastguard Worker	echo a ${baz: foo: bar}
9876*7c356e86SAndroid Build Coastguard Worker	echo b ${baz: foo: $bar}
9877*7c356e86SAndroid Build Coastguard Worker	echo c ${baz: $foo: bar}
9878*7c356e86SAndroid Build Coastguard Worker	echo d ${baz: $foo: $bar}
9879*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9880*7c356e86SAndroid Build Coastguard Worker	a we
9881*7c356e86SAndroid Build Coastguard Worker	b we
9882*7c356e86SAndroid Build Coastguard Worker	c we
9883*7c356e86SAndroid Build Coastguard Worker	d we
9884*7c356e86SAndroid Build Coastguard Worker---
9885*7c356e86SAndroid Build Coastguard Workername: varexpand-special-hash
9886*7c356e86SAndroid Build Coastguard Workerdescription:
9887*7c356e86SAndroid Build Coastguard Worker	Check special ${var@x} expansion for x=hash
9888*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
9889*7c356e86SAndroid Build Coastguard Workerstdin:
9890*7c356e86SAndroid Build Coastguard Worker	typeset -i8 foo=10
9891*7c356e86SAndroid Build Coastguard Worker	bar=baz
9892*7c356e86SAndroid Build Coastguard Worker	unset baz
9893*7c356e86SAndroid Build Coastguard Worker	print ${foo@#} ${bar@#} ${baz@#} .
9894*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9895*7c356e86SAndroid Build Coastguard Worker	9B15FBFB CFBDD32B 00000000 .
9896*7c356e86SAndroid Build Coastguard Worker---
9897*7c356e86SAndroid Build Coastguard Workername: varexpand-special-hash-ebcdic
9898*7c356e86SAndroid Build Coastguard Workerdescription:
9899*7c356e86SAndroid Build Coastguard Worker	Check special ${var@x} expansion for x=hash
9900*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
9901*7c356e86SAndroid Build Coastguard Workerstdin:
9902*7c356e86SAndroid Build Coastguard Worker	typeset -i8 foo=10
9903*7c356e86SAndroid Build Coastguard Worker	bar=baz
9904*7c356e86SAndroid Build Coastguard Worker	unset baz
9905*7c356e86SAndroid Build Coastguard Worker	print ${foo@#} ${bar@#} ${baz@#} .
9906*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9907*7c356e86SAndroid Build Coastguard Worker	016AE33D 9769C4AF 00000000 .
9908*7c356e86SAndroid Build Coastguard Worker---
9909*7c356e86SAndroid Build Coastguard Workername: varexpand-special-quote
9910*7c356e86SAndroid Build Coastguard Workerdescription:
9911*7c356e86SAndroid Build Coastguard Worker	Check special ${var@Q} expansion for quoted strings
9912*7c356e86SAndroid Build Coastguard Workercategory: !shell:faux-ebcdic
9913*7c356e86SAndroid Build Coastguard Workerstdin:
9914*7c356e86SAndroid Build Coastguard Worker	set +U
9915*7c356e86SAndroid Build Coastguard Worker	i=x
9916*7c356e86SAndroid Build Coastguard Worker	j=a\ b
9917*7c356e86SAndroid Build Coastguard Worker	k=$'c
9918*7c356e86SAndroid Build Coastguard Worker	d\xA0''e€f'
9919*7c356e86SAndroid Build Coastguard Worker	print -r -- "<i=$i j=$j k=$k>"
9920*7c356e86SAndroid Build Coastguard Worker	s="u=${i@Q} v=${j@Q} w=${k@Q}"
9921*7c356e86SAndroid Build Coastguard Worker	print -r -- "s=\"$s\""
9922*7c356e86SAndroid Build Coastguard Worker	eval "$s"
9923*7c356e86SAndroid Build Coastguard Worker	typeset -p u v w
9924*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9925*7c356e86SAndroid Build Coastguard Worker	<i=x j=a b k=c
9926*7c356e86SAndroid Build Coastguard Worker	d�e€f>
9927*7c356e86SAndroid Build Coastguard Worker	s="u=x v='a b' w=$'c\nd\240e\u20ACf'"
9928*7c356e86SAndroid Build Coastguard Worker	typeset u=x
9929*7c356e86SAndroid Build Coastguard Worker	typeset v='a b'
9930*7c356e86SAndroid Build Coastguard Worker	typeset w=$'c\nd\240e\u20ACf'
9931*7c356e86SAndroid Build Coastguard Worker---
9932*7c356e86SAndroid Build Coastguard Workername: varexpand-special-quote-faux-EBCDIC
9933*7c356e86SAndroid Build Coastguard Workerdescription:
9934*7c356e86SAndroid Build Coastguard Worker	Check special ${var@Q} expansion for quoted strings
9935*7c356e86SAndroid Build Coastguard Workercategory: shell:faux-ebcdic
9936*7c356e86SAndroid Build Coastguard Workerstdin:
9937*7c356e86SAndroid Build Coastguard Worker	set +U
9938*7c356e86SAndroid Build Coastguard Worker	i=x
9939*7c356e86SAndroid Build Coastguard Worker	j=a\ b
9940*7c356e86SAndroid Build Coastguard Worker	k=$'c
9941*7c356e86SAndroid Build Coastguard Worker	d\xA0''e€f'
9942*7c356e86SAndroid Build Coastguard Worker	print -r -- "<i=$i j=$j k=$k>"
9943*7c356e86SAndroid Build Coastguard Worker	s="u=${i@Q} v=${j@Q} w=${k@Q}"
9944*7c356e86SAndroid Build Coastguard Worker	print -r -- "s=\"$s\""
9945*7c356e86SAndroid Build Coastguard Worker	eval "$s"
9946*7c356e86SAndroid Build Coastguard Worker	typeset -p u v w
9947*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9948*7c356e86SAndroid Build Coastguard Worker	<i=x j=a b k=c
9949*7c356e86SAndroid Build Coastguard Worker	d�e€f>
9950*7c356e86SAndroid Build Coastguard Worker	s="u=x v='a b' w=$'c\nd�e\u20ACf'"
9951*7c356e86SAndroid Build Coastguard Worker	typeset u=x
9952*7c356e86SAndroid Build Coastguard Worker	typeset v='a b'
9953*7c356e86SAndroid Build Coastguard Worker	typeset w=$'c\nd�e\u20ACf'
9954*7c356e86SAndroid Build Coastguard Worker---
9955*7c356e86SAndroid Build Coastguard Workername: varexpand-null-1
9956*7c356e86SAndroid Build Coastguard Workerdescription:
9957*7c356e86SAndroid Build Coastguard Worker	Ensure empty strings expand emptily
9958*7c356e86SAndroid Build Coastguard Workerstdin:
9959*7c356e86SAndroid Build Coastguard Worker	print s ${a} . ${b} S
9960*7c356e86SAndroid Build Coastguard Worker	print t ${a#?} . ${b%?} T
9961*7c356e86SAndroid Build Coastguard Worker	print r ${a=} . ${b/c/d} R
9962*7c356e86SAndroid Build Coastguard Worker	print q
9963*7c356e86SAndroid Build Coastguard Worker	print s "${a}" . "${b}" S
9964*7c356e86SAndroid Build Coastguard Worker	print t "${a#?}" . "${b%?}" T
9965*7c356e86SAndroid Build Coastguard Worker	print r "${a=}" . "${b/c/d}" R
9966*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9967*7c356e86SAndroid Build Coastguard Worker	s . S
9968*7c356e86SAndroid Build Coastguard Worker	t . T
9969*7c356e86SAndroid Build Coastguard Worker	r . R
9970*7c356e86SAndroid Build Coastguard Worker	q
9971*7c356e86SAndroid Build Coastguard Worker	s  .  S
9972*7c356e86SAndroid Build Coastguard Worker	t  .  T
9973*7c356e86SAndroid Build Coastguard Worker	r  .  R
9974*7c356e86SAndroid Build Coastguard Worker---
9975*7c356e86SAndroid Build Coastguard Workername: varexpand-null-2
9976*7c356e86SAndroid Build Coastguard Workerdescription:
9977*7c356e86SAndroid Build Coastguard Worker	Ensure empty strings, when quoted, are expanded as empty strings
9978*7c356e86SAndroid Build Coastguard Workerstdin:
9979*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nfor x in "$@"; do print -nr -- "<$x> "; done' >pfs
9980*7c356e86SAndroid Build Coastguard Worker	chmod +x pfs
9981*7c356e86SAndroid Build Coastguard Worker	./pfs 1 "${a}" 2 "${a#?}" + "${b%?}" 3 "${a=}" + "${b/c/d}"
9982*7c356e86SAndroid Build Coastguard Worker	echo .
9983*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
9984*7c356e86SAndroid Build Coastguard Worker	<1> <> <2> <> <+> <> <3> <> <+> <> .
9985*7c356e86SAndroid Build Coastguard Worker---
9986*7c356e86SAndroid Build Coastguard Workername: varexpand-null-3
9987*7c356e86SAndroid Build Coastguard Workerdescription:
9988*7c356e86SAndroid Build Coastguard Worker	Ensure concatenating behaviour matches other shells
9989*7c356e86SAndroid Build Coastguard Workerstdin:
9990*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
9991*7c356e86SAndroid Build Coastguard Worker	showargs 0 ""$@
9992*7c356e86SAndroid Build Coastguard Worker	x=; showargs 1 "$x"$@
9993*7c356e86SAndroid Build Coastguard Worker	set A; showargs 2 "${@:+}"
9994*7c356e86SAndroid Build Coastguard Worker	n() { echo "$#"; }
9995*7c356e86SAndroid Build Coastguard Worker	unset e
9996*7c356e86SAndroid Build Coastguard Worker	set -- a b
9997*7c356e86SAndroid Build Coastguard Worker	n """$@"
9998*7c356e86SAndroid Build Coastguard Worker	n "$@"
9999*7c356e86SAndroid Build Coastguard Worker	n "$@"""
10000*7c356e86SAndroid Build Coastguard Worker	n "$e""$@"
10001*7c356e86SAndroid Build Coastguard Worker	n "$@"
10002*7c356e86SAndroid Build Coastguard Worker	n "$@""$e"
10003*7c356e86SAndroid Build Coastguard Worker	set --
10004*7c356e86SAndroid Build Coastguard Worker	n """$@"
10005*7c356e86SAndroid Build Coastguard Worker	n "$@"
10006*7c356e86SAndroid Build Coastguard Worker	n "$@"""
10007*7c356e86SAndroid Build Coastguard Worker	n "$e""$@"
10008*7c356e86SAndroid Build Coastguard Worker	n "$@"
10009*7c356e86SAndroid Build Coastguard Worker	n "$@""$e"
10010*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10011*7c356e86SAndroid Build Coastguard Worker	<0> <> .
10012*7c356e86SAndroid Build Coastguard Worker	<1> <> .
10013*7c356e86SAndroid Build Coastguard Worker	<2> <> .
10014*7c356e86SAndroid Build Coastguard Worker	2
10015*7c356e86SAndroid Build Coastguard Worker	2
10016*7c356e86SAndroid Build Coastguard Worker	2
10017*7c356e86SAndroid Build Coastguard Worker	2
10018*7c356e86SAndroid Build Coastguard Worker	2
10019*7c356e86SAndroid Build Coastguard Worker	2
10020*7c356e86SAndroid Build Coastguard Worker	1
10021*7c356e86SAndroid Build Coastguard Worker	0
10022*7c356e86SAndroid Build Coastguard Worker	1
10023*7c356e86SAndroid Build Coastguard Worker	1
10024*7c356e86SAndroid Build Coastguard Worker	0
10025*7c356e86SAndroid Build Coastguard Worker	1
10026*7c356e86SAndroid Build Coastguard Worker---
10027*7c356e86SAndroid Build Coastguard Workername: varexpand-funny-chars
10028*7c356e86SAndroid Build Coastguard Workerdescription:
10029*7c356e86SAndroid Build Coastguard Worker	Check some characters
10030*7c356e86SAndroid Build Coastguard Worker	XXX \uEF80 is asymmetric, possibly buggy so we don’t check this
10031*7c356e86SAndroid Build Coastguard Workerstdin:
10032*7c356e86SAndroid Build Coastguard Worker	x=$'<\x00>'; typeset -p x
10033*7c356e86SAndroid Build Coastguard Worker	x=$'<\x01>'; typeset -p x
10034*7c356e86SAndroid Build Coastguard Worker	x=$'<\u0000>'; typeset -p x
10035*7c356e86SAndroid Build Coastguard Worker	x=$'<\u0001>'; typeset -p x
10036*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10037*7c356e86SAndroid Build Coastguard Worker	typeset x='<'
10038*7c356e86SAndroid Build Coastguard Worker	typeset x=$'<\001>'
10039*7c356e86SAndroid Build Coastguard Worker	typeset x='<'
10040*7c356e86SAndroid Build Coastguard Worker	typeset x=$'<\001>'
10041*7c356e86SAndroid Build Coastguard Worker---
10042*7c356e86SAndroid Build Coastguard Workername: print-funny-chars
10043*7c356e86SAndroid Build Coastguard Workerdescription:
10044*7c356e86SAndroid Build Coastguard Worker	Check print builtin's capability to output designated characters
10045*7c356e86SAndroid Build Coastguard Workerstdin:
10046*7c356e86SAndroid Build Coastguard Worker	{
10047*7c356e86SAndroid Build Coastguard Worker		print '<\0144\0344\xDB\u00DB\u20AC\uDB\x40>'
10048*7c356e86SAndroid Build Coastguard Worker		print '<\x00>'
10049*7c356e86SAndroid Build Coastguard Worker		print '<\x01>'
10050*7c356e86SAndroid Build Coastguard Worker		print '<\u0000>'
10051*7c356e86SAndroid Build Coastguard Worker		print '<\u0001>'
10052*7c356e86SAndroid Build Coastguard Worker	} | {
10053*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3Ar
10054*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10055*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z5 hv=2147483647
10056*7c356e86SAndroid Build Coastguard Worker		dasc=
10057*7c356e86SAndroid Build Coastguard Worker		if read -arN -1 line; then
10058*7c356e86SAndroid Build Coastguard Worker			typeset -i1 line
10059*7c356e86SAndroid Build Coastguard Worker			i=0
10060*7c356e86SAndroid Build Coastguard Worker			while (( i < ${#line[*]} )); do
10061*7c356e86SAndroid Build Coastguard Worker				hv=${line[i++]}
10062*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 15) == 0 )); then
10063*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10064*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10065*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10066*7c356e86SAndroid Build Coastguard Worker				fi
10067*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10068*7c356e86SAndroid Build Coastguard Worker				if (( (hv < 32) || (hv > 126) )); then
10069*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc.
10070*7c356e86SAndroid Build Coastguard Worker				else
10071*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc${line[i-1]#1#}
10072*7c356e86SAndroid Build Coastguard Worker				fi
10073*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 15) == 7 )) && print -n -- '- '
10074*7c356e86SAndroid Build Coastguard Worker			done
10075*7c356e86SAndroid Build Coastguard Worker		fi
10076*7c356e86SAndroid Build Coastguard Worker		while (( pos & 15 )); do
10077*7c356e86SAndroid Build Coastguard Worker			print -n '   '
10078*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 15) == 7 )) && print -n -- '- '
10079*7c356e86SAndroid Build Coastguard Worker		done
10080*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10081*7c356e86SAndroid Build Coastguard Worker	}
10082*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10083*7c356e86SAndroid Build Coastguard Worker	00000000  3C 64 E4 DB C3 9B E2 82 - AC C3 9B 40 3E 0A 3C 00  |<d.........@>.<.|
10084*7c356e86SAndroid Build Coastguard Worker	00000010  3E 0A 3C 01 3E 0A 3C 00 - 3E 0A 3C 01 3E 0A        |>.<.>.<.>.<.>.|
10085*7c356e86SAndroid Build Coastguard Worker---
10086*7c356e86SAndroid Build Coastguard Workername: print-bksl-c
10087*7c356e86SAndroid Build Coastguard Workerdescription:
10088*7c356e86SAndroid Build Coastguard Worker	Check print builtin's \c escape
10089*7c356e86SAndroid Build Coastguard Workerstdin:
10090*7c356e86SAndroid Build Coastguard Worker	print '\ca'; print b
10091*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10092*7c356e86SAndroid Build Coastguard Worker	ab
10093*7c356e86SAndroid Build Coastguard Worker---
10094*7c356e86SAndroid Build Coastguard Workername: print-cr
10095*7c356e86SAndroid Build Coastguard Workerdescription:
10096*7c356e86SAndroid Build Coastguard Worker	Check that CR+LF is not collapsed into LF as some MSYS shells wrongly do
10097*7c356e86SAndroid Build Coastguard Workerstdin:
10098*7c356e86SAndroid Build Coastguard Worker	echo '#!'"$__progname" >foo
10099*7c356e86SAndroid Build Coastguard Worker	cat >>foo <<-'EOF'
10100*7c356e86SAndroid Build Coastguard Worker		print -n -- '220-blau.mirbsd.org ESMTP ready at Thu, 25 Jul 2013 15:57:57 GMT\r\n220->> Bitte keine Werbung einwerfen! <<\r\r\n220 Who do you wanna pretend to be today'
10101*7c356e86SAndroid Build Coastguard Worker		print \?
10102*7c356e86SAndroid Build Coastguard Worker	EOF
10103*7c356e86SAndroid Build Coastguard Worker	chmod +x foo
10104*7c356e86SAndroid Build Coastguard Worker	echo "[$(./foo)]"
10105*7c356e86SAndroid Build Coastguard Worker	./foo | while IFS= read -r line; do
10106*7c356e86SAndroid Build Coastguard Worker		print -r -- "{$line}"
10107*7c356e86SAndroid Build Coastguard Worker	done
10108*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10109*7c356e86SAndroid Build Coastguard Worker	[220-blau.mirbsd.org ESMTP ready at Thu, 25 Jul 2013 15:57:57 GMT
10110*7c356e86SAndroid Build Coastguard Worker	220->> Bitte keine Werbung einwerfen! <<
10111*7c356e86SAndroid Build Coastguard Worker
10112*7c356e86SAndroid Build Coastguard Worker	220 Who do you wanna pretend to be today?
10113*7c356e86SAndroid Build Coastguard Worker]
10114*7c356e86SAndroid Build Coastguard Worker	{220-blau.mirbsd.org ESMTP ready at Thu, 25 Jul 2013 15:57:57 GMT
10115*7c356e86SAndroid Build Coastguard Worker}
10116*7c356e86SAndroid Build Coastguard Worker	{220->> Bitte keine Werbung einwerfen! <<
10117*7c356e86SAndroid Build Coastguard Worker
10118*7c356e86SAndroid Build Coastguard Worker}
10119*7c356e86SAndroid Build Coastguard Worker	{220 Who do you wanna pretend to be today?
10120*7c356e86SAndroid Build Coastguard Worker}
10121*7c356e86SAndroid Build Coastguard Worker---
10122*7c356e86SAndroid Build Coastguard Workername: print-crlf
10123*7c356e86SAndroid Build Coastguard Workerdescription:
10124*7c356e86SAndroid Build Coastguard Worker	Check that CR+LF is shown and read as-is
10125*7c356e86SAndroid Build Coastguard Workercategory: shell:textmode-no
10126*7c356e86SAndroid Build Coastguard Workerstdin:
10127*7c356e86SAndroid Build Coastguard Worker	cat >foo <<-'EOF'
10128*7c356e86SAndroid Build Coastguard Worker		x='bar
10129*7c356e86SAndroid Build Coastguard Worker		' #
10130*7c356e86SAndroid Build Coastguard Worker		echo .${#x} #
10131*7c356e86SAndroid Build Coastguard Worker		if test x"$KSH_VERSION" = x""; then #
10132*7c356e86SAndroid Build Coastguard Worker			printf '<%s>' "$x" #
10133*7c356e86SAndroid Build Coastguard Worker		else #
10134*7c356e86SAndroid Build Coastguard Worker			print -nr -- "<$x>" #
10135*7c356e86SAndroid Build Coastguard Worker		fi #
10136*7c356e86SAndroid Build Coastguard Worker	EOF
10137*7c356e86SAndroid Build Coastguard Worker	echo "[$("$__progname" foo)]"
10138*7c356e86SAndroid Build Coastguard Worker	"$__progname" foo | while IFS= read -r line; do
10139*7c356e86SAndroid Build Coastguard Worker		print -r -- "{$line}"
10140*7c356e86SAndroid Build Coastguard Worker	done
10141*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10142*7c356e86SAndroid Build Coastguard Worker	[.5
10143*7c356e86SAndroid Build Coastguard Worker	<bar
10144*7c356e86SAndroid Build Coastguard Worker	>]
10145*7c356e86SAndroid Build Coastguard Worker	{.5}
10146*7c356e86SAndroid Build Coastguard Worker	{<bar
10147*7c356e86SAndroid Build Coastguard Worker}
10148*7c356e86SAndroid Build Coastguard Worker---
10149*7c356e86SAndroid Build Coastguard Workername: print-crlf-textmode
10150*7c356e86SAndroid Build Coastguard Workerdescription:
10151*7c356e86SAndroid Build Coastguard Worker	Check that CR+LF is treated as newline
10152*7c356e86SAndroid Build Coastguard Workercategory: shell:textmode-yes
10153*7c356e86SAndroid Build Coastguard Workerstdin:
10154*7c356e86SAndroid Build Coastguard Worker	cat >foo <<-'EOF'
10155*7c356e86SAndroid Build Coastguard Worker		x='bar
10156*7c356e86SAndroid Build Coastguard Worker		' #
10157*7c356e86SAndroid Build Coastguard Worker		echo .${#x} #
10158*7c356e86SAndroid Build Coastguard Worker		if test x"$KSH_VERSION" = x""; then #
10159*7c356e86SAndroid Build Coastguard Worker			printf '<%s>' "$x" #
10160*7c356e86SAndroid Build Coastguard Worker		else #
10161*7c356e86SAndroid Build Coastguard Worker			print -nr -- "<$x>" #
10162*7c356e86SAndroid Build Coastguard Worker		fi #
10163*7c356e86SAndroid Build Coastguard Worker	EOF
10164*7c356e86SAndroid Build Coastguard Worker	echo "[$("$__progname" foo)]"
10165*7c356e86SAndroid Build Coastguard Worker	"$__progname" foo | while IFS= read -r line; do
10166*7c356e86SAndroid Build Coastguard Worker		print -r -- "{$line}"
10167*7c356e86SAndroid Build Coastguard Worker	done
10168*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10169*7c356e86SAndroid Build Coastguard Worker	[.4
10170*7c356e86SAndroid Build Coastguard Worker	<bar
10171*7c356e86SAndroid Build Coastguard Worker	>]
10172*7c356e86SAndroid Build Coastguard Worker	{.4}
10173*7c356e86SAndroid Build Coastguard Worker	{<bar}
10174*7c356e86SAndroid Build Coastguard Worker---
10175*7c356e86SAndroid Build Coastguard Workername: print-lf
10176*7c356e86SAndroid Build Coastguard Workerdescription:
10177*7c356e86SAndroid Build Coastguard Worker	Check that LF-only is shown and read as-is
10178*7c356e86SAndroid Build Coastguard Workerstdin:
10179*7c356e86SAndroid Build Coastguard Worker	cat >foo <<-'EOF'
10180*7c356e86SAndroid Build Coastguard Worker		x='bar
10181*7c356e86SAndroid Build Coastguard Worker		' #
10182*7c356e86SAndroid Build Coastguard Worker		echo .${#x} #
10183*7c356e86SAndroid Build Coastguard Worker		if test x"$KSH_VERSION" = x""; then #
10184*7c356e86SAndroid Build Coastguard Worker			printf '<%s>' "$x" #
10185*7c356e86SAndroid Build Coastguard Worker		else #
10186*7c356e86SAndroid Build Coastguard Worker			print -nr -- "<$x>" #
10187*7c356e86SAndroid Build Coastguard Worker		fi #
10188*7c356e86SAndroid Build Coastguard Worker	EOF
10189*7c356e86SAndroid Build Coastguard Worker	echo "[$("$__progname" foo)]"
10190*7c356e86SAndroid Build Coastguard Worker	"$__progname" foo | while IFS= read -r line; do
10191*7c356e86SAndroid Build Coastguard Worker		print -r -- "{$line}"
10192*7c356e86SAndroid Build Coastguard Worker	done
10193*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10194*7c356e86SAndroid Build Coastguard Worker	[.4
10195*7c356e86SAndroid Build Coastguard Worker	<bar
10196*7c356e86SAndroid Build Coastguard Worker	>]
10197*7c356e86SAndroid Build Coastguard Worker	{.4}
10198*7c356e86SAndroid Build Coastguard Worker	{<bar}
10199*7c356e86SAndroid Build Coastguard Worker---
10200*7c356e86SAndroid Build Coastguard Workername: print-nul-chars
10201*7c356e86SAndroid Build Coastguard Workerdescription:
10202*7c356e86SAndroid Build Coastguard Worker	Check handling of NUL characters for print and COMSUB
10203*7c356e86SAndroid Build Coastguard Workerstdin:
10204*7c356e86SAndroid Build Coastguard Worker	x=$(print '<\0>')
10205*7c356e86SAndroid Build Coastguard Worker	print $(($(print '<\0>' | wc -c))) $(($(print "$x" | wc -c))) \
10206*7c356e86SAndroid Build Coastguard Worker	    ${#x} "$x" '<\0>'
10207*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern:
10208*7c356e86SAndroid Build Coastguard Worker	/^4 3 2 <> <\0>$/
10209*7c356e86SAndroid Build Coastguard Worker---
10210*7c356e86SAndroid Build Coastguard Workername: print-array
10211*7c356e86SAndroid Build Coastguard Workerdescription:
10212*7c356e86SAndroid Build Coastguard Worker	Check that print -A works as expected
10213*7c356e86SAndroid Build Coastguard Workerstdin:
10214*7c356e86SAndroid Build Coastguard Worker	print -An 0x20AC 0xC3 0xBC 8#101
10215*7c356e86SAndroid Build Coastguard Worker	set -U
10216*7c356e86SAndroid Build Coastguard Worker	print -A 0x20AC 0xC3 0xBC 8#102
10217*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10218*7c356e86SAndroid Build Coastguard Worker	�üA€Ã¼B
10219*7c356e86SAndroid Build Coastguard Worker---
10220*7c356e86SAndroid Build Coastguard Workername: print-escapes
10221*7c356e86SAndroid Build Coastguard Workerdescription:
10222*7c356e86SAndroid Build Coastguard Worker	Check backslash expansion by the print builtin
10223*7c356e86SAndroid Build Coastguard Workerstdin:
10224*7c356e86SAndroid Build Coastguard Worker	print '\ \!\"\#\$\%\&'\\\''\(\)\*\+\,\-\.\/\0\1\2\3\4\5\6\7\8' \
10225*7c356e86SAndroid Build Coastguard Worker	    '\9\:\;\<\=\>\?\@\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T' \
10226*7c356e86SAndroid Build Coastguard Worker	    '\U\V\W\X\Y\Z\[\\\]\^\_\`\a\b  \d\e\f\g\h\i\j\k\l\m\n\o\p' \
10227*7c356e86SAndroid Build Coastguard Worker	    '\q\r\s\t\u\v\w\x\y\z\{\|\}\~' '\u20acd' '\U20acd' '\x123' \
10228*7c356e86SAndroid Build Coastguard Worker	    '\0x' '\0123' '\01234' | {
10229*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3As
10230*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10231*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z5 hv=2147483647
10232*7c356e86SAndroid Build Coastguard Worker		typeset -i1 wc=0x0A
10233*7c356e86SAndroid Build Coastguard Worker		dasc=
10234*7c356e86SAndroid Build Coastguard Worker		nl=${wc#1#}
10235*7c356e86SAndroid Build Coastguard Worker		while IFS= read -r line; do
10236*7c356e86SAndroid Build Coastguard Worker			line=$line$nl
10237*7c356e86SAndroid Build Coastguard Worker			while [[ -n $line ]]; do
10238*7c356e86SAndroid Build Coastguard Worker				hv=1#${line::1}
10239*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 15) == 0 )); then
10240*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10241*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10242*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10243*7c356e86SAndroid Build Coastguard Worker				fi
10244*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10245*7c356e86SAndroid Build Coastguard Worker				if (( (hv < 32) || (hv > 126) )); then
10246*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc.
10247*7c356e86SAndroid Build Coastguard Worker				else
10248*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc${line::1}
10249*7c356e86SAndroid Build Coastguard Worker				fi
10250*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 15) == 7 )) && print -n -- '- '
10251*7c356e86SAndroid Build Coastguard Worker				line=${line:1}
10252*7c356e86SAndroid Build Coastguard Worker			done
10253*7c356e86SAndroid Build Coastguard Worker		done
10254*7c356e86SAndroid Build Coastguard Worker		while (( pos & 15 )); do
10255*7c356e86SAndroid Build Coastguard Worker			print -n '   '
10256*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 15) == 7 )) && print -n -- '- '
10257*7c356e86SAndroid Build Coastguard Worker		done
10258*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10259*7c356e86SAndroid Build Coastguard Worker	}
10260*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10261*7c356e86SAndroid Build Coastguard Worker	00000000  5C 20 5C 21 5C 22 5C 23 - 5C 24 5C 25 5C 26 5C 27  |\ \!\"\#\$\%\&\'|
10262*7c356e86SAndroid Build Coastguard Worker	00000010  5C 28 5C 29 5C 2A 5C 2B - 5C 2C 5C 2D 5C 2E 5C 2F  |\(\)\*\+\,\-\.\/|
10263*7c356e86SAndroid Build Coastguard Worker	00000020  5C 31 5C 32 5C 33 5C 34 - 5C 35 5C 36 5C 37 5C 38  |\1\2\3\4\5\6\7\8|
10264*7c356e86SAndroid Build Coastguard Worker	00000030  20 5C 39 5C 3A 5C 3B 5C - 3C 5C 3D 5C 3E 5C 3F 5C  | \9\:\;\<\=\>\?\|
10265*7c356e86SAndroid Build Coastguard Worker	00000040  40 5C 41 5C 42 5C 43 5C - 44 1B 5C 46 5C 47 5C 48  |@\A\B\C\D.\F\G\H|
10266*7c356e86SAndroid Build Coastguard Worker	00000050  5C 49 5C 4A 5C 4B 5C 4C - 5C 4D 5C 4E 5C 4F 5C 50  |\I\J\K\L\M\N\O\P|
10267*7c356e86SAndroid Build Coastguard Worker	00000060  5C 51 5C 52 5C 53 5C 54 - 20 5C 55 5C 56 5C 57 5C  |\Q\R\S\T \U\V\W\|
10268*7c356e86SAndroid Build Coastguard Worker	00000070  58 5C 59 5C 5A 5C 5B 5C - 5C 5D 5C 5E 5C 5F 5C 60  |X\Y\Z\[\\]\^\_\`|
10269*7c356e86SAndroid Build Coastguard Worker	00000080  07 08 20 20 5C 64 1B 0C - 5C 67 5C 68 5C 69 5C 6A  |..  \d..\g\h\i\j|
10270*7c356e86SAndroid Build Coastguard Worker	00000090  5C 6B 5C 6C 5C 6D 0A 5C - 6F 5C 70 20 5C 71 0D 5C  |\k\l\m.\o\p \q.\|
10271*7c356e86SAndroid Build Coastguard Worker	000000A0  73 09 5C 75 0B 5C 77 5C - 78 5C 79 5C 7A 5C 7B 5C  |s.\u.\w\x\y\z\{\|
10272*7c356e86SAndroid Build Coastguard Worker	000000B0  7C 5C 7D 5C 7E 20 E2 82 - AC 64 20 EF BF BD 20 12  ||\}\~ ...d ... .|
10273*7c356e86SAndroid Build Coastguard Worker	000000C0  33 20 78 20 53 20 53 34 - 0A                       |3 x S S4.|
10274*7c356e86SAndroid Build Coastguard Worker---
10275*7c356e86SAndroid Build Coastguard Workername: dollar-doublequoted-strings
10276*7c356e86SAndroid Build Coastguard Workerdescription:
10277*7c356e86SAndroid Build Coastguard Worker	Check that a $ preceding "…" is ignored
10278*7c356e86SAndroid Build Coastguard Workerstdin:
10279*7c356e86SAndroid Build Coastguard Worker	echo $"Localise me!"
10280*7c356e86SAndroid Build Coastguard Worker	cat <<<$"Me too!"
10281*7c356e86SAndroid Build Coastguard Worker	V=X
10282*7c356e86SAndroid Build Coastguard Worker	aol=aol
10283*7c356e86SAndroid Build Coastguard Worker	cat <<-$"aol"
10284*7c356e86SAndroid Build Coastguard Worker		I do not take a $V for a V!
10285*7c356e86SAndroid Build Coastguard Worker	aol
10286*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10287*7c356e86SAndroid Build Coastguard Worker	Localise me!
10288*7c356e86SAndroid Build Coastguard Worker	Me too!
10289*7c356e86SAndroid Build Coastguard Worker	I do not take a $V for a V!
10290*7c356e86SAndroid Build Coastguard Worker---
10291*7c356e86SAndroid Build Coastguard Workername: dollar-quoted-strings
10292*7c356e86SAndroid Build Coastguard Workerdescription:
10293*7c356e86SAndroid Build Coastguard Worker	Check backslash expansion by $'…' strings
10294*7c356e86SAndroid Build Coastguard Workerstdin:
10295*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nfor x in "$@"; do print -r -- "$x"; done' >pfn
10296*7c356e86SAndroid Build Coastguard Worker	chmod +x pfn
10297*7c356e86SAndroid Build Coastguard Worker	./pfn $'\ \!\"\#\$\%\&\'\(\)\*\+\,\-\.\/ \1\2\3\4\5\6' \
10298*7c356e86SAndroid Build Coastguard Worker	    $'a\0b' $'a\01b' $'\7\8\9\:\;\<\=\>\?\@\A\B\C\D\E\F\G\H\I' \
10299*7c356e86SAndroid Build Coastguard Worker	    $'\J\K\L\M\N\O\P\Q\R\S\T\U1\V\W\X\Y\Z\[\\\]\^\_\`\a\b\d\e' \
10300*7c356e86SAndroid Build Coastguard Worker	    $'\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u1\v\w\x1\y\z\{\|\}\~ $x' \
10301*7c356e86SAndroid Build Coastguard Worker	    $'\u20acd' $'\U20acd' $'\x123' $'fn\x0rd' $'\0234' $'\234' \
10302*7c356e86SAndroid Build Coastguard Worker	    $'\2345' $'\ca' $'\c!' $'\c?' $'\c…' $'a\
10303*7c356e86SAndroid Build Coastguard Worker	b' | {
10304*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3As
10305*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10306*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z5 hv=2147483647
10307*7c356e86SAndroid Build Coastguard Worker		typeset -i1 wc=0x0A
10308*7c356e86SAndroid Build Coastguard Worker		dasc=
10309*7c356e86SAndroid Build Coastguard Worker		nl=${wc#1#}
10310*7c356e86SAndroid Build Coastguard Worker		while IFS= read -r line; do
10311*7c356e86SAndroid Build Coastguard Worker			line=$line$nl
10312*7c356e86SAndroid Build Coastguard Worker			while [[ -n $line ]]; do
10313*7c356e86SAndroid Build Coastguard Worker				hv=1#${line::1}
10314*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 15) == 0 )); then
10315*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10316*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10317*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10318*7c356e86SAndroid Build Coastguard Worker				fi
10319*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10320*7c356e86SAndroid Build Coastguard Worker				if (( (hv < 32) || (hv > 126) )); then
10321*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc.
10322*7c356e86SAndroid Build Coastguard Worker				else
10323*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc${line::1}
10324*7c356e86SAndroid Build Coastguard Worker				fi
10325*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 15) == 7 )) && print -n -- '- '
10326*7c356e86SAndroid Build Coastguard Worker				line=${line:1}
10327*7c356e86SAndroid Build Coastguard Worker			done
10328*7c356e86SAndroid Build Coastguard Worker		done
10329*7c356e86SAndroid Build Coastguard Worker		while (( pos & 15 )); do
10330*7c356e86SAndroid Build Coastguard Worker			print -n '   '
10331*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 15) == 7 )) && print -n -- '- '
10332*7c356e86SAndroid Build Coastguard Worker		done
10333*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10334*7c356e86SAndroid Build Coastguard Worker	}
10335*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10336*7c356e86SAndroid Build Coastguard Worker	00000000  20 21 22 23 24 25 26 27 - 28 29 2A 2B 2C 2D 2E 2F  | !"#$%&'()*+,-./|
10337*7c356e86SAndroid Build Coastguard Worker	00000010  20 01 02 03 04 05 06 0A - 61 0A 61 01 62 0A 07 38  | .......a.a.b..8|
10338*7c356e86SAndroid Build Coastguard Worker	00000020  39 3A 3B 3C 3D 3E 3F 40 - 41 42 43 44 1B 46 47 48  |9:;<=>?@ABCD.FGH|
10339*7c356e86SAndroid Build Coastguard Worker	00000030  49 0A 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 01 56 57  |I.JKLMNOPQRST.VW|
10340*7c356e86SAndroid Build Coastguard Worker	00000040  58 59 5A 5B 5C 5D 5E 5F - 60 07 08 64 1B 0A 0C 67  |XYZ[\]^_`..d...g|
10341*7c356e86SAndroid Build Coastguard Worker	00000050  68 69 6A 6B 6C 6D 0A 6F - 70 71 0D 73 09 01 0B 77  |hijklm.opq.s...w|
10342*7c356e86SAndroid Build Coastguard Worker	00000060  01 79 7A 7B 7C 7D 7E 20 - 24 78 0A E2 82 AC 64 0A  |.yz{|}~ $x....d.|
10343*7c356e86SAndroid Build Coastguard Worker	00000070  EF BF BD 0A C4 A3 0A 66 - 6E 0A 13 34 0A 9C 0A 9C  |.......fn..4....|
10344*7c356e86SAndroid Build Coastguard Worker	00000080  35 0A 01 0A 01 0A 7F 0A - 82 80 A6 0A 61 0A 62 0A  |5...........a.b.|
10345*7c356e86SAndroid Build Coastguard Worker---
10346*7c356e86SAndroid Build Coastguard Workername: dollar-quotes-in-heredocs-strings
10347*7c356e86SAndroid Build Coastguard Workerdescription:
10348*7c356e86SAndroid Build Coastguard Worker	They are, however, not parsed in here documents, here strings
10349*7c356e86SAndroid Build Coastguard Worker	(outside of string delimiters) or regular strings, but in
10350*7c356e86SAndroid Build Coastguard Worker	parameter substitutions.
10351*7c356e86SAndroid Build Coastguard Workerstdin:
10352*7c356e86SAndroid Build Coastguard Worker	cat <<EOF
10353*7c356e86SAndroid Build Coastguard Worker		dollar = strchr(s, '$');	/* ' */
10354*7c356e86SAndroid Build Coastguard Worker		foo " bar \" baz
10355*7c356e86SAndroid Build Coastguard Worker	EOF
10356*7c356e86SAndroid Build Coastguard Worker	cat <<$'a\tb'
10357*7c356e86SAndroid Build Coastguard Worker	a\tb
10358*7c356e86SAndroid Build Coastguard Worker	a	b
10359*7c356e86SAndroid Build Coastguard Worker	cat <<<"dollar = strchr(s, '$');	/* ' */"
10360*7c356e86SAndroid Build Coastguard Worker	cat <<<'dollar = strchr(s, '\''$'\'');	/* '\'' */'
10361*7c356e86SAndroid Build Coastguard Worker	x="dollar = strchr(s, '$');	/* ' */"
10362*7c356e86SAndroid Build Coastguard Worker	cat <<<"$x"
10363*7c356e86SAndroid Build Coastguard Worker	cat <<<$'a\E[0m\tb'
10364*7c356e86SAndroid Build Coastguard Worker	unset nl; print -r -- "x${nl:=$'\n'}y"
10365*7c356e86SAndroid Build Coastguard Worker	echo "1 foo\"bar"
10366*7c356e86SAndroid Build Coastguard Worker	# cf & HEREDOC
10367*7c356e86SAndroid Build Coastguard Worker	cat <<EOF
10368*7c356e86SAndroid Build Coastguard Worker	2 foo\"bar
10369*7c356e86SAndroid Build Coastguard Worker	EOF
10370*7c356e86SAndroid Build Coastguard Worker	# probably never reached for here strings?
10371*7c356e86SAndroid Build Coastguard Worker	cat <<<"3 foo\"bar"
10372*7c356e86SAndroid Build Coastguard Worker	cat <<<"4 foo\\\"bar"
10373*7c356e86SAndroid Build Coastguard Worker	cat <<<'5 foo\"bar'
10374*7c356e86SAndroid Build Coastguard Worker	# old scripts use this (e.g. ncurses)
10375*7c356e86SAndroid Build Coastguard Worker	echo "^$"
10376*7c356e86SAndroid Build Coastguard Worker	# make sure this works, outside of quotes
10377*7c356e86SAndroid Build Coastguard Worker	cat <<<'7'$'\t''.'
10378*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10379*7c356e86SAndroid Build Coastguard Worker		dollar = strchr(s, '$');	/* ' */
10380*7c356e86SAndroid Build Coastguard Worker		foo " bar \" baz
10381*7c356e86SAndroid Build Coastguard Worker	a\tb
10382*7c356e86SAndroid Build Coastguard Worker	dollar = strchr(s, '$');	/* ' */
10383*7c356e86SAndroid Build Coastguard Worker	dollar = strchr(s, '$');	/* ' */
10384*7c356e86SAndroid Build Coastguard Worker	dollar = strchr(s, '$');	/* ' */
10385*7c356e86SAndroid Build Coastguard Worker	a	b
10386*7c356e86SAndroid Build Coastguard Worker	x
10387*7c356e86SAndroid Build Coastguard Worker	y
10388*7c356e86SAndroid Build Coastguard Worker	1 foo"bar
10389*7c356e86SAndroid Build Coastguard Worker	2 foo\"bar
10390*7c356e86SAndroid Build Coastguard Worker	3 foo"bar
10391*7c356e86SAndroid Build Coastguard Worker	4 foo\"bar
10392*7c356e86SAndroid Build Coastguard Worker	5 foo\"bar
10393*7c356e86SAndroid Build Coastguard Worker	^$
10394*7c356e86SAndroid Build Coastguard Worker	7	.
10395*7c356e86SAndroid Build Coastguard Worker---
10396*7c356e86SAndroid Build Coastguard Workername: dot-needs-argument
10397*7c356e86SAndroid Build Coastguard Workerdescription:
10398*7c356e86SAndroid Build Coastguard Worker	check Debian #415167 solution: '.' without arguments should fail
10399*7c356e86SAndroid Build Coastguard Workerstdin:
10400*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c .
10401*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c source
10402*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10403*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10404*7c356e86SAndroid Build Coastguard Worker	/\.: missing argument.*\n.*source: missing argument/
10405*7c356e86SAndroid Build Coastguard Worker---
10406*7c356e86SAndroid Build Coastguard Workername: dot-errorlevel
10407*7c356e86SAndroid Build Coastguard Workerdescription:
10408*7c356e86SAndroid Build Coastguard Worker	Ensure dot resets $?
10409*7c356e86SAndroid Build Coastguard Workerstdin:
10410*7c356e86SAndroid Build Coastguard Worker	:>dotfile
10411*7c356e86SAndroid Build Coastguard Worker	(exit 42)
10412*7c356e86SAndroid Build Coastguard Worker	. ./dotfile
10413*7c356e86SAndroid Build Coastguard Worker	echo 1 $? .
10414*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10415*7c356e86SAndroid Build Coastguard Worker	1 0 .
10416*7c356e86SAndroid Build Coastguard Worker---
10417*7c356e86SAndroid Build Coastguard Workername: alias-function-no-conflict
10418*7c356e86SAndroid Build Coastguard Workerdescription:
10419*7c356e86SAndroid Build Coastguard Worker	make aliases not conflict with function definitions
10420*7c356e86SAndroid Build Coastguard Workerstdin:
10421*7c356e86SAndroid Build Coastguard Worker	# POSIX function can be defined, but alias overrides it
10422*7c356e86SAndroid Build Coastguard Worker	alias foo='echo bar'
10423*7c356e86SAndroid Build Coastguard Worker	foo
10424*7c356e86SAndroid Build Coastguard Worker	foo() {
10425*7c356e86SAndroid Build Coastguard Worker		echo baz
10426*7c356e86SAndroid Build Coastguard Worker	}
10427*7c356e86SAndroid Build Coastguard Worker	foo
10428*7c356e86SAndroid Build Coastguard Worker	unset -f foo
10429*7c356e86SAndroid Build Coastguard Worker	foo 2>/dev/null || echo rab
10430*7c356e86SAndroid Build Coastguard Worker	# alias overrides ksh function
10431*7c356e86SAndroid Build Coastguard Worker	alias korn='echo bar'
10432*7c356e86SAndroid Build Coastguard Worker	korn
10433*7c356e86SAndroid Build Coastguard Worker	function korn {
10434*7c356e86SAndroid Build Coastguard Worker		echo baz
10435*7c356e86SAndroid Build Coastguard Worker	}
10436*7c356e86SAndroid Build Coastguard Worker	korn
10437*7c356e86SAndroid Build Coastguard Worker	# alias temporarily overrides POSIX function
10438*7c356e86SAndroid Build Coastguard Worker	bla() {
10439*7c356e86SAndroid Build Coastguard Worker		echo bfn
10440*7c356e86SAndroid Build Coastguard Worker	}
10441*7c356e86SAndroid Build Coastguard Worker	bla
10442*7c356e86SAndroid Build Coastguard Worker	alias bla='echo bal'
10443*7c356e86SAndroid Build Coastguard Worker	bla
10444*7c356e86SAndroid Build Coastguard Worker	unalias bla
10445*7c356e86SAndroid Build Coastguard Worker	bla
10446*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10447*7c356e86SAndroid Build Coastguard Worker	bar
10448*7c356e86SAndroid Build Coastguard Worker	bar
10449*7c356e86SAndroid Build Coastguard Worker	bar
10450*7c356e86SAndroid Build Coastguard Worker	bar
10451*7c356e86SAndroid Build Coastguard Worker	bar
10452*7c356e86SAndroid Build Coastguard Worker	bfn
10453*7c356e86SAndroid Build Coastguard Worker	bal
10454*7c356e86SAndroid Build Coastguard Worker	bfn
10455*7c356e86SAndroid Build Coastguard Worker---
10456*7c356e86SAndroid Build Coastguard Workername: bash-function-parens
10457*7c356e86SAndroid Build Coastguard Workerdescription:
10458*7c356e86SAndroid Build Coastguard Worker	ensure the keyword function is ignored when preceding
10459*7c356e86SAndroid Build Coastguard Worker	POSIX style function declarations (bashism)
10460*7c356e86SAndroid Build Coastguard Workerstdin:
10461*7c356e86SAndroid Build Coastguard Worker	mk() {
10462*7c356e86SAndroid Build Coastguard Worker		echo '#!'"$__progname"
10463*7c356e86SAndroid Build Coastguard Worker		echo "$1 {"
10464*7c356e86SAndroid Build Coastguard Worker		echo '	echo "bar='\''$0'\'\"
10465*7c356e86SAndroid Build Coastguard Worker		echo '}'
10466*7c356e86SAndroid Build Coastguard Worker		print -r -- "${2:-foo}"
10467*7c356e86SAndroid Build Coastguard Worker	}
10468*7c356e86SAndroid Build Coastguard Worker	mk 'function foo' >f-korn
10469*7c356e86SAndroid Build Coastguard Worker	mk 'foo ()' >f-dash
10470*7c356e86SAndroid Build Coastguard Worker	mk 'function foo ()' >f-bash
10471*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nprint -r -- "${0%/f-argh}"' >f-argh
10472*7c356e86SAndroid Build Coastguard Worker	chmod +x f-*
10473*7c356e86SAndroid Build Coastguard Worker	u=$(./f-argh)
10474*7c356e86SAndroid Build Coastguard Worker	x="korn: $(./f-korn)"; echo "${x/@("$u")/.}"
10475*7c356e86SAndroid Build Coastguard Worker	x="dash: $(./f-dash)"; echo "${x/@("$u")/.}"
10476*7c356e86SAndroid Build Coastguard Worker	x="bash: $(./f-bash)"; echo "${x/@("$u")/.}"
10477*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10478*7c356e86SAndroid Build Coastguard Worker	korn: bar='foo'
10479*7c356e86SAndroid Build Coastguard Worker	dash: bar='./f-dash'
10480*7c356e86SAndroid Build Coastguard Worker	bash: bar='./f-bash'
10481*7c356e86SAndroid Build Coastguard Worker---
10482*7c356e86SAndroid Build Coastguard Workername: integer-base-one-1
10483*7c356e86SAndroid Build Coastguard Workerdescription:
10484*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 works
10485*7c356e86SAndroid Build Coastguard Workerstdin:
10486*7c356e86SAndroid Build Coastguard Worker	set -U
10487*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 i0=1#� i1=1#€
10488*7c356e86SAndroid Build Coastguard Worker	typeset -i1 o0a=64
10489*7c356e86SAndroid Build Coastguard Worker	typeset -i1 o1a=0x263A
10490*7c356e86SAndroid Build Coastguard Worker	typeset -Uui1 o0b=0x7E
10491*7c356e86SAndroid Build Coastguard Worker	typeset -Uui1 o1b=0xFDD0
10492*7c356e86SAndroid Build Coastguard Worker	integer px=0xCAFE 'p0=1# ' p1=1#… pl=1#f
10493*7c356e86SAndroid Build Coastguard Worker	echo "in <$i0> <$i1>"
10494*7c356e86SAndroid Build Coastguard Worker	echo "out <${o0a#1#}|${o0b#1#}> <${o1a#1#}|${o1b#1#}>"
10495*7c356e86SAndroid Build Coastguard Worker	typeset -Uui1 i0 i1
10496*7c356e86SAndroid Build Coastguard Worker	echo "pass <$px> <$p0> <$p1> <$pl> <${i0#1#}|${i1#1#}>"
10497*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 tv1=1#~ tv2=1# tv3=1#� tv4=1#� tv5=1#� tv6=1#� tv7=1#  tv8=1#€
10498*7c356e86SAndroid Build Coastguard Worker	echo "specX <${tv1#16#}> <${tv2#16#}> <${tv3#16#}> <${tv4#16#}> <${tv5#16#}> <${tv6#16#}> <${tv7#16#}> <${tv8#16#}>"
10499*7c356e86SAndroid Build Coastguard Worker	typeset -i1 tv1 tv2 tv3 tv4 tv5 tv6 tv7 tv8
10500*7c356e86SAndroid Build Coastguard Worker	echo "specW <${tv1#1#}> <${tv2#1#}> <${tv3#1#}> <${tv4#1#}> <${tv5#1#}> <${tv6#1#}> <${tv7#1#}> <${tv8#1#}>"
10501*7c356e86SAndroid Build Coastguard Worker	typeset -i1 xs1=0xEF7F xs2=0xEF80 xs3=0xFDD0
10502*7c356e86SAndroid Build Coastguard Worker	echo "specU <${xs1#1#}> <${xs2#1#}> <${xs3#1#}>"
10503*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10504*7c356e86SAndroid Build Coastguard Worker	in <16#EFEF> <16#20AC>
10505*7c356e86SAndroid Build Coastguard Worker	out <@|~> <☺|﷐>
10506*7c356e86SAndroid Build Coastguard Worker	pass <16#cafe> <1# > <1#…> <1#f> <�|€>
10507*7c356e86SAndroid Build Coastguard Worker	specX <7E> <7F> <EF80> <EF81> <EFC0> <EFC1> <A0> <80>
10508*7c356e86SAndroid Build Coastguard Worker	specW <~> <> <�> <�> <�> <�> < > <€>
10509*7c356e86SAndroid Build Coastguard Worker	specU <> <�> <﷐>
10510*7c356e86SAndroid Build Coastguard Worker---
10511*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2a
10512*7c356e86SAndroid Build Coastguard Workerdescription:
10513*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at correct characters
10514*7c356e86SAndroid Build Coastguard Workerstdin:
10515*7c356e86SAndroid Build Coastguard Worker	set -U
10516*7c356e86SAndroid Build Coastguard Worker	integer x=1#foo
10517*7c356e86SAndroid Build Coastguard Worker	echo /$x/
10518*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10519*7c356e86SAndroid Build Coastguard Worker	/1#foo: unexpected 'oo'/
10520*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10521*7c356e86SAndroid Build Coastguard Worker---
10522*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2b
10523*7c356e86SAndroid Build Coastguard Workerdescription:
10524*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at correct characters
10525*7c356e86SAndroid Build Coastguard Workerstdin:
10526*7c356e86SAndroid Build Coastguard Worker	set -U
10527*7c356e86SAndroid Build Coastguard Worker	integer x=1#��
10528*7c356e86SAndroid Build Coastguard Worker	echo /$x/
10529*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10530*7c356e86SAndroid Build Coastguard Worker	/1#��: unexpected '�'/
10531*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10532*7c356e86SAndroid Build Coastguard Worker---
10533*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2c1
10534*7c356e86SAndroid Build Coastguard Workerdescription:
10535*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at correct characters
10536*7c356e86SAndroid Build Coastguard Workerstdin:
10537*7c356e86SAndroid Build Coastguard Worker	set -U
10538*7c356e86SAndroid Build Coastguard Worker	integer x=1#…
10539*7c356e86SAndroid Build Coastguard Worker	echo /$x/
10540*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10541*7c356e86SAndroid Build Coastguard Worker	/1#…/
10542*7c356e86SAndroid Build Coastguard Worker---
10543*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2c2
10544*7c356e86SAndroid Build Coastguard Workerdescription:
10545*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at correct characters
10546*7c356e86SAndroid Build Coastguard Workerstdin:
10547*7c356e86SAndroid Build Coastguard Worker	set +U
10548*7c356e86SAndroid Build Coastguard Worker	integer x=1#…
10549*7c356e86SAndroid Build Coastguard Worker	echo /$x/
10550*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10551*7c356e86SAndroid Build Coastguard Worker	/1#…: unexpected '�'/
10552*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10553*7c356e86SAndroid Build Coastguard Worker---
10554*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d1
10555*7c356e86SAndroid Build Coastguard Workerdescription:
10556*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 handles octets okay
10557*7c356e86SAndroid Build Coastguard Workerstdin:
10558*7c356e86SAndroid Build Coastguard Worker	set -U
10559*7c356e86SAndroid Build Coastguard Worker	typeset -i16 x=1#�
10560*7c356e86SAndroid Build Coastguard Worker	echo /$x/	# invalid utf-8
10561*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10562*7c356e86SAndroid Build Coastguard Worker	/16#efff/
10563*7c356e86SAndroid Build Coastguard Worker---
10564*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d2
10565*7c356e86SAndroid Build Coastguard Workerdescription:
10566*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 handles octets
10567*7c356e86SAndroid Build Coastguard Workerstdin:
10568*7c356e86SAndroid Build Coastguard Worker	set -U
10569*7c356e86SAndroid Build Coastguard Worker	typeset -i16 x=1#�
10570*7c356e86SAndroid Build Coastguard Worker	echo /$x/	# invalid 2-byte
10571*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10572*7c356e86SAndroid Build Coastguard Worker	/16#efc2/
10573*7c356e86SAndroid Build Coastguard Worker---
10574*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d3
10575*7c356e86SAndroid Build Coastguard Workerdescription:
10576*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 handles octets
10577*7c356e86SAndroid Build Coastguard Workerstdin:
10578*7c356e86SAndroid Build Coastguard Worker	set -U
10579*7c356e86SAndroid Build Coastguard Worker	typeset -i16 x=1#�
10580*7c356e86SAndroid Build Coastguard Worker	echo /$x/	# invalid 2-byte
10581*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10582*7c356e86SAndroid Build Coastguard Worker	/16#efef/
10583*7c356e86SAndroid Build Coastguard Worker---
10584*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d4
10585*7c356e86SAndroid Build Coastguard Workerdescription:
10586*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at invalid input
10587*7c356e86SAndroid Build Coastguard Workerstdin:
10588*7c356e86SAndroid Build Coastguard Worker	set -U
10589*7c356e86SAndroid Build Coastguard Worker	typeset -i16 x=1#��
10590*7c356e86SAndroid Build Coastguard Worker	echo /$x/	# invalid 3-byte
10591*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10592*7c356e86SAndroid Build Coastguard Worker	/1#��: unexpected '�'/
10593*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10594*7c356e86SAndroid Build Coastguard Worker---
10595*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d5
10596*7c356e86SAndroid Build Coastguard Workerdescription:
10597*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at invalid input
10598*7c356e86SAndroid Build Coastguard Workerstdin:
10599*7c356e86SAndroid Build Coastguard Worker	set -U
10600*7c356e86SAndroid Build Coastguard Worker	typeset -i16 x=1#��
10601*7c356e86SAndroid Build Coastguard Worker	echo /$x/	# non-minimalistic
10602*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10603*7c356e86SAndroid Build Coastguard Worker	/1#��: unexpected '�'/
10604*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10605*7c356e86SAndroid Build Coastguard Worker---
10606*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d6
10607*7c356e86SAndroid Build Coastguard Workerdescription:
10608*7c356e86SAndroid Build Coastguard Worker	check if the use of fake integer base 1 stops at invalid input
10609*7c356e86SAndroid Build Coastguard Workerstdin:
10610*7c356e86SAndroid Build Coastguard Worker	set -U
10611*7c356e86SAndroid Build Coastguard Worker	typeset -i16 x=1#���
10612*7c356e86SAndroid Build Coastguard Worker	echo /$x/	# non-minimalistic
10613*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
10614*7c356e86SAndroid Build Coastguard Worker	/1#���: unexpected '�'/
10615*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
10616*7c356e86SAndroid Build Coastguard Worker---
10617*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3As
10618*7c356e86SAndroid Build Coastguard Workerdescription:
10619*7c356e86SAndroid Build Coastguard Worker	some sample code for hexdumping
10620*7c356e86SAndroid Build Coastguard Worker	not NUL safe; input lines must be NL terminated
10621*7c356e86SAndroid Build Coastguard Workerstdin:
10622*7c356e86SAndroid Build Coastguard Worker	{
10623*7c356e86SAndroid Build Coastguard Worker		print 'Hello, World!\\\nこんにちは!'
10624*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 i=0x100
10625*7c356e86SAndroid Build Coastguard Worker		# change that to 0xFF once we can handle embedded
10626*7c356e86SAndroid Build Coastguard Worker		# NUL characters in strings / here documents
10627*7c356e86SAndroid Build Coastguard Worker		while (( i++ < 0x1FF )); do
10628*7c356e86SAndroid Build Coastguard Worker			print -n "\x${i#16#1}"
10629*7c356e86SAndroid Build Coastguard Worker		done
10630*7c356e86SAndroid Build Coastguard Worker		print '\0z'
10631*7c356e86SAndroid Build Coastguard Worker	} | {
10632*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3As
10633*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10634*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z5 hv=2147483647
10635*7c356e86SAndroid Build Coastguard Worker		typeset -i1 wc=0x0A
10636*7c356e86SAndroid Build Coastguard Worker		dasc=
10637*7c356e86SAndroid Build Coastguard Worker		nl=${wc#1#}
10638*7c356e86SAndroid Build Coastguard Worker		while IFS= read -r line; do
10639*7c356e86SAndroid Build Coastguard Worker			line=$line$nl
10640*7c356e86SAndroid Build Coastguard Worker			while [[ -n $line ]]; do
10641*7c356e86SAndroid Build Coastguard Worker				hv=1#${line::1}
10642*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 15) == 0 )); then
10643*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10644*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10645*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10646*7c356e86SAndroid Build Coastguard Worker				fi
10647*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10648*7c356e86SAndroid Build Coastguard Worker				if (( (hv < 32) || (hv > 126) )); then
10649*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc.
10650*7c356e86SAndroid Build Coastguard Worker				else
10651*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc${line::1}
10652*7c356e86SAndroid Build Coastguard Worker				fi
10653*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 15) == 7 )) && print -n -- '- '
10654*7c356e86SAndroid Build Coastguard Worker				line=${line:1}
10655*7c356e86SAndroid Build Coastguard Worker			done
10656*7c356e86SAndroid Build Coastguard Worker		done
10657*7c356e86SAndroid Build Coastguard Worker		while (( pos & 15 )); do
10658*7c356e86SAndroid Build Coastguard Worker			print -n '   '
10659*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 15) == 7 )) && print -n -- '- '
10660*7c356e86SAndroid Build Coastguard Worker		done
10661*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10662*7c356e86SAndroid Build Coastguard Worker	}
10663*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10664*7c356e86SAndroid Build Coastguard Worker	00000000  48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0A E3  |Hello, World!\..|
10665*7c356e86SAndroid Build Coastguard Worker	00000010  81 93 E3 82 93 E3 81 AB - E3 81 A1 E3 81 AF EF BC  |................|
10666*7c356e86SAndroid Build Coastguard Worker	00000020  81 0A 01 02 03 04 05 06 - 07 08 09 0A 0B 0C 0D 0E  |................|
10667*7c356e86SAndroid Build Coastguard Worker	00000030  0F 10 11 12 13 14 15 16 - 17 18 19 1A 1B 1C 1D 1E  |................|
10668*7c356e86SAndroid Build Coastguard Worker	00000040  1F 20 21 22 23 24 25 26 - 27 28 29 2A 2B 2C 2D 2E  |. !"#$%&'()*+,-.|
10669*7c356e86SAndroid Build Coastguard Worker	00000050  2F 30 31 32 33 34 35 36 - 37 38 39 3A 3B 3C 3D 3E  |/0123456789:;<=>|
10670*7c356e86SAndroid Build Coastguard Worker	00000060  3F 40 41 42 43 44 45 46 - 47 48 49 4A 4B 4C 4D 4E  |?@ABCDEFGHIJKLMN|
10671*7c356e86SAndroid Build Coastguard Worker	00000070  4F 50 51 52 53 54 55 56 - 57 58 59 5A 5B 5C 5D 5E  |OPQRSTUVWXYZ[\]^|
10672*7c356e86SAndroid Build Coastguard Worker	00000080  5F 60 61 62 63 64 65 66 - 67 68 69 6A 6B 6C 6D 6E  |_`abcdefghijklmn|
10673*7c356e86SAndroid Build Coastguard Worker	00000090  6F 70 71 72 73 74 75 76 - 77 78 79 7A 7B 7C 7D 7E  |opqrstuvwxyz{|}~|
10674*7c356e86SAndroid Build Coastguard Worker	000000A0  7F 80 81 82 83 84 85 86 - 87 88 89 8A 8B 8C 8D 8E  |................|
10675*7c356e86SAndroid Build Coastguard Worker	000000B0  8F 90 91 92 93 94 95 96 - 97 98 99 9A 9B 9C 9D 9E  |................|
10676*7c356e86SAndroid Build Coastguard Worker	000000C0  9F A0 A1 A2 A3 A4 A5 A6 - A7 A8 A9 AA AB AC AD AE  |................|
10677*7c356e86SAndroid Build Coastguard Worker	000000D0  AF B0 B1 B2 B3 B4 B5 B6 - B7 B8 B9 BA BB BC BD BE  |................|
10678*7c356e86SAndroid Build Coastguard Worker	000000E0  BF C0 C1 C2 C3 C4 C5 C6 - C7 C8 C9 CA CB CC CD CE  |................|
10679*7c356e86SAndroid Build Coastguard Worker	000000F0  CF D0 D1 D2 D3 D4 D5 D6 - D7 D8 D9 DA DB DC DD DE  |................|
10680*7c356e86SAndroid Build Coastguard Worker	00000100  DF E0 E1 E2 E3 E4 E5 E6 - E7 E8 E9 EA EB EC ED EE  |................|
10681*7c356e86SAndroid Build Coastguard Worker	00000110  EF F0 F1 F2 F3 F4 F5 F6 - F7 F8 F9 FA FB FC FD FE  |................|
10682*7c356e86SAndroid Build Coastguard Worker	00000120  FF 7A 0A                -                          |.z.|
10683*7c356e86SAndroid Build Coastguard Worker---
10684*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3Ws
10685*7c356e86SAndroid Build Coastguard Workerdescription:
10686*7c356e86SAndroid Build Coastguard Worker	some sample code for hexdumping UCS-2
10687*7c356e86SAndroid Build Coastguard Worker	not NUL safe; input lines must be NL terminated
10688*7c356e86SAndroid Build Coastguard Workerstdin:
10689*7c356e86SAndroid Build Coastguard Worker	set -U
10690*7c356e86SAndroid Build Coastguard Worker	{
10691*7c356e86SAndroid Build Coastguard Worker		print 'Hello, World!\\\nこんにちは!'
10692*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 i=0x100
10693*7c356e86SAndroid Build Coastguard Worker		# change that to 0xFF once we can handle embedded
10694*7c356e86SAndroid Build Coastguard Worker		# NUL characters in strings / here documents
10695*7c356e86SAndroid Build Coastguard Worker		while (( i++ < 0x1FF )); do
10696*7c356e86SAndroid Build Coastguard Worker			print -n "\u${i#16#1}"
10697*7c356e86SAndroid Build Coastguard Worker		done
10698*7c356e86SAndroid Build Coastguard Worker		print
10699*7c356e86SAndroid Build Coastguard Worker		print \\xff		# invalid utf-8
10700*7c356e86SAndroid Build Coastguard Worker		print \\xc2		# invalid 2-byte
10701*7c356e86SAndroid Build Coastguard Worker		print \\xef\\xbf\\xc0	# invalid 3-byte
10702*7c356e86SAndroid Build Coastguard Worker		print \\xc0\\x80	# non-minimalistic
10703*7c356e86SAndroid Build Coastguard Worker		print \\xe0\\x80\\x80	# non-minimalistic
10704*7c356e86SAndroid Build Coastguard Worker		print '�￾￿'	# end of range
10705*7c356e86SAndroid Build Coastguard Worker		print '\0z'		# embedded NUL
10706*7c356e86SAndroid Build Coastguard Worker	} | {
10707*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3Ws
10708*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10709*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z7 hv
10710*7c356e86SAndroid Build Coastguard Worker		typeset -i1 wc=0x0A
10711*7c356e86SAndroid Build Coastguard Worker		typeset -i lpos
10712*7c356e86SAndroid Build Coastguard Worker		dasc=
10713*7c356e86SAndroid Build Coastguard Worker		nl=${wc#1#}
10714*7c356e86SAndroid Build Coastguard Worker		while IFS= read -r line; do
10715*7c356e86SAndroid Build Coastguard Worker			line=$line$nl
10716*7c356e86SAndroid Build Coastguard Worker			lpos=0
10717*7c356e86SAndroid Build Coastguard Worker			while (( lpos < ${#line} )); do
10718*7c356e86SAndroid Build Coastguard Worker				wc=1#${line:(lpos++):1}
10719*7c356e86SAndroid Build Coastguard Worker				if (( (wc < 32) || \
10720*7c356e86SAndroid Build Coastguard Worker				    ((wc > 126) && (wc < 160)) )); then
10721*7c356e86SAndroid Build Coastguard Worker					dch=.
10722*7c356e86SAndroid Build Coastguard Worker				elif (( (wc & 0xFF80) == 0xEF80 )); then
10723*7c356e86SAndroid Build Coastguard Worker					dch=�
10724*7c356e86SAndroid Build Coastguard Worker				else
10725*7c356e86SAndroid Build Coastguard Worker					dch=${wc#1#}
10726*7c356e86SAndroid Build Coastguard Worker				fi
10727*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 7) == 7 )); then
10728*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc$dch
10729*7c356e86SAndroid Build Coastguard Worker					dch=
10730*7c356e86SAndroid Build Coastguard Worker				elif (( (pos & 7) == 0 )); then
10731*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10732*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10733*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10734*7c356e86SAndroid Build Coastguard Worker				fi
10735*7c356e86SAndroid Build Coastguard Worker				let hv=wc
10736*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10737*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 7) == 3 )) && \
10738*7c356e86SAndroid Build Coastguard Worker				    print -n -- '- '
10739*7c356e86SAndroid Build Coastguard Worker				dasc=$dasc$dch
10740*7c356e86SAndroid Build Coastguard Worker			done
10741*7c356e86SAndroid Build Coastguard Worker		done
10742*7c356e86SAndroid Build Coastguard Worker		while (( pos & 7 )); do
10743*7c356e86SAndroid Build Coastguard Worker			print -n '     '
10744*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 7) == 3 )) && print -n -- '- '
10745*7c356e86SAndroid Build Coastguard Worker		done
10746*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10747*7c356e86SAndroid Build Coastguard Worker	}
10748*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10749*7c356e86SAndroid Build Coastguard Worker	00000000  0048 0065 006C 006C - 006F 002C 0020 0057  |Hello, W|
10750*7c356e86SAndroid Build Coastguard Worker	00000008  006F 0072 006C 0064 - 0021 005C 000A 3053  |orld!\.こ|
10751*7c356e86SAndroid Build Coastguard Worker	00000010  3093 306B 3061 306F - FF01 000A 0001 0002  |んにちは!...|
10752*7c356e86SAndroid Build Coastguard Worker	00000018  0003 0004 0005 0006 - 0007 0008 0009 000A  |........|
10753*7c356e86SAndroid Build Coastguard Worker	00000020  000B 000C 000D 000E - 000F 0010 0011 0012  |........|
10754*7c356e86SAndroid Build Coastguard Worker	00000028  0013 0014 0015 0016 - 0017 0018 0019 001A  |........|
10755*7c356e86SAndroid Build Coastguard Worker	00000030  001B 001C 001D 001E - 001F 0020 0021 0022  |..... !"|
10756*7c356e86SAndroid Build Coastguard Worker	00000038  0023 0024 0025 0026 - 0027 0028 0029 002A  |#$%&'()*|
10757*7c356e86SAndroid Build Coastguard Worker	00000040  002B 002C 002D 002E - 002F 0030 0031 0032  |+,-./012|
10758*7c356e86SAndroid Build Coastguard Worker	00000048  0033 0034 0035 0036 - 0037 0038 0039 003A  |3456789:|
10759*7c356e86SAndroid Build Coastguard Worker	00000050  003B 003C 003D 003E - 003F 0040 0041 0042  |;<=>?@AB|
10760*7c356e86SAndroid Build Coastguard Worker	00000058  0043 0044 0045 0046 - 0047 0048 0049 004A  |CDEFGHIJ|
10761*7c356e86SAndroid Build Coastguard Worker	00000060  004B 004C 004D 004E - 004F 0050 0051 0052  |KLMNOPQR|
10762*7c356e86SAndroid Build Coastguard Worker	00000068  0053 0054 0055 0056 - 0057 0058 0059 005A  |STUVWXYZ|
10763*7c356e86SAndroid Build Coastguard Worker	00000070  005B 005C 005D 005E - 005F 0060 0061 0062  |[\]^_`ab|
10764*7c356e86SAndroid Build Coastguard Worker	00000078  0063 0064 0065 0066 - 0067 0068 0069 006A  |cdefghij|
10765*7c356e86SAndroid Build Coastguard Worker	00000080  006B 006C 006D 006E - 006F 0070 0071 0072  |klmnopqr|
10766*7c356e86SAndroid Build Coastguard Worker	00000088  0073 0074 0075 0076 - 0077 0078 0079 007A  |stuvwxyz|
10767*7c356e86SAndroid Build Coastguard Worker	00000090  007B 007C 007D 007E - 007F 0080 0081 0082  |{|}~....|
10768*7c356e86SAndroid Build Coastguard Worker	00000098  0083 0084 0085 0086 - 0087 0088 0089 008A  |........|
10769*7c356e86SAndroid Build Coastguard Worker	000000A0  008B 008C 008D 008E - 008F 0090 0091 0092  |........|
10770*7c356e86SAndroid Build Coastguard Worker	000000A8  0093 0094 0095 0096 - 0097 0098 0099 009A  |........|
10771*7c356e86SAndroid Build Coastguard Worker	000000B0  009B 009C 009D 009E - 009F 00A0 00A1 00A2  |..... ¡¢|
10772*7c356e86SAndroid Build Coastguard Worker	000000B8  00A3 00A4 00A5 00A6 - 00A7 00A8 00A9 00AA  |£¤¥¦§¨©ª|
10773*7c356e86SAndroid Build Coastguard Worker	000000C0  00AB 00AC 00AD 00AE - 00AF 00B0 00B1 00B2  |«¬­®¯°±²|
10774*7c356e86SAndroid Build Coastguard Worker	000000C8  00B3 00B4 00B5 00B6 - 00B7 00B8 00B9 00BA  |³´µ¶·¸¹º|
10775*7c356e86SAndroid Build Coastguard Worker	000000D0  00BB 00BC 00BD 00BE - 00BF 00C0 00C1 00C2  |»¼½¾¿ÀÁÂ|
10776*7c356e86SAndroid Build Coastguard Worker	000000D8  00C3 00C4 00C5 00C6 - 00C7 00C8 00C9 00CA  |ÃÄÅÆÇÈÉÊ|
10777*7c356e86SAndroid Build Coastguard Worker	000000E0  00CB 00CC 00CD 00CE - 00CF 00D0 00D1 00D2  |ËÌÍÎÏÐÑÒ|
10778*7c356e86SAndroid Build Coastguard Worker	000000E8  00D3 00D4 00D5 00D6 - 00D7 00D8 00D9 00DA  |ÓÔÕÖרÙÚ|
10779*7c356e86SAndroid Build Coastguard Worker	000000F0  00DB 00DC 00DD 00DE - 00DF 00E0 00E1 00E2  |ÛÜÝÞßàáâ|
10780*7c356e86SAndroid Build Coastguard Worker	000000F8  00E3 00E4 00E5 00E6 - 00E7 00E8 00E9 00EA  |ãäåæçèéê|
10781*7c356e86SAndroid Build Coastguard Worker	00000100  00EB 00EC 00ED 00EE - 00EF 00F0 00F1 00F2  |ëìíîïðñò|
10782*7c356e86SAndroid Build Coastguard Worker	00000108  00F3 00F4 00F5 00F6 - 00F7 00F8 00F9 00FA  |óôõö÷øùú|
10783*7c356e86SAndroid Build Coastguard Worker	00000110  00FB 00FC 00FD 00FE - 00FF 000A EFFF 000A  |ûüýþÿ.�.|
10784*7c356e86SAndroid Build Coastguard Worker	00000118  EFC2 000A EFEF EFBF - EFC0 000A EFC0 EF80  |�.���.��|
10785*7c356e86SAndroid Build Coastguard Worker	00000120  000A EFE0 EF80 EF80 - 000A FFFD EFEF EFBF  |.���.���|
10786*7c356e86SAndroid Build Coastguard Worker	00000128  EFBE EFEF EFBF EFBF - 000A 007A 000A       |����.z.|
10787*7c356e86SAndroid Build Coastguard Worker---
10788*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3Ar
10789*7c356e86SAndroid Build Coastguard Workerdescription:
10790*7c356e86SAndroid Build Coastguard Worker	some sample code for hexdumping; NUL and binary safe
10791*7c356e86SAndroid Build Coastguard Workerstdin:
10792*7c356e86SAndroid Build Coastguard Worker	{
10793*7c356e86SAndroid Build Coastguard Worker		print 'Hello, World!\\\nこんにちは!'
10794*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 i=0x100
10795*7c356e86SAndroid Build Coastguard Worker		# change that to 0xFF once we can handle embedded
10796*7c356e86SAndroid Build Coastguard Worker		# NUL characters in strings / here documents
10797*7c356e86SAndroid Build Coastguard Worker		while (( i++ < 0x1FF )); do
10798*7c356e86SAndroid Build Coastguard Worker			print -n "\x${i#16#1}"
10799*7c356e86SAndroid Build Coastguard Worker		done
10800*7c356e86SAndroid Build Coastguard Worker		print '\0z'
10801*7c356e86SAndroid Build Coastguard Worker	} | {
10802*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3Ar
10803*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10804*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z5 hv=2147483647
10805*7c356e86SAndroid Build Coastguard Worker		dasc=
10806*7c356e86SAndroid Build Coastguard Worker		if read -arN -1 line; then
10807*7c356e86SAndroid Build Coastguard Worker			typeset -i1 line
10808*7c356e86SAndroid Build Coastguard Worker			i=0
10809*7c356e86SAndroid Build Coastguard Worker			while (( i < ${#line[*]} )); do
10810*7c356e86SAndroid Build Coastguard Worker				hv=${line[i++]}
10811*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 15) == 0 )); then
10812*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10813*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10814*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10815*7c356e86SAndroid Build Coastguard Worker				fi
10816*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10817*7c356e86SAndroid Build Coastguard Worker				if (( (hv < 32) || (hv > 126) )); then
10818*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc.
10819*7c356e86SAndroid Build Coastguard Worker				else
10820*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc${line[i-1]#1#}
10821*7c356e86SAndroid Build Coastguard Worker				fi
10822*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 15) == 7 )) && print -n -- '- '
10823*7c356e86SAndroid Build Coastguard Worker			done
10824*7c356e86SAndroid Build Coastguard Worker		fi
10825*7c356e86SAndroid Build Coastguard Worker		while (( pos & 15 )); do
10826*7c356e86SAndroid Build Coastguard Worker			print -n '   '
10827*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 15) == 7 )) && print -n -- '- '
10828*7c356e86SAndroid Build Coastguard Worker		done
10829*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10830*7c356e86SAndroid Build Coastguard Worker	}
10831*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10832*7c356e86SAndroid Build Coastguard Worker	00000000  48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0A E3  |Hello, World!\..|
10833*7c356e86SAndroid Build Coastguard Worker	00000010  81 93 E3 82 93 E3 81 AB - E3 81 A1 E3 81 AF EF BC  |................|
10834*7c356e86SAndroid Build Coastguard Worker	00000020  81 0A 01 02 03 04 05 06 - 07 08 09 0A 0B 0C 0D 0E  |................|
10835*7c356e86SAndroid Build Coastguard Worker	00000030  0F 10 11 12 13 14 15 16 - 17 18 19 1A 1B 1C 1D 1E  |................|
10836*7c356e86SAndroid Build Coastguard Worker	00000040  1F 20 21 22 23 24 25 26 - 27 28 29 2A 2B 2C 2D 2E  |. !"#$%&'()*+,-.|
10837*7c356e86SAndroid Build Coastguard Worker	00000050  2F 30 31 32 33 34 35 36 - 37 38 39 3A 3B 3C 3D 3E  |/0123456789:;<=>|
10838*7c356e86SAndroid Build Coastguard Worker	00000060  3F 40 41 42 43 44 45 46 - 47 48 49 4A 4B 4C 4D 4E  |?@ABCDEFGHIJKLMN|
10839*7c356e86SAndroid Build Coastguard Worker	00000070  4F 50 51 52 53 54 55 56 - 57 58 59 5A 5B 5C 5D 5E  |OPQRSTUVWXYZ[\]^|
10840*7c356e86SAndroid Build Coastguard Worker	00000080  5F 60 61 62 63 64 65 66 - 67 68 69 6A 6B 6C 6D 6E  |_`abcdefghijklmn|
10841*7c356e86SAndroid Build Coastguard Worker	00000090  6F 70 71 72 73 74 75 76 - 77 78 79 7A 7B 7C 7D 7E  |opqrstuvwxyz{|}~|
10842*7c356e86SAndroid Build Coastguard Worker	000000A0  7F 80 81 82 83 84 85 86 - 87 88 89 8A 8B 8C 8D 8E  |................|
10843*7c356e86SAndroid Build Coastguard Worker	000000B0  8F 90 91 92 93 94 95 96 - 97 98 99 9A 9B 9C 9D 9E  |................|
10844*7c356e86SAndroid Build Coastguard Worker	000000C0  9F A0 A1 A2 A3 A4 A5 A6 - A7 A8 A9 AA AB AC AD AE  |................|
10845*7c356e86SAndroid Build Coastguard Worker	000000D0  AF B0 B1 B2 B3 B4 B5 B6 - B7 B8 B9 BA BB BC BD BE  |................|
10846*7c356e86SAndroid Build Coastguard Worker	000000E0  BF C0 C1 C2 C3 C4 C5 C6 - C7 C8 C9 CA CB CC CD CE  |................|
10847*7c356e86SAndroid Build Coastguard Worker	000000F0  CF D0 D1 D2 D3 D4 D5 D6 - D7 D8 D9 DA DB DC DD DE  |................|
10848*7c356e86SAndroid Build Coastguard Worker	00000100  DF E0 E1 E2 E3 E4 E5 E6 - E7 E8 E9 EA EB EC ED EE  |................|
10849*7c356e86SAndroid Build Coastguard Worker	00000110  EF F0 F1 F2 F3 F4 F5 F6 - F7 F8 F9 FA FB FC FD FE  |................|
10850*7c356e86SAndroid Build Coastguard Worker	00000120  FF 00 7A 0A             -                          |..z.|
10851*7c356e86SAndroid Build Coastguard Worker---
10852*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3Wr
10853*7c356e86SAndroid Build Coastguard Workerdescription:
10854*7c356e86SAndroid Build Coastguard Worker	some sample code for hexdumping UCS-2; NUL and binary safe
10855*7c356e86SAndroid Build Coastguard Workerstdin:
10856*7c356e86SAndroid Build Coastguard Worker	set -U
10857*7c356e86SAndroid Build Coastguard Worker	{
10858*7c356e86SAndroid Build Coastguard Worker		print 'Hello, World!\\\nこんにちは!'
10859*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 i=0x100
10860*7c356e86SAndroid Build Coastguard Worker		# change that to 0xFF once we can handle embedded
10861*7c356e86SAndroid Build Coastguard Worker		# NUL characters in strings / here documents
10862*7c356e86SAndroid Build Coastguard Worker		while (( i++ < 0x1FF )); do
10863*7c356e86SAndroid Build Coastguard Worker			print -n "\u${i#16#1}"
10864*7c356e86SAndroid Build Coastguard Worker		done
10865*7c356e86SAndroid Build Coastguard Worker		print
10866*7c356e86SAndroid Build Coastguard Worker		print \\xff		# invalid utf-8
10867*7c356e86SAndroid Build Coastguard Worker		print \\xc2		# invalid 2-byte
10868*7c356e86SAndroid Build Coastguard Worker		print \\xef\\xbf\\xc0	# invalid 3-byte
10869*7c356e86SAndroid Build Coastguard Worker		print \\xc0\\x80	# non-minimalistic
10870*7c356e86SAndroid Build Coastguard Worker		print \\xe0\\x80\\x80	# non-minimalistic
10871*7c356e86SAndroid Build Coastguard Worker		print '�￾￿'	# end of range
10872*7c356e86SAndroid Build Coastguard Worker		print '\0z'		# embedded NUL
10873*7c356e86SAndroid Build Coastguard Worker	} | {
10874*7c356e86SAndroid Build Coastguard Worker		# integer-base-one-3Wr
10875*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z11 pos=0
10876*7c356e86SAndroid Build Coastguard Worker		typeset -Uui16 -Z7 hv=2147483647
10877*7c356e86SAndroid Build Coastguard Worker		dasc=
10878*7c356e86SAndroid Build Coastguard Worker		if read -arN -1 line; then
10879*7c356e86SAndroid Build Coastguard Worker			typeset -i1 line
10880*7c356e86SAndroid Build Coastguard Worker			i=0
10881*7c356e86SAndroid Build Coastguard Worker			while (( i < ${#line[*]} )); do
10882*7c356e86SAndroid Build Coastguard Worker				hv=${line[i++]}
10883*7c356e86SAndroid Build Coastguard Worker				if (( (hv < 32) || \
10884*7c356e86SAndroid Build Coastguard Worker				    ((hv > 126) && (hv < 160)) )); then
10885*7c356e86SAndroid Build Coastguard Worker					dch=.
10886*7c356e86SAndroid Build Coastguard Worker				elif (( (hv & 0xFF80) == 0xEF80 )); then
10887*7c356e86SAndroid Build Coastguard Worker					dch=�
10888*7c356e86SAndroid Build Coastguard Worker				else
10889*7c356e86SAndroid Build Coastguard Worker					dch=${line[i-1]#1#}
10890*7c356e86SAndroid Build Coastguard Worker				fi
10891*7c356e86SAndroid Build Coastguard Worker				if (( (pos & 7) == 7 )); then
10892*7c356e86SAndroid Build Coastguard Worker					dasc=$dasc$dch
10893*7c356e86SAndroid Build Coastguard Worker					dch=
10894*7c356e86SAndroid Build Coastguard Worker				elif (( (pos & 7) == 0 )); then
10895*7c356e86SAndroid Build Coastguard Worker					(( pos )) && print -r -- "$dasc|"
10896*7c356e86SAndroid Build Coastguard Worker					print -n "${pos#16#}  "
10897*7c356e86SAndroid Build Coastguard Worker					dasc=' |'
10898*7c356e86SAndroid Build Coastguard Worker				fi
10899*7c356e86SAndroid Build Coastguard Worker				print -n "${hv#16#} "
10900*7c356e86SAndroid Build Coastguard Worker				(( (pos++ & 7) == 3 )) && \
10901*7c356e86SAndroid Build Coastguard Worker				    print -n -- '- '
10902*7c356e86SAndroid Build Coastguard Worker				dasc=$dasc$dch
10903*7c356e86SAndroid Build Coastguard Worker			done
10904*7c356e86SAndroid Build Coastguard Worker		fi
10905*7c356e86SAndroid Build Coastguard Worker		while (( pos & 7 )); do
10906*7c356e86SAndroid Build Coastguard Worker			print -n '     '
10907*7c356e86SAndroid Build Coastguard Worker			(( (pos++ & 7) == 3 )) && print -n -- '- '
10908*7c356e86SAndroid Build Coastguard Worker		done
10909*7c356e86SAndroid Build Coastguard Worker		(( hv == 2147483647 )) || print -r -- "$dasc|"
10910*7c356e86SAndroid Build Coastguard Worker	}
10911*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10912*7c356e86SAndroid Build Coastguard Worker	00000000  0048 0065 006C 006C - 006F 002C 0020 0057  |Hello, W|
10913*7c356e86SAndroid Build Coastguard Worker	00000008  006F 0072 006C 0064 - 0021 005C 000A 3053  |orld!\.こ|
10914*7c356e86SAndroid Build Coastguard Worker	00000010  3093 306B 3061 306F - FF01 000A 0001 0002  |んにちは!...|
10915*7c356e86SAndroid Build Coastguard Worker	00000018  0003 0004 0005 0006 - 0007 0008 0009 000A  |........|
10916*7c356e86SAndroid Build Coastguard Worker	00000020  000B 000C 000D 000E - 000F 0010 0011 0012  |........|
10917*7c356e86SAndroid Build Coastguard Worker	00000028  0013 0014 0015 0016 - 0017 0018 0019 001A  |........|
10918*7c356e86SAndroid Build Coastguard Worker	00000030  001B 001C 001D 001E - 001F 0020 0021 0022  |..... !"|
10919*7c356e86SAndroid Build Coastguard Worker	00000038  0023 0024 0025 0026 - 0027 0028 0029 002A  |#$%&'()*|
10920*7c356e86SAndroid Build Coastguard Worker	00000040  002B 002C 002D 002E - 002F 0030 0031 0032  |+,-./012|
10921*7c356e86SAndroid Build Coastguard Worker	00000048  0033 0034 0035 0036 - 0037 0038 0039 003A  |3456789:|
10922*7c356e86SAndroid Build Coastguard Worker	00000050  003B 003C 003D 003E - 003F 0040 0041 0042  |;<=>?@AB|
10923*7c356e86SAndroid Build Coastguard Worker	00000058  0043 0044 0045 0046 - 0047 0048 0049 004A  |CDEFGHIJ|
10924*7c356e86SAndroid Build Coastguard Worker	00000060  004B 004C 004D 004E - 004F 0050 0051 0052  |KLMNOPQR|
10925*7c356e86SAndroid Build Coastguard Worker	00000068  0053 0054 0055 0056 - 0057 0058 0059 005A  |STUVWXYZ|
10926*7c356e86SAndroid Build Coastguard Worker	00000070  005B 005C 005D 005E - 005F 0060 0061 0062  |[\]^_`ab|
10927*7c356e86SAndroid Build Coastguard Worker	00000078  0063 0064 0065 0066 - 0067 0068 0069 006A  |cdefghij|
10928*7c356e86SAndroid Build Coastguard Worker	00000080  006B 006C 006D 006E - 006F 0070 0071 0072  |klmnopqr|
10929*7c356e86SAndroid Build Coastguard Worker	00000088  0073 0074 0075 0076 - 0077 0078 0079 007A  |stuvwxyz|
10930*7c356e86SAndroid Build Coastguard Worker	00000090  007B 007C 007D 007E - 007F 0080 0081 0082  |{|}~....|
10931*7c356e86SAndroid Build Coastguard Worker	00000098  0083 0084 0085 0086 - 0087 0088 0089 008A  |........|
10932*7c356e86SAndroid Build Coastguard Worker	000000A0  008B 008C 008D 008E - 008F 0090 0091 0092  |........|
10933*7c356e86SAndroid Build Coastguard Worker	000000A8  0093 0094 0095 0096 - 0097 0098 0099 009A  |........|
10934*7c356e86SAndroid Build Coastguard Worker	000000B0  009B 009C 009D 009E - 009F 00A0 00A1 00A2  |..... ¡¢|
10935*7c356e86SAndroid Build Coastguard Worker	000000B8  00A3 00A4 00A5 00A6 - 00A7 00A8 00A9 00AA  |£¤¥¦§¨©ª|
10936*7c356e86SAndroid Build Coastguard Worker	000000C0  00AB 00AC 00AD 00AE - 00AF 00B0 00B1 00B2  |«¬­®¯°±²|
10937*7c356e86SAndroid Build Coastguard Worker	000000C8  00B3 00B4 00B5 00B6 - 00B7 00B8 00B9 00BA  |³´µ¶·¸¹º|
10938*7c356e86SAndroid Build Coastguard Worker	000000D0  00BB 00BC 00BD 00BE - 00BF 00C0 00C1 00C2  |»¼½¾¿ÀÁÂ|
10939*7c356e86SAndroid Build Coastguard Worker	000000D8  00C3 00C4 00C5 00C6 - 00C7 00C8 00C9 00CA  |ÃÄÅÆÇÈÉÊ|
10940*7c356e86SAndroid Build Coastguard Worker	000000E0  00CB 00CC 00CD 00CE - 00CF 00D0 00D1 00D2  |ËÌÍÎÏÐÑÒ|
10941*7c356e86SAndroid Build Coastguard Worker	000000E8  00D3 00D4 00D5 00D6 - 00D7 00D8 00D9 00DA  |ÓÔÕÖרÙÚ|
10942*7c356e86SAndroid Build Coastguard Worker	000000F0  00DB 00DC 00DD 00DE - 00DF 00E0 00E1 00E2  |ÛÜÝÞßàáâ|
10943*7c356e86SAndroid Build Coastguard Worker	000000F8  00E3 00E4 00E5 00E6 - 00E7 00E8 00E9 00EA  |ãäåæçèéê|
10944*7c356e86SAndroid Build Coastguard Worker	00000100  00EB 00EC 00ED 00EE - 00EF 00F0 00F1 00F2  |ëìíîïðñò|
10945*7c356e86SAndroid Build Coastguard Worker	00000108  00F3 00F4 00F5 00F6 - 00F7 00F8 00F9 00FA  |óôõö÷øùú|
10946*7c356e86SAndroid Build Coastguard Worker	00000110  00FB 00FC 00FD 00FE - 00FF 000A EFFF 000A  |ûüýþÿ.�.|
10947*7c356e86SAndroid Build Coastguard Worker	00000118  EFC2 000A EFEF EFBF - EFC0 000A EFC0 EF80  |�.���.��|
10948*7c356e86SAndroid Build Coastguard Worker	00000120  000A EFE0 EF80 EF80 - 000A FFFD EFEF EFBF  |.���.���|
10949*7c356e86SAndroid Build Coastguard Worker	00000128  EFBE EFEF EFBF EFBF - 000A 0000 007A 000A  |����..z.|
10950*7c356e86SAndroid Build Coastguard Worker---
10951*7c356e86SAndroid Build Coastguard Workername: integer-base-one-4
10952*7c356e86SAndroid Build Coastguard Workerdescription:
10953*7c356e86SAndroid Build Coastguard Worker	Check if ksh93-style base-one integers work
10954*7c356e86SAndroid Build Coastguard Workercategory: !smksh
10955*7c356e86SAndroid Build Coastguard Workerstdin:
10956*7c356e86SAndroid Build Coastguard Worker	set -U
10957*7c356e86SAndroid Build Coastguard Worker	echo 1 $(('a'))
10958*7c356e86SAndroid Build Coastguard Worker	(echo 2f $(('aa'))) 2>&1 | sed "s/^[^']*'/2p '/"
10959*7c356e86SAndroid Build Coastguard Worker	echo 3 $(('…'))
10960*7c356e86SAndroid Build Coastguard Worker	x="'a'"
10961*7c356e86SAndroid Build Coastguard Worker	echo "4 <$x>"
10962*7c356e86SAndroid Build Coastguard Worker	echo 5 $(($x))
10963*7c356e86SAndroid Build Coastguard Worker	echo 6 $((x))
10964*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10965*7c356e86SAndroid Build Coastguard Worker	1 97
10966*7c356e86SAndroid Build Coastguard Worker	2p 'aa': multi-character character constant
10967*7c356e86SAndroid Build Coastguard Worker	3 8230
10968*7c356e86SAndroid Build Coastguard Worker	4 <'a'>
10969*7c356e86SAndroid Build Coastguard Worker	5 97
10970*7c356e86SAndroid Build Coastguard Worker	6 97
10971*7c356e86SAndroid Build Coastguard Worker---
10972*7c356e86SAndroid Build Coastguard Workername: integer-base-one-5A
10973*7c356e86SAndroid Build Coastguard Workerdescription:
10974*7c356e86SAndroid Build Coastguard Worker	Check to see that we’re NUL and UCS safe
10975*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
10976*7c356e86SAndroid Build Coastguard Workerstdin:
10977*7c356e86SAndroid Build Coastguard Worker	set +U
10978*7c356e86SAndroid Build Coastguard Worker	print 'a\0b\xfdz' >x
10979*7c356e86SAndroid Build Coastguard Worker	read -a y <x
10980*7c356e86SAndroid Build Coastguard Worker	set -U
10981*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 y
10982*7c356e86SAndroid Build Coastguard Worker	print ${y[*]} .
10983*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10984*7c356e86SAndroid Build Coastguard Worker	16#61 16#0 16#62 16#FD 16#7A .
10985*7c356e86SAndroid Build Coastguard Worker---
10986*7c356e86SAndroid Build Coastguard Workername: integer-base-one-5E
10987*7c356e86SAndroid Build Coastguard Workerdescription:
10988*7c356e86SAndroid Build Coastguard Worker	Check to see that we’re NUL and UCS safe
10989*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
10990*7c356e86SAndroid Build Coastguard Workerstdin:
10991*7c356e86SAndroid Build Coastguard Worker	set +U
10992*7c356e86SAndroid Build Coastguard Worker	print 'a\0b\xfdz' >x
10993*7c356e86SAndroid Build Coastguard Worker	read -a y <x
10994*7c356e86SAndroid Build Coastguard Worker	set -U
10995*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 y
10996*7c356e86SAndroid Build Coastguard Worker	print ${y[*]} .
10997*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
10998*7c356e86SAndroid Build Coastguard Worker	16#81 16#0 16#82 16#FD 16#A9 .
10999*7c356e86SAndroid Build Coastguard Worker---
11000*7c356e86SAndroid Build Coastguard Workername: integer-base-one-5W
11001*7c356e86SAndroid Build Coastguard Workerdescription:
11002*7c356e86SAndroid Build Coastguard Worker	Check to see that we’re NUL and UCS safe
11003*7c356e86SAndroid Build Coastguard Workerstdin:
11004*7c356e86SAndroid Build Coastguard Worker	set -U
11005*7c356e86SAndroid Build Coastguard Worker	print 'a\0b€c' >x
11006*7c356e86SAndroid Build Coastguard Worker	read -a y <x
11007*7c356e86SAndroid Build Coastguard Worker	set +U
11008*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 y
11009*7c356e86SAndroid Build Coastguard Worker	print ${y[*]} .
11010*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11011*7c356e86SAndroid Build Coastguard Worker	16#61 16#0 16#62 16#20AC 16#63 .
11012*7c356e86SAndroid Build Coastguard Worker---
11013*7c356e86SAndroid Build Coastguard Workername: ulimit-1
11014*7c356e86SAndroid Build Coastguard Workerdescription:
11015*7c356e86SAndroid Build Coastguard Worker	Check that ulimit as used in dot.mksh works or is stubbed
11016*7c356e86SAndroid Build Coastguard Workerstdin:
11017*7c356e86SAndroid Build Coastguard Worker	ulimit -c 0
11018*7c356e86SAndroid Build Coastguard Worker---
11019*7c356e86SAndroid Build Coastguard Workername: ulimit-2
11020*7c356e86SAndroid Build Coastguard Workerdescription:
11021*7c356e86SAndroid Build Coastguard Worker	Check if we can use a specific syntax idiom for ulimit
11022*7c356e86SAndroid Build Coastguard Worker	XXX Haiku works, but only for -n and -V
11023*7c356e86SAndroid Build Coastguard Workercategory: !os:haiku,!os:syllable
11024*7c356e86SAndroid Build Coastguard Workerstdin:
11025*7c356e86SAndroid Build Coastguard Worker	if ! x=$(ulimit -d) || [[ $x = unknown ]]; then
11026*7c356e86SAndroid Build Coastguard Worker		#echo expected to fail on this OS
11027*7c356e86SAndroid Build Coastguard Worker		echo okay
11028*7c356e86SAndroid Build Coastguard Worker	else
11029*7c356e86SAndroid Build Coastguard Worker		ulimit -dS $x && echo okay
11030*7c356e86SAndroid Build Coastguard Worker	fi
11031*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11032*7c356e86SAndroid Build Coastguard Worker	okay
11033*7c356e86SAndroid Build Coastguard Worker---
11034*7c356e86SAndroid Build Coastguard Workername: ulimit-3
11035*7c356e86SAndroid Build Coastguard Workerdescription:
11036*7c356e86SAndroid Build Coastguard Worker	Check that there are no duplicate limits (if this fails,
11037*7c356e86SAndroid Build Coastguard Worker	immediately contact with system information the developers)
11038*7c356e86SAndroid Build Coastguard Workerstdin:
11039*7c356e86SAndroid Build Coastguard Worker	[[ -z $(set | grep ^opt) ]]; mis=$?
11040*7c356e86SAndroid Build Coastguard Worker	set | grep ^opt | sed 's/^/unexpectedly set in environment: /'
11041*7c356e86SAndroid Build Coastguard Worker	opta='<used for showing all limits>'
11042*7c356e86SAndroid Build Coastguard Worker	optH='<used to set hard limits>'
11043*7c356e86SAndroid Build Coastguard Worker	optS='<used to set soft limits>'
11044*7c356e86SAndroid Build Coastguard Worker	ulimit -a >tmpf
11045*7c356e86SAndroid Build Coastguard Worker	set -o noglob
11046*7c356e86SAndroid Build Coastguard Worker	while IFS= read -r line; do
11047*7c356e86SAndroid Build Coastguard Worker		x=${line:1:1}
11048*7c356e86SAndroid Build Coastguard Worker		if [[ -z $x || ${#x}/${%x} != 1/1 ]]; then
11049*7c356e86SAndroid Build Coastguard Worker			print -r -- "weird line: $line"
11050*7c356e86SAndroid Build Coastguard Worker			(( mis |= 1 ))
11051*7c356e86SAndroid Build Coastguard Worker			continue
11052*7c356e86SAndroid Build Coastguard Worker		fi
11053*7c356e86SAndroid Build Coastguard Worker		set -- $line
11054*7c356e86SAndroid Build Coastguard Worker		nameref v=opt$x
11055*7c356e86SAndroid Build Coastguard Worker		if [[ -n $v ]]; then
11056*7c356e86SAndroid Build Coastguard Worker			print -r -- "duplicate -$x \"$2\" already seen as \"$v\""
11057*7c356e86SAndroid Build Coastguard Worker			(( mis |= 2 ))
11058*7c356e86SAndroid Build Coastguard Worker		fi
11059*7c356e86SAndroid Build Coastguard Worker		v=$2
11060*7c356e86SAndroid Build Coastguard Worker	done <tmpf
11061*7c356e86SAndroid Build Coastguard Worker	if (( mis & 2 )); then
11062*7c356e86SAndroid Build Coastguard Worker		echo failed
11063*7c356e86SAndroid Build Coastguard Worker	elif (( mis & 1 )); then
11064*7c356e86SAndroid Build Coastguard Worker		echo inconclusive
11065*7c356e86SAndroid Build Coastguard Worker	else
11066*7c356e86SAndroid Build Coastguard Worker		echo done
11067*7c356e86SAndroid Build Coastguard Worker	fi
11068*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11069*7c356e86SAndroid Build Coastguard Worker	done
11070*7c356e86SAndroid Build Coastguard Worker---
11071*7c356e86SAndroid Build Coastguard Workername: redir-1
11072*7c356e86SAndroid Build Coastguard Workerdescription:
11073*7c356e86SAndroid Build Coastguard Worker	Check some of the most basic invariants of I/O redirection
11074*7c356e86SAndroid Build Coastguard Workerstdin:
11075*7c356e86SAndroid Build Coastguard Worker	i=0
11076*7c356e86SAndroid Build Coastguard Worker	function d {
11077*7c356e86SAndroid Build Coastguard Worker		print o$i.
11078*7c356e86SAndroid Build Coastguard Worker		print -u2 e$((i++)).
11079*7c356e86SAndroid Build Coastguard Worker	}
11080*7c356e86SAndroid Build Coastguard Worker	d >a 2>b
11081*7c356e86SAndroid Build Coastguard Worker	echo =1=
11082*7c356e86SAndroid Build Coastguard Worker	cat a
11083*7c356e86SAndroid Build Coastguard Worker	echo =2=
11084*7c356e86SAndroid Build Coastguard Worker	cat b
11085*7c356e86SAndroid Build Coastguard Worker	echo =3=
11086*7c356e86SAndroid Build Coastguard Worker	d 2>&1 >c
11087*7c356e86SAndroid Build Coastguard Worker	echo =4=
11088*7c356e86SAndroid Build Coastguard Worker	cat c
11089*7c356e86SAndroid Build Coastguard Worker	echo =5=
11090*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11091*7c356e86SAndroid Build Coastguard Worker	=1=
11092*7c356e86SAndroid Build Coastguard Worker	o0.
11093*7c356e86SAndroid Build Coastguard Worker	=2=
11094*7c356e86SAndroid Build Coastguard Worker	e0.
11095*7c356e86SAndroid Build Coastguard Worker	=3=
11096*7c356e86SAndroid Build Coastguard Worker	e1.
11097*7c356e86SAndroid Build Coastguard Worker	=4=
11098*7c356e86SAndroid Build Coastguard Worker	o1.
11099*7c356e86SAndroid Build Coastguard Worker	=5=
11100*7c356e86SAndroid Build Coastguard Worker---
11101*7c356e86SAndroid Build Coastguard Workername: bashiop-1
11102*7c356e86SAndroid Build Coastguard Workerdescription:
11103*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection works
11104*7c356e86SAndroid Build Coastguard Worker	Part 1: this is also supported by GNU bash
11105*7c356e86SAndroid Build Coastguard Workerstdin:
11106*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11107*7c356e86SAndroid Build Coastguard Worker	function threeout {
11108*7c356e86SAndroid Build Coastguard Worker		echo ras
11109*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11110*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11111*7c356e86SAndroid Build Coastguard Worker	}
11112*7c356e86SAndroid Build Coastguard Worker	threeout &>foo
11113*7c356e86SAndroid Build Coastguard Worker	echo ===
11114*7c356e86SAndroid Build Coastguard Worker	cat foo
11115*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11116*7c356e86SAndroid Build Coastguard Worker	tri
11117*7c356e86SAndroid Build Coastguard Worker	===
11118*7c356e86SAndroid Build Coastguard Worker	ras
11119*7c356e86SAndroid Build Coastguard Worker	dwa
11120*7c356e86SAndroid Build Coastguard Worker---
11121*7c356e86SAndroid Build Coastguard Workername: bashiop-2a
11122*7c356e86SAndroid Build Coastguard Workerdescription:
11123*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection works
11124*7c356e86SAndroid Build Coastguard Worker	Part 2: this is *not* supported by GNU bash
11125*7c356e86SAndroid Build Coastguard Workerstdin:
11126*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11127*7c356e86SAndroid Build Coastguard Worker	function threeout {
11128*7c356e86SAndroid Build Coastguard Worker		echo ras
11129*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11130*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11131*7c356e86SAndroid Build Coastguard Worker	}
11132*7c356e86SAndroid Build Coastguard Worker	threeout 3&>foo
11133*7c356e86SAndroid Build Coastguard Worker	echo ===
11134*7c356e86SAndroid Build Coastguard Worker	cat foo
11135*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11136*7c356e86SAndroid Build Coastguard Worker	ras
11137*7c356e86SAndroid Build Coastguard Worker	===
11138*7c356e86SAndroid Build Coastguard Worker	dwa
11139*7c356e86SAndroid Build Coastguard Worker	tri
11140*7c356e86SAndroid Build Coastguard Worker---
11141*7c356e86SAndroid Build Coastguard Workername: bashiop-2b
11142*7c356e86SAndroid Build Coastguard Workerdescription:
11143*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection works
11144*7c356e86SAndroid Build Coastguard Worker	Part 2: this is *not* supported by GNU bash
11145*7c356e86SAndroid Build Coastguard Workerstdin:
11146*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11147*7c356e86SAndroid Build Coastguard Worker	function threeout {
11148*7c356e86SAndroid Build Coastguard Worker		echo ras
11149*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11150*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11151*7c356e86SAndroid Build Coastguard Worker	}
11152*7c356e86SAndroid Build Coastguard Worker	threeout 3>foo &>&3
11153*7c356e86SAndroid Build Coastguard Worker	echo ===
11154*7c356e86SAndroid Build Coastguard Worker	cat foo
11155*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11156*7c356e86SAndroid Build Coastguard Worker	===
11157*7c356e86SAndroid Build Coastguard Worker	ras
11158*7c356e86SAndroid Build Coastguard Worker	dwa
11159*7c356e86SAndroid Build Coastguard Worker	tri
11160*7c356e86SAndroid Build Coastguard Worker---
11161*7c356e86SAndroid Build Coastguard Workername: bashiop-2c
11162*7c356e86SAndroid Build Coastguard Workerdescription:
11163*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection works
11164*7c356e86SAndroid Build Coastguard Worker	Part 2: this is supported by GNU bash 4 only
11165*7c356e86SAndroid Build Coastguard Workerstdin:
11166*7c356e86SAndroid Build Coastguard Worker	echo mir >foo
11167*7c356e86SAndroid Build Coastguard Worker	set -o noclobber
11168*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11169*7c356e86SAndroid Build Coastguard Worker	function threeout {
11170*7c356e86SAndroid Build Coastguard Worker		echo ras
11171*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11172*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11173*7c356e86SAndroid Build Coastguard Worker	}
11174*7c356e86SAndroid Build Coastguard Worker	threeout &>>foo
11175*7c356e86SAndroid Build Coastguard Worker	echo ===
11176*7c356e86SAndroid Build Coastguard Worker	cat foo
11177*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11178*7c356e86SAndroid Build Coastguard Worker	tri
11179*7c356e86SAndroid Build Coastguard Worker	===
11180*7c356e86SAndroid Build Coastguard Worker	mir
11181*7c356e86SAndroid Build Coastguard Worker	ras
11182*7c356e86SAndroid Build Coastguard Worker	dwa
11183*7c356e86SAndroid Build Coastguard Worker---
11184*7c356e86SAndroid Build Coastguard Workername: bashiop-3a
11185*7c356e86SAndroid Build Coastguard Workerdescription:
11186*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection fails correctly
11187*7c356e86SAndroid Build Coastguard Worker	Part 1: this is also supported by GNU bash
11188*7c356e86SAndroid Build Coastguard Workerstdin:
11189*7c356e86SAndroid Build Coastguard Worker	echo mir >foo
11190*7c356e86SAndroid Build Coastguard Worker	set -o noclobber
11191*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11192*7c356e86SAndroid Build Coastguard Worker	function threeout {
11193*7c356e86SAndroid Build Coastguard Worker		echo ras
11194*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11195*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11196*7c356e86SAndroid Build Coastguard Worker	}
11197*7c356e86SAndroid Build Coastguard Worker	threeout &>foo
11198*7c356e86SAndroid Build Coastguard Worker	echo ===
11199*7c356e86SAndroid Build Coastguard Worker	cat foo
11200*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11201*7c356e86SAndroid Build Coastguard Worker	===
11202*7c356e86SAndroid Build Coastguard Worker	mir
11203*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*: can't (create|overwrite) .*/
11204*7c356e86SAndroid Build Coastguard Worker---
11205*7c356e86SAndroid Build Coastguard Workername: bashiop-3b
11206*7c356e86SAndroid Build Coastguard Workerdescription:
11207*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection fails correctly
11208*7c356e86SAndroid Build Coastguard Worker	Part 2: this is *not* supported by GNU bash
11209*7c356e86SAndroid Build Coastguard Workerstdin:
11210*7c356e86SAndroid Build Coastguard Worker	echo mir >foo
11211*7c356e86SAndroid Build Coastguard Worker	set -o noclobber
11212*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11213*7c356e86SAndroid Build Coastguard Worker	function threeout {
11214*7c356e86SAndroid Build Coastguard Worker		echo ras
11215*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11216*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11217*7c356e86SAndroid Build Coastguard Worker	}
11218*7c356e86SAndroid Build Coastguard Worker	threeout &>|foo
11219*7c356e86SAndroid Build Coastguard Worker	echo ===
11220*7c356e86SAndroid Build Coastguard Worker	cat foo
11221*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11222*7c356e86SAndroid Build Coastguard Worker	tri
11223*7c356e86SAndroid Build Coastguard Worker	===
11224*7c356e86SAndroid Build Coastguard Worker	ras
11225*7c356e86SAndroid Build Coastguard Worker	dwa
11226*7c356e86SAndroid Build Coastguard Worker---
11227*7c356e86SAndroid Build Coastguard Workername: bashiop-4
11228*7c356e86SAndroid Build Coastguard Workerdescription:
11229*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection works
11230*7c356e86SAndroid Build Coastguard Worker	Part 4: this is also supported by GNU bash,
11231*7c356e86SAndroid Build Coastguard Worker	but failed in some mksh versions
11232*7c356e86SAndroid Build Coastguard Workerstdin:
11233*7c356e86SAndroid Build Coastguard Worker	exec 3>&1
11234*7c356e86SAndroid Build Coastguard Worker	function threeout {
11235*7c356e86SAndroid Build Coastguard Worker		echo ras
11236*7c356e86SAndroid Build Coastguard Worker		echo dwa >&2
11237*7c356e86SAndroid Build Coastguard Worker		echo tri >&3
11238*7c356e86SAndroid Build Coastguard Worker	}
11239*7c356e86SAndroid Build Coastguard Worker	function blubb {
11240*7c356e86SAndroid Build Coastguard Worker		[[ -e bar ]] && threeout "$bf" &>foo
11241*7c356e86SAndroid Build Coastguard Worker	}
11242*7c356e86SAndroid Build Coastguard Worker	blubb
11243*7c356e86SAndroid Build Coastguard Worker	echo -n >bar
11244*7c356e86SAndroid Build Coastguard Worker	blubb
11245*7c356e86SAndroid Build Coastguard Worker	echo ===
11246*7c356e86SAndroid Build Coastguard Worker	cat foo
11247*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11248*7c356e86SAndroid Build Coastguard Worker	tri
11249*7c356e86SAndroid Build Coastguard Worker	===
11250*7c356e86SAndroid Build Coastguard Worker	ras
11251*7c356e86SAndroid Build Coastguard Worker	dwa
11252*7c356e86SAndroid Build Coastguard Worker---
11253*7c356e86SAndroid Build Coastguard Workername: bashiop-5
11254*7c356e86SAndroid Build Coastguard Workerdescription:
11255*7c356e86SAndroid Build Coastguard Worker	Check if GNU bash-like I/O redirection is only supported
11256*7c356e86SAndroid Build Coastguard Worker	in !POSIX !sh mode as it breaks existing scripts' syntax
11257*7c356e86SAndroid Build Coastguard Workerstdin:
11258*7c356e86SAndroid Build Coastguard Worker	:>x; echo 1 "$("$__progname" -c 'echo foo>/dev/null&>x echo bar')" = "$(<x)" .
11259*7c356e86SAndroid Build Coastguard Worker	:>x; echo 2 "$("$__progname" -o posix -c 'echo foo>/dev/null&>x echo bar')" = "$(<x)" .
11260*7c356e86SAndroid Build Coastguard Worker	:>x; echo 3 "$("$__progname" -o sh -c 'echo foo>/dev/null&>x echo bar')" = "$(<x)" .
11261*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11262*7c356e86SAndroid Build Coastguard Worker	1  = foo echo bar .
11263*7c356e86SAndroid Build Coastguard Worker	2  = bar .
11264*7c356e86SAndroid Build Coastguard Worker	3  = bar .
11265*7c356e86SAndroid Build Coastguard Worker---
11266*7c356e86SAndroid Build Coastguard Workername: oksh-eval
11267*7c356e86SAndroid Build Coastguard Workerdescription:
11268*7c356e86SAndroid Build Coastguard Worker	Check expansions.
11269*7c356e86SAndroid Build Coastguard Workerstdin:
11270*7c356e86SAndroid Build Coastguard Worker	a=
11271*7c356e86SAndroid Build Coastguard Worker	for n in ${a#*=}; do echo 1hu ${n} .; done
11272*7c356e86SAndroid Build Coastguard Worker	for n in "${a#*=}"; do echo 1hq ${n} .; done
11273*7c356e86SAndroid Build Coastguard Worker	for n in ${a##*=}; do echo 2hu ${n} .; done
11274*7c356e86SAndroid Build Coastguard Worker	for n in "${a##*=}"; do echo 2hq ${n} .; done
11275*7c356e86SAndroid Build Coastguard Worker	for n in ${a%=*}; do echo 1pu ${n} .; done
11276*7c356e86SAndroid Build Coastguard Worker	for n in "${a%=*}"; do echo 1pq ${n} .; done
11277*7c356e86SAndroid Build Coastguard Worker	for n in ${a%%=*}; do echo 2pu ${n} .; done
11278*7c356e86SAndroid Build Coastguard Worker	for n in "${a%%=*}"; do echo 2pq ${n} .; done
11279*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11280*7c356e86SAndroid Build Coastguard Worker	1hq .
11281*7c356e86SAndroid Build Coastguard Worker	2hq .
11282*7c356e86SAndroid Build Coastguard Worker	1pq .
11283*7c356e86SAndroid Build Coastguard Worker	2pq .
11284*7c356e86SAndroid Build Coastguard Worker---
11285*7c356e86SAndroid Build Coastguard Workername: oksh-and-list-error-1
11286*7c356e86SAndroid Build Coastguard Workerdescription:
11287*7c356e86SAndroid Build Coastguard Worker	Test exit status of rightmost element in 2 element && list in -e mode
11288*7c356e86SAndroid Build Coastguard Workerstdin:
11289*7c356e86SAndroid Build Coastguard Worker	true && false
11290*7c356e86SAndroid Build Coastguard Worker	echo "should not print"
11291*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11292*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
11293*7c356e86SAndroid Build Coastguard Worker---
11294*7c356e86SAndroid Build Coastguard Workername: oksh-and-list-error-2
11295*7c356e86SAndroid Build Coastguard Workerdescription:
11296*7c356e86SAndroid Build Coastguard Worker	Test exit status of rightmost element in 3 element && list in -e mode
11297*7c356e86SAndroid Build Coastguard Workerstdin:
11298*7c356e86SAndroid Build Coastguard Worker	true && true && false
11299*7c356e86SAndroid Build Coastguard Worker	echo "should not print"
11300*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11301*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
11302*7c356e86SAndroid Build Coastguard Worker---
11303*7c356e86SAndroid Build Coastguard Workername: oksh-or-list-error-1
11304*7c356e86SAndroid Build Coastguard Workerdescription:
11305*7c356e86SAndroid Build Coastguard Worker	Test exit status of || list in -e mode
11306*7c356e86SAndroid Build Coastguard Workerstdin:
11307*7c356e86SAndroid Build Coastguard Worker	false || false
11308*7c356e86SAndroid Build Coastguard Worker	echo "should not print"
11309*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11310*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
11311*7c356e86SAndroid Build Coastguard Worker---
11312*7c356e86SAndroid Build Coastguard Workername: oksh-longline-crash
11313*7c356e86SAndroid Build Coastguard Workerdescription:
11314*7c356e86SAndroid Build Coastguard Worker	This used to cause a core dump
11315*7c356e86SAndroid Build Coastguard Workerstdin:
11316*7c356e86SAndroid Build Coastguard Worker	ulimit -c 0
11317*7c356e86SAndroid Build Coastguard Worker	deplibs="-lz -lpng /usr/local/lib/libjpeg.la -ltiff -lm -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -ltiff -ljpeg -lz -lpng -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk_pixbuf.la -lz -lpng /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile -L/usr/local/lib /usr/local/lib/libesd.la -lm -lz -L/usr/local/lib /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib -L/usr/local/lib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lpng /usr/local/lib/libungif.la -lz /usr/local/lib/libjpeg.la -ltiff -L/usr/local/lib -L/usr/X11R6/lib /usr/local/lib/libgdk_imlib.la -lm -L/usr/local/lib /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lICE -lSM -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lm -lz -lpng -lungif -lz -ljpeg -ltiff -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd -L/usr/local/lib /usr/local/lib/libgnomeui.la -lz -lz /usr/local/lib/libxml.la -lz -lz -lz /usr/local/lib/libxml.la -lm -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la /usr/local/lib/libgmodule.la -lintl -lglib -lgmodule /usr/local/lib/libgdk.la /usr/local/lib/libgtk.la -L/usr/X11R6/lib -L/usr/local/lib /usr/local/lib/libglade.la -lz -lz -lz /usr/local/lib/libxml.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile /usr/local/lib/libesd.la -lm -lz /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -lglib -lgmodule /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -lglib -lgmodule /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lz /usr/local/lib/libgdk_imlib.la /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lm -lz -lungif -lz -ljpeg -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd /usr/local/lib/libgnomeui.la -L/usr/X11R6/lib -L/usr/local/lib /usr/local/lib/libglade-gnome.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile -L/usr/local/lib /usr/local/lib/libesd.la -lm -lz -L/usr/local/lib /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib -L/usr/local/lib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lpng /usr/local/lib/libungif.la -lz /usr/local/lib/libjpeg.la -ltiff -L/usr/local/lib -L/usr/X11R6/lib /usr/local/lib/libgdk_imlib.la -lm -L/usr/local/lib /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lICE -lSM -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lm -lz -lpng -lungif -lz -ljpeg -ltiff -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd -L/usr/local/lib /usr/local/lib/libgnomeui.la -L/usr/X11R6/lib -L/usr/local/lib"
11318*7c356e86SAndroid Build Coastguard Worker	specialdeplibs="-lgnomeui -lart_lgpl -lgdk_imlib -ltiff -ljpeg -lungif -lpng -lz -lSM -lICE -lgtk -lgdk -lgmodule -lintl -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -lm -lglib"
11319*7c356e86SAndroid Build Coastguard Worker	for deplib in $deplibs; do
11320*7c356e86SAndroid Build Coastguard Worker		case $deplib in
11321*7c356e86SAndroid Build Coastguard Worker		-L*)
11322*7c356e86SAndroid Build Coastguard Worker			new_libs="$deplib $new_libs"
11323*7c356e86SAndroid Build Coastguard Worker			;;
11324*7c356e86SAndroid Build Coastguard Worker		*)
11325*7c356e86SAndroid Build Coastguard Worker			case " $specialdeplibs " in
11326*7c356e86SAndroid Build Coastguard Worker			*" $deplib "*)
11327*7c356e86SAndroid Build Coastguard Worker				new_libs="$deplib $new_libs";;
11328*7c356e86SAndroid Build Coastguard Worker			esac
11329*7c356e86SAndroid Build Coastguard Worker			;;
11330*7c356e86SAndroid Build Coastguard Worker		esac
11331*7c356e86SAndroid Build Coastguard Worker	done
11332*7c356e86SAndroid Build Coastguard Worker---
11333*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-1
11334*7c356e86SAndroid Build Coastguard Workerdescription:
11335*7c356e86SAndroid Build Coastguard Worker	The -e flag should be ignored when executing a compound list
11336*7c356e86SAndroid Build Coastguard Worker	followed by an if statement.
11337*7c356e86SAndroid Build Coastguard Workerstdin:
11338*7c356e86SAndroid Build Coastguard Worker	if true; then false && false; fi
11339*7c356e86SAndroid Build Coastguard Worker	true
11340*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11341*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0
11342*7c356e86SAndroid Build Coastguard Worker---
11343*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-2
11344*7c356e86SAndroid Build Coastguard Workerdescription:
11345*7c356e86SAndroid Build Coastguard Worker	The -e flag should be ignored when executing a compound list
11346*7c356e86SAndroid Build Coastguard Worker	followed by an if statement.
11347*7c356e86SAndroid Build Coastguard Workerstdin:
11348*7c356e86SAndroid Build Coastguard Worker	if true; then if true; then false && false; fi; fi
11349*7c356e86SAndroid Build Coastguard Worker	true
11350*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11351*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0
11352*7c356e86SAndroid Build Coastguard Worker---
11353*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-3
11354*7c356e86SAndroid Build Coastguard Workerdescription:
11355*7c356e86SAndroid Build Coastguard Worker	The -e flag should be ignored when executing a compound list
11356*7c356e86SAndroid Build Coastguard Worker	followed by an elif statement.
11357*7c356e86SAndroid Build Coastguard Workerstdin:
11358*7c356e86SAndroid Build Coastguard Worker	if true; then :; elif true; then false && false; fi
11359*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11360*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0
11361*7c356e86SAndroid Build Coastguard Worker---
11362*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-4
11363*7c356e86SAndroid Build Coastguard Workerdescription:
11364*7c356e86SAndroid Build Coastguard Worker	The -e flag should be ignored when executing a pipeline
11365*7c356e86SAndroid Build Coastguard Worker	beginning with '!'
11366*7c356e86SAndroid Build Coastguard Workerstdin:
11367*7c356e86SAndroid Build Coastguard Worker	for i in 1 2 3
11368*7c356e86SAndroid Build Coastguard Worker	do
11369*7c356e86SAndroid Build Coastguard Worker		false && false
11370*7c356e86SAndroid Build Coastguard Worker		true || false
11371*7c356e86SAndroid Build Coastguard Worker	done
11372*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11373*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0
11374*7c356e86SAndroid Build Coastguard Worker---
11375*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-5
11376*7c356e86SAndroid Build Coastguard Workerdescription:
11377*7c356e86SAndroid Build Coastguard Worker	The -e flag should be ignored when executing a pipeline
11378*7c356e86SAndroid Build Coastguard Worker	beginning with '!'
11379*7c356e86SAndroid Build Coastguard Workerstdin:
11380*7c356e86SAndroid Build Coastguard Worker	! true | false
11381*7c356e86SAndroid Build Coastguard Worker	true
11382*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11383*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0
11384*7c356e86SAndroid Build Coastguard Worker---
11385*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-6
11386*7c356e86SAndroid Build Coastguard Workerdescription:
11387*7c356e86SAndroid Build Coastguard Worker	When trapping ERR and EXIT, both traps should run in -e mode
11388*7c356e86SAndroid Build Coastguard Worker	when an error occurs.
11389*7c356e86SAndroid Build Coastguard Workerstdin:
11390*7c356e86SAndroid Build Coastguard Worker	trap 'echo EXIT' EXIT
11391*7c356e86SAndroid Build Coastguard Worker	trap 'echo ERR' ERR
11392*7c356e86SAndroid Build Coastguard Worker	set -e
11393*7c356e86SAndroid Build Coastguard Worker	false
11394*7c356e86SAndroid Build Coastguard Worker	echo DONE
11395*7c356e86SAndroid Build Coastguard Worker	exit 0
11396*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11397*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
11398*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11399*7c356e86SAndroid Build Coastguard Worker	ERR
11400*7c356e86SAndroid Build Coastguard Worker	EXIT
11401*7c356e86SAndroid Build Coastguard Worker---
11402*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-7
11403*7c356e86SAndroid Build Coastguard Workerdescription:
11404*7c356e86SAndroid Build Coastguard Worker	The -e flag within a command substitution should be honored
11405*7c356e86SAndroid Build Coastguard Workerstdin:
11406*7c356e86SAndroid Build Coastguard Worker	echo $( set -e; false; echo foo )
11407*7c356e86SAndroid Build Coastguard Workerarguments: !-e!
11408*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11409*7c356e86SAndroid Build Coastguard Worker
11410*7c356e86SAndroid Build Coastguard Worker---
11411*7c356e86SAndroid Build Coastguard Workername: oksh-input-comsub
11412*7c356e86SAndroid Build Coastguard Workerdescription:
11413*7c356e86SAndroid Build Coastguard Worker	A command substitution using input redirection should exit with
11414*7c356e86SAndroid Build Coastguard Worker	failure if the input file does not exist.
11415*7c356e86SAndroid Build Coastguard Workerstdin:
11416*7c356e86SAndroid Build Coastguard Worker	var=$(< non-existent)
11417*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
11418*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /non-existent/
11419*7c356e86SAndroid Build Coastguard Worker---
11420*7c356e86SAndroid Build Coastguard Workername: oksh-empty-for-list
11421*7c356e86SAndroid Build Coastguard Workerdescription:
11422*7c356e86SAndroid Build Coastguard Worker	A for list which expands to zero items should not execute the body.
11423*7c356e86SAndroid Build Coastguard Workerstdin:
11424*7c356e86SAndroid Build Coastguard Worker	set foo bar baz ; for out in ; do echo $out ; done
11425*7c356e86SAndroid Build Coastguard Worker---
11426*7c356e86SAndroid Build Coastguard Workername: oksh-varfunction-mod1
11427*7c356e86SAndroid Build Coastguard Workerdescription:
11428*7c356e86SAndroid Build Coastguard Worker	(Inspired by PR 2450 on OpenBSD.) Calling
11429*7c356e86SAndroid Build Coastguard Worker		FOO=bar f
11430*7c356e86SAndroid Build Coastguard Worker	where f is a ksh style function, should not set FOO in the current
11431*7c356e86SAndroid Build Coastguard Worker	env. If f is a Bourne style function, (new) also not. Furthermore,
11432*7c356e86SAndroid Build Coastguard Worker	the function should receive a correct value of FOO. However, differing
11433*7c356e86SAndroid Build Coastguard Worker	from oksh, setting FOO in the function itself must change the value in
11434*7c356e86SAndroid Build Coastguard Worker	setting FOO in the function itself should not change the value in
11435*7c356e86SAndroid Build Coastguard Worker	global environment.
11436*7c356e86SAndroid Build Coastguard Workerstdin:
11437*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \
11438*7c356e86SAndroid Build Coastguard Worker	    'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \
11439*7c356e86SAndroid Build Coastguard Worker	    done >env; chmod +x env; PATH=.$PATHSEP$PATH
11440*7c356e86SAndroid Build Coastguard Worker	function k {
11441*7c356e86SAndroid Build Coastguard Worker		if [ x$FOO != xbar ]; then
11442*7c356e86SAndroid Build Coastguard Worker			echo 1
11443*7c356e86SAndroid Build Coastguard Worker			return 1
11444*7c356e86SAndroid Build Coastguard Worker		fi
11445*7c356e86SAndroid Build Coastguard Worker		x=$(env | grep FOO)
11446*7c356e86SAndroid Build Coastguard Worker		if [ "x$x" != "xFOO=bar" ]; then
11447*7c356e86SAndroid Build Coastguard Worker			echo 2
11448*7c356e86SAndroid Build Coastguard Worker			return 1;
11449*7c356e86SAndroid Build Coastguard Worker		fi
11450*7c356e86SAndroid Build Coastguard Worker		FOO=foo
11451*7c356e86SAndroid Build Coastguard Worker		return 0
11452*7c356e86SAndroid Build Coastguard Worker	}
11453*7c356e86SAndroid Build Coastguard Worker	b () {
11454*7c356e86SAndroid Build Coastguard Worker		if [ x$FOO != xbar ]; then
11455*7c356e86SAndroid Build Coastguard Worker			echo 3
11456*7c356e86SAndroid Build Coastguard Worker			return 1
11457*7c356e86SAndroid Build Coastguard Worker		fi
11458*7c356e86SAndroid Build Coastguard Worker		x=$(env | grep FOO)
11459*7c356e86SAndroid Build Coastguard Worker		if [ "x$x" != "xFOO=bar" ]; then
11460*7c356e86SAndroid Build Coastguard Worker			echo 4
11461*7c356e86SAndroid Build Coastguard Worker			return 1;
11462*7c356e86SAndroid Build Coastguard Worker		fi
11463*7c356e86SAndroid Build Coastguard Worker		FOO=foo
11464*7c356e86SAndroid Build Coastguard Worker		return 0
11465*7c356e86SAndroid Build Coastguard Worker	}
11466*7c356e86SAndroid Build Coastguard Worker	FOO=bar k
11467*7c356e86SAndroid Build Coastguard Worker	if [ $? != 0 ]; then
11468*7c356e86SAndroid Build Coastguard Worker		exit 1
11469*7c356e86SAndroid Build Coastguard Worker	fi
11470*7c356e86SAndroid Build Coastguard Worker	if [ x$FOO != x ]; then
11471*7c356e86SAndroid Build Coastguard Worker		exit 1
11472*7c356e86SAndroid Build Coastguard Worker	fi
11473*7c356e86SAndroid Build Coastguard Worker	FOO=bar b
11474*7c356e86SAndroid Build Coastguard Worker	if [ $? != 0 ]; then
11475*7c356e86SAndroid Build Coastguard Worker		exit 1
11476*7c356e86SAndroid Build Coastguard Worker	fi
11477*7c356e86SAndroid Build Coastguard Worker	if [ x$FOO != x ]; then
11478*7c356e86SAndroid Build Coastguard Worker		exit 1
11479*7c356e86SAndroid Build Coastguard Worker	fi
11480*7c356e86SAndroid Build Coastguard Worker	FOO=barbar
11481*7c356e86SAndroid Build Coastguard Worker	FOO=bar k
11482*7c356e86SAndroid Build Coastguard Worker	if [ $? != 0 ]; then
11483*7c356e86SAndroid Build Coastguard Worker		exit 1
11484*7c356e86SAndroid Build Coastguard Worker	fi
11485*7c356e86SAndroid Build Coastguard Worker	if [ x$FOO != xbarbar ]; then
11486*7c356e86SAndroid Build Coastguard Worker		exit 1
11487*7c356e86SAndroid Build Coastguard Worker	fi
11488*7c356e86SAndroid Build Coastguard Worker	FOO=bar b
11489*7c356e86SAndroid Build Coastguard Worker	if [ $? != 0 ]; then
11490*7c356e86SAndroid Build Coastguard Worker		exit 1
11491*7c356e86SAndroid Build Coastguard Worker	fi
11492*7c356e86SAndroid Build Coastguard Worker	if [ x$FOO != xbarbar ]; then
11493*7c356e86SAndroid Build Coastguard Worker		exit 1
11494*7c356e86SAndroid Build Coastguard Worker	fi
11495*7c356e86SAndroid Build Coastguard Worker---
11496*7c356e86SAndroid Build Coastguard Workername: fd-cloexec-1
11497*7c356e86SAndroid Build Coastguard Workerdescription:
11498*7c356e86SAndroid Build Coastguard Worker	Verify that file descriptors > 2 are private for Korn shells
11499*7c356e86SAndroid Build Coastguard Worker	AT&T ksh93 does this still, which means we must keep it as well
11500*7c356e86SAndroid Build Coastguard Workerstdin:
11501*7c356e86SAndroid Build Coastguard Worker	cat >cld <<-EOF
11502*7c356e86SAndroid Build Coastguard Worker		#!$__perlname
11503*7c356e86SAndroid Build Coastguard Worker		open(FH, ">&9") or die "E: open \$!";
11504*7c356e86SAndroid Build Coastguard Worker		syswrite(FH, "Fowl\\n", 5) or die "E: write \$!";
11505*7c356e86SAndroid Build Coastguard Worker	EOF
11506*7c356e86SAndroid Build Coastguard Worker	chmod +x cld
11507*7c356e86SAndroid Build Coastguard Worker	exec 9>&1
11508*7c356e86SAndroid Build Coastguard Worker	./cld
11509*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0
11510*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
11511*7c356e86SAndroid Build Coastguard Worker	/E: open /
11512*7c356e86SAndroid Build Coastguard Worker---
11513*7c356e86SAndroid Build Coastguard Workername: fd-cloexec-2
11514*7c356e86SAndroid Build Coastguard Workerdescription:
11515*7c356e86SAndroid Build Coastguard Worker	Verify that file descriptors > 2 are not private for POSIX shells
11516*7c356e86SAndroid Build Coastguard Worker	See Debian Bug #154540, Closes: #499139
11517*7c356e86SAndroid Build Coastguard Workerstdin:
11518*7c356e86SAndroid Build Coastguard Worker	cat >cld <<-EOF
11519*7c356e86SAndroid Build Coastguard Worker		#!$__perlname
11520*7c356e86SAndroid Build Coastguard Worker		open(FH, ">&9") or die "E: open \$!";
11521*7c356e86SAndroid Build Coastguard Worker		syswrite(FH, "Fowl\\n", 5) or die "E: write \$!";
11522*7c356e86SAndroid Build Coastguard Worker	EOF
11523*7c356e86SAndroid Build Coastguard Worker	chmod +x cld
11524*7c356e86SAndroid Build Coastguard Worker	test -n "$POSH_VERSION" || set -o posix
11525*7c356e86SAndroid Build Coastguard Worker	exec 9>&1
11526*7c356e86SAndroid Build Coastguard Worker	./cld
11527*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11528*7c356e86SAndroid Build Coastguard Worker	Fowl
11529*7c356e86SAndroid Build Coastguard Worker---
11530*7c356e86SAndroid Build Coastguard Workername: fd-cloexec-3
11531*7c356e86SAndroid Build Coastguard Workerdescription:
11532*7c356e86SAndroid Build Coastguard Worker	Another check for close-on-exec
11533*7c356e86SAndroid Build Coastguard Workerstdin:
11534*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname" >ts
11535*7c356e86SAndroid Build Coastguard Worker	cat >>ts <<'EOF'
11536*7c356e86SAndroid Build Coastguard Worker	s=ERR
11537*7c356e86SAndroid Build Coastguard Worker	read -rN-1 -u$1 s 2>/dev/null; e=$?
11538*7c356e86SAndroid Build Coastguard Worker	print -r -- "($1, $((!e)), $s)"
11539*7c356e86SAndroid Build Coastguard Worker	EOF
11540*7c356e86SAndroid Build Coastguard Worker	chmod +x ts
11541*7c356e86SAndroid Build Coastguard Worker	print foo >tx
11542*7c356e86SAndroid Build Coastguard Worker	runtest() {
11543*7c356e86SAndroid Build Coastguard Worker		s=$1; shift
11544*7c356e86SAndroid Build Coastguard Worker		print -r -- $("$__progname" "$@" -c "$s") "$@" .
11545*7c356e86SAndroid Build Coastguard Worker	}
11546*7c356e86SAndroid Build Coastguard Worker	runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3'
11547*7c356e86SAndroid Build Coastguard Worker	runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3' -o posix
11548*7c356e86SAndroid Build Coastguard Worker	runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3' -o sh
11549*7c356e86SAndroid Build Coastguard Worker	runtest 'exec 3<tx; ./ts 4 4<&3; ./ts 4 4<&3'
11550*7c356e86SAndroid Build Coastguard Worker	runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3 3<&3'
11551*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11552*7c356e86SAndroid Build Coastguard Worker	(3, 1, foo) (3, 0, ERR) .
11553*7c356e86SAndroid Build Coastguard Worker	(3, 1, foo) (3, 1, ) -o posix .
11554*7c356e86SAndroid Build Coastguard Worker	(3, 1, foo) (3, 1, ) -o sh .
11555*7c356e86SAndroid Build Coastguard Worker	(4, 1, foo) (4, 1, ) .
11556*7c356e86SAndroid Build Coastguard Worker	(3, 1, foo) (3, 1, ) .
11557*7c356e86SAndroid Build Coastguard Worker---
11558*7c356e86SAndroid Build Coastguard Workername: comsub-1a
11559*7c356e86SAndroid Build Coastguard Workerdescription:
11560*7c356e86SAndroid Build Coastguard Worker	COMSUB are now parsed recursively, so this works
11561*7c356e86SAndroid Build Coastguard Worker	see also regression-6: matching parenthesēs bug
11562*7c356e86SAndroid Build Coastguard Worker	Fails on: pdksh bash2 bash3 zsh
11563*7c356e86SAndroid Build Coastguard Worker	Passes on: bash4 ksh93 mksh(20110313+)
11564*7c356e86SAndroid Build Coastguard Workerstdin:
11565*7c356e86SAndroid Build Coastguard Worker	echo 1 $(case 1 in (1) echo yes;; (2) echo no;; esac) .
11566*7c356e86SAndroid Build Coastguard Worker	echo 2 $(case 1 in 1) echo yes;; 2) echo no;; esac) .
11567*7c356e86SAndroid Build Coastguard Worker	TEST=1234; echo 3 ${TEST: $(case 1 in (1) echo 1;; (*) echo 2;; esac)} .
11568*7c356e86SAndroid Build Coastguard Worker	TEST=5678; echo 4 ${TEST: $(case 1 in 1) echo 1;; *) echo 2;; esac)} .
11569*7c356e86SAndroid Build Coastguard Worker	a=($(case 1 in (1) echo 1;; (*) echo 2;; esac)); echo 5 ${a[0]} .
11570*7c356e86SAndroid Build Coastguard Worker	a=($(case 1 in 1) echo 1;; *) echo 2;; esac)); echo 6 ${a[0]} .
11571*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11572*7c356e86SAndroid Build Coastguard Worker	1 yes .
11573*7c356e86SAndroid Build Coastguard Worker	2 yes .
11574*7c356e86SAndroid Build Coastguard Worker	3 234 .
11575*7c356e86SAndroid Build Coastguard Worker	4 678 .
11576*7c356e86SAndroid Build Coastguard Worker	5 1 .
11577*7c356e86SAndroid Build Coastguard Worker	6 1 .
11578*7c356e86SAndroid Build Coastguard Worker---
11579*7c356e86SAndroid Build Coastguard Workername: comsub-1b
11580*7c356e86SAndroid Build Coastguard Workerdescription:
11581*7c356e86SAndroid Build Coastguard Worker	COMSUB are now parsed recursively, so this works
11582*7c356e86SAndroid Build Coastguard Worker	Fails on: pdksh bash2 bash3 bash4 zsh
11583*7c356e86SAndroid Build Coastguard Worker	Passes on: ksh93 mksh(20110313+)
11584*7c356e86SAndroid Build Coastguard Workerstdin:
11585*7c356e86SAndroid Build Coastguard Worker	echo 1 $(($(case 1 in (1) echo 1;; (*) echo 2;; esac)+10)) .
11586*7c356e86SAndroid Build Coastguard Worker	echo 2 $(($(case 1 in 1) echo 1;; *) echo 2;; esac)+20)) .
11587*7c356e86SAndroid Build Coastguard Worker	(( a = $(case 1 in (1) echo 1;; (*) echo 2;; esac) )); echo 3 $a .
11588*7c356e86SAndroid Build Coastguard Worker	(( a = $(case 1 in 1) echo 1;; *) echo 2;; esac) )); echo 4 $a .
11589*7c356e86SAndroid Build Coastguard Worker	a=($(($(case 1 in (1) echo 1;; (*) echo 2;; esac)+10))); echo 5 ${a[0]} .
11590*7c356e86SAndroid Build Coastguard Worker	a=($(($(case 1 in 1) echo 1;; *) echo 2;; esac)+20))); echo 6 ${a[0]} .
11591*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11592*7c356e86SAndroid Build Coastguard Worker	1 11 .
11593*7c356e86SAndroid Build Coastguard Worker	2 21 .
11594*7c356e86SAndroid Build Coastguard Worker	3 1 .
11595*7c356e86SAndroid Build Coastguard Worker	4 1 .
11596*7c356e86SAndroid Build Coastguard Worker	5 11 .
11597*7c356e86SAndroid Build Coastguard Worker	6 21 .
11598*7c356e86SAndroid Build Coastguard Worker---
11599*7c356e86SAndroid Build Coastguard Workername: comsub-2
11600*7c356e86SAndroid Build Coastguard Workerdescription:
11601*7c356e86SAndroid Build Coastguard Worker	RedHat BZ#496791 – another case of missing recursion
11602*7c356e86SAndroid Build Coastguard Worker	in parsing COMSUB expressions
11603*7c356e86SAndroid Build Coastguard Worker	Fails on: pdksh bash2 bash3¹ bash4¹ zsh
11604*7c356e86SAndroid Build Coastguard Worker	Passes on: ksh93 mksh(20110305+)
11605*7c356e86SAndroid Build Coastguard Worker	① bash[34] seem to choke on comment ending with backslash-newline
11606*7c356e86SAndroid Build Coastguard Workerstdin:
11607*7c356e86SAndroid Build Coastguard Worker	# a comment with " ' \
11608*7c356e86SAndroid Build Coastguard Worker	x=$(
11609*7c356e86SAndroid Build Coastguard Worker	echo yes
11610*7c356e86SAndroid Build Coastguard Worker	# a comment with " ' \
11611*7c356e86SAndroid Build Coastguard Worker	)
11612*7c356e86SAndroid Build Coastguard Worker	echo $x
11613*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11614*7c356e86SAndroid Build Coastguard Worker	yes
11615*7c356e86SAndroid Build Coastguard Worker---
11616*7c356e86SAndroid Build Coastguard Workername: comsub-3
11617*7c356e86SAndroid Build Coastguard Workerdescription:
11618*7c356e86SAndroid Build Coastguard Worker	Extended test for COMSUB explaining why a recursive parser
11619*7c356e86SAndroid Build Coastguard Worker	is a must (a non-recursive parser cannot pass all three of
11620*7c356e86SAndroid Build Coastguard Worker	these test cases, especially the ‘#’ is difficult)
11621*7c356e86SAndroid Build Coastguard Workerstdin:
11622*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\necho 1234' >id; chmod +x id; PATH=.$PATHSEP$PATH
11623*7c356e86SAndroid Build Coastguard Worker	echo $(typeset -i10 x=16#20; echo $x)
11624*7c356e86SAndroid Build Coastguard Worker	echo $(typeset -Uui16 x=16#$(id -u)
11625*7c356e86SAndroid Build Coastguard Worker	) .
11626*7c356e86SAndroid Build Coastguard Worker	echo $(c=1; d=1
11627*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 a=36#foo; c=2
11628*7c356e86SAndroid Build Coastguard Worker	typeset -Uui16 b=36 #foo; d=2
11629*7c356e86SAndroid Build Coastguard Worker	echo $a $b $c $d)
11630*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11631*7c356e86SAndroid Build Coastguard Worker	32
11632*7c356e86SAndroid Build Coastguard Worker	.
11633*7c356e86SAndroid Build Coastguard Worker	16#4F68 16#24 2 1
11634*7c356e86SAndroid Build Coastguard Worker---
11635*7c356e86SAndroid Build Coastguard Workername: comsub-4
11636*7c356e86SAndroid Build Coastguard Workerdescription:
11637*7c356e86SAndroid Build Coastguard Worker	Check the tree dump functions for !MKSH_SMALL functionality
11638*7c356e86SAndroid Build Coastguard Workercategory: !smksh
11639*7c356e86SAndroid Build Coastguard Workerstdin:
11640*7c356e86SAndroid Build Coastguard Worker	x() { case $1 in u) echo x ;;& *) echo $1 ;; esac; }
11641*7c356e86SAndroid Build Coastguard Worker	typeset -f x
11642*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11643*7c356e86SAndroid Build Coastguard Worker	x() {
11644*7c356e86SAndroid Build Coastguard Worker		case $1 in
11645*7c356e86SAndroid Build Coastguard Worker		(u)
11646*7c356e86SAndroid Build Coastguard Worker			\echo x
11647*7c356e86SAndroid Build Coastguard Worker			;|
11648*7c356e86SAndroid Build Coastguard Worker		(*)
11649*7c356e86SAndroid Build Coastguard Worker			\echo $1
11650*7c356e86SAndroid Build Coastguard Worker			;;
11651*7c356e86SAndroid Build Coastguard Worker		esac
11652*7c356e86SAndroid Build Coastguard Worker	}
11653*7c356e86SAndroid Build Coastguard Worker---
11654*7c356e86SAndroid Build Coastguard Workername: comsub-5
11655*7c356e86SAndroid Build Coastguard Workerdescription:
11656*7c356e86SAndroid Build Coastguard Worker	Check COMSUB works with aliases (does not expand them twice)
11657*7c356e86SAndroid Build Coastguard Worker	and reentrancy safety
11658*7c356e86SAndroid Build Coastguard Workerstdin:
11659*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname"'\nfor x in "$@"; do print -r -- "$x"; done' >pfn
11660*7c356e86SAndroid Build Coastguard Worker	chmod +x pfn
11661*7c356e86SAndroid Build Coastguard Worker	alias echo='echo a'
11662*7c356e86SAndroid Build Coastguard Worker	foo() {
11663*7c356e86SAndroid Build Coastguard Worker		echo moo
11664*7c356e86SAndroid Build Coastguard Worker		./pfn "$(echo foo)"
11665*7c356e86SAndroid Build Coastguard Worker	}
11666*7c356e86SAndroid Build Coastguard Worker	./pfn "$(echo b)"
11667*7c356e86SAndroid Build Coastguard Worker	typeset -f foo >x
11668*7c356e86SAndroid Build Coastguard Worker	cat x
11669*7c356e86SAndroid Build Coastguard Worker	foo
11670*7c356e86SAndroid Build Coastguard Worker	. ./x
11671*7c356e86SAndroid Build Coastguard Worker	typeset -f foo
11672*7c356e86SAndroid Build Coastguard Worker	foo
11673*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11674*7c356e86SAndroid Build Coastguard Worker	a b
11675*7c356e86SAndroid Build Coastguard Worker	foo() {
11676*7c356e86SAndroid Build Coastguard Worker		\echo a moo
11677*7c356e86SAndroid Build Coastguard Worker		./pfn "$(\echo a foo )"
11678*7c356e86SAndroid Build Coastguard Worker	}
11679*7c356e86SAndroid Build Coastguard Worker	a moo
11680*7c356e86SAndroid Build Coastguard Worker	a foo
11681*7c356e86SAndroid Build Coastguard Worker	foo() {
11682*7c356e86SAndroid Build Coastguard Worker		\echo a moo
11683*7c356e86SAndroid Build Coastguard Worker		./pfn "$(\echo a foo )"
11684*7c356e86SAndroid Build Coastguard Worker	}
11685*7c356e86SAndroid Build Coastguard Worker	a moo
11686*7c356e86SAndroid Build Coastguard Worker	a foo
11687*7c356e86SAndroid Build Coastguard Worker---
11688*7c356e86SAndroid Build Coastguard Workername: comsub-torture
11689*7c356e86SAndroid Build Coastguard Workerdescription:
11690*7c356e86SAndroid Build Coastguard Worker	Check the tree dump functions work correctly
11691*7c356e86SAndroid Build Coastguard Workerstdin:
11692*7c356e86SAndroid Build Coastguard Worker	if [[ -z $__progname ]]; then echo >&2 call me with __progname; exit 1; fi
11693*7c356e86SAndroid Build Coastguard Worker	while IFS= read -r line; do
11694*7c356e86SAndroid Build Coastguard Worker		if [[ $line = '#1' ]]; then
11695*7c356e86SAndroid Build Coastguard Worker			lastf=0
11696*7c356e86SAndroid Build Coastguard Worker			continue
11697*7c356e86SAndroid Build Coastguard Worker		elif [[ $line = EOFN* ]]; then
11698*7c356e86SAndroid Build Coastguard Worker			fbody=$fbody$'\n'$line
11699*7c356e86SAndroid Build Coastguard Worker			continue
11700*7c356e86SAndroid Build Coastguard Worker		elif [[ $line != '#'* ]]; then
11701*7c356e86SAndroid Build Coastguard Worker			fbody=$fbody$'\n\t'$line
11702*7c356e86SAndroid Build Coastguard Worker			continue
11703*7c356e86SAndroid Build Coastguard Worker		fi
11704*7c356e86SAndroid Build Coastguard Worker		if (( lastf )); then
11705*7c356e86SAndroid Build Coastguard Worker			x="inline_${nextf}() {"$fbody$'\n}\n'
11706*7c356e86SAndroid Build Coastguard Worker			print -nr -- "$x"
11707*7c356e86SAndroid Build Coastguard Worker			print -r -- "${x}typeset -f inline_$nextf" | "$__progname"
11708*7c356e86SAndroid Build Coastguard Worker			x="function comsub_$nextf { x=\$("$fbody$'\n); }\n'
11709*7c356e86SAndroid Build Coastguard Worker			print -nr -- "$x"
11710*7c356e86SAndroid Build Coastguard Worker			print -r -- "${x}typeset -f comsub_$nextf" | "$__progname"
11711*7c356e86SAndroid Build Coastguard Worker			x="function reread_$nextf { x=\$(("$fbody$'\n)|tr u x); }\n'
11712*7c356e86SAndroid Build Coastguard Worker			print -nr -- "$x"
11713*7c356e86SAndroid Build Coastguard Worker			print -r -- "${x}typeset -f reread_$nextf" | "$__progname"
11714*7c356e86SAndroid Build Coastguard Worker		fi
11715*7c356e86SAndroid Build Coastguard Worker		lastf=1
11716*7c356e86SAndroid Build Coastguard Worker		fbody=
11717*7c356e86SAndroid Build Coastguard Worker		nextf=${line#?}
11718*7c356e86SAndroid Build Coastguard Worker	done <<'EOD'
11719*7c356e86SAndroid Build Coastguard Worker	#1
11720*7c356e86SAndroid Build Coastguard Worker	#TCOM
11721*7c356e86SAndroid Build Coastguard Worker	vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4"
11722*7c356e86SAndroid Build Coastguard Worker	#TPAREN_TPIPE_TLIST
11723*7c356e86SAndroid Build Coastguard Worker	(echo $foo  |  tr -dc 0-9; echo)
11724*7c356e86SAndroid Build Coastguard Worker	#TAND_TOR
11725*7c356e86SAndroid Build Coastguard Worker	cmd  &&  echo ja  ||  echo nein
11726*7c356e86SAndroid Build Coastguard Worker	#TSELECT
11727*7c356e86SAndroid Build Coastguard Worker	select  file  in  *;  do  echo  "<$file>" ;  break ;  done
11728*7c356e86SAndroid Build Coastguard Worker	#TFOR_TTIME
11729*7c356e86SAndroid Build Coastguard Worker	time  for  i  in  {1,2,3}  ;  do  echo  $i ;  done
11730*7c356e86SAndroid Build Coastguard Worker	#TCASE
11731*7c356e86SAndroid Build Coastguard Worker	case  $foo  in  1)  echo eins;& 2) echo zwei  ;| *) echo kann net bis drei zählen;;  esac
11732*7c356e86SAndroid Build Coastguard Worker	#TIF_TBANG_TDBRACKET_TELIF
11733*7c356e86SAndroid Build Coastguard Worker	if  !  [[  1  =  1  ]]  ;  then  echo eins;  elif [[ 1 = 2 ]]; then echo zwei  ;else echo drei; fi
11734*7c356e86SAndroid Build Coastguard Worker	#TWHILE
11735*7c356e86SAndroid Build Coastguard Worker	i=1; while (( i < 10 )); do echo $i; let ++i; done
11736*7c356e86SAndroid Build Coastguard Worker	#TUNTIL
11737*7c356e86SAndroid Build Coastguard Worker	i=10; until  (( !--i )) ; do echo $i; done
11738*7c356e86SAndroid Build Coastguard Worker	#TCOPROC
11739*7c356e86SAndroid Build Coastguard Worker	cat  *  |&  ls
11740*7c356e86SAndroid Build Coastguard Worker	#TFUNCT_TBRACE_TASYNC
11741*7c356e86SAndroid Build Coastguard Worker	function  korn  {  echo eins; echo zwei ;  }
11742*7c356e86SAndroid Build Coastguard Worker	bourne  ()  {  logger *  &  }
11743*7c356e86SAndroid Build Coastguard Worker	#IOREAD_IOCAT
11744*7c356e86SAndroid Build Coastguard Worker	tr  x  u  0<foo  >>bar
11745*7c356e86SAndroid Build Coastguard Worker	#IOWRITE_IOCLOB_IOHERE_noIOSKIP
11746*7c356e86SAndroid Build Coastguard Worker	cat  >|bar  <<'EOFN'
11747*7c356e86SAndroid Build Coastguard Worker	foo
11748*7c356e86SAndroid Build Coastguard Worker	EOFN
11749*7c356e86SAndroid Build Coastguard Worker	#IOWRITE_noIOCLOB_IOHERE_IOSKIP
11750*7c356e86SAndroid Build Coastguard Worker	cat  1>bar  <<-EOFI
11751*7c356e86SAndroid Build Coastguard Worker	foo
11752*7c356e86SAndroid Build Coastguard Worker	EOFI
11753*7c356e86SAndroid Build Coastguard Worker	#IORDWR_IODUP
11754*7c356e86SAndroid Build Coastguard Worker	sh  1<>/dev/console  0<&1  2>&1
11755*7c356e86SAndroid Build Coastguard Worker	#COMSUB_EXPRSUB_FUNSUB_VALSUB
11756*7c356e86SAndroid Build Coastguard Worker	echo $(true) $((1+ 2)) ${  :;} ${| REPLY=x;}
11757*7c356e86SAndroid Build Coastguard Worker	#QCHAR_OQUOTE_CQUOTE
11758*7c356e86SAndroid Build Coastguard Worker	echo fo\ob\"a\`r\'b\$az
11759*7c356e86SAndroid Build Coastguard Worker	echo "fo\ob\"a\`r\'b\$az"
11760*7c356e86SAndroid Build Coastguard Worker	echo 'fo\ob\"a\`r'\''b\$az'
11761*7c356e86SAndroid Build Coastguard Worker	#OSUBST_CSUBST_OPAT_SPAT_CPAT
11762*7c356e86SAndroid Build Coastguard Worker	[[ ${foo#bl\(u\)b} = @(bar|baz) ]]
11763*7c356e86SAndroid Build Coastguard Worker	#heredoc_closed
11764*7c356e86SAndroid Build Coastguard Worker	x=$(cat <<EOFN
11765*7c356e86SAndroid Build Coastguard Worker	note there must be no space between EOFN and )
11766*7c356e86SAndroid Build Coastguard Worker	EOFN); echo $x
11767*7c356e86SAndroid Build Coastguard Worker	#heredoc_space
11768*7c356e86SAndroid Build Coastguard Worker	x=$(cat <<EOFN\
11769*7c356e86SAndroid Build Coastguard Worker	note the space between EOFN and ) is actually part of the here document marker
11770*7c356e86SAndroid Build Coastguard Worker	EOFN ); echo $x
11771*7c356e86SAndroid Build Coastguard Worker	#patch_motd
11772*7c356e86SAndroid Build Coastguard Worker	x=$(sysctl -n kern.version | sed 1q)
11773*7c356e86SAndroid Build Coastguard Worker	[[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \
11774*7c356e86SAndroid Build Coastguard Worker	    ed -s /etc/motd 2>&1 <<-EOF
11775*7c356e86SAndroid Build Coastguard Worker		1,/^\$/d
11776*7c356e86SAndroid Build Coastguard Worker		0a
11777*7c356e86SAndroid Build Coastguard Worker			$x
11778*7c356e86SAndroid Build Coastguard Worker
11779*7c356e86SAndroid Build Coastguard Worker		.
11780*7c356e86SAndroid Build Coastguard Worker		wq
11781*7c356e86SAndroid Build Coastguard Worker	EOF)" = @(?) ]] && rm -f /etc/motd
11782*7c356e86SAndroid Build Coastguard Worker	if [[ ! -s /etc/motd ]]; then
11783*7c356e86SAndroid Build Coastguard Worker		install -c -o root -g wheel -m 664 /dev/null /etc/motd
11784*7c356e86SAndroid Build Coastguard Worker		print -- "$x\n" >/etc/motd
11785*7c356e86SAndroid Build Coastguard Worker	fi
11786*7c356e86SAndroid Build Coastguard Worker	#wdarrassign
11787*7c356e86SAndroid Build Coastguard Worker	case x in
11788*7c356e86SAndroid Build Coastguard Worker	x) a+=b; c+=(d e)
11789*7c356e86SAndroid Build Coastguard Worker	esac
11790*7c356e86SAndroid Build Coastguard Worker	#0
11791*7c356e86SAndroid Build Coastguard Worker	EOD
11792*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
11793*7c356e86SAndroid Build Coastguard Worker	inline_TCOM() {
11794*7c356e86SAndroid Build Coastguard Worker		vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4"
11795*7c356e86SAndroid Build Coastguard Worker	}
11796*7c356e86SAndroid Build Coastguard Worker	inline_TCOM() {
11797*7c356e86SAndroid Build Coastguard Worker		vara=1 varb="2  3" \cmd arg1 $arg2 "$arg3  4"
11798*7c356e86SAndroid Build Coastguard Worker	}
11799*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOM { x=$(
11800*7c356e86SAndroid Build Coastguard Worker		vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4"
11801*7c356e86SAndroid Build Coastguard Worker	); }
11802*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOM {
11803*7c356e86SAndroid Build Coastguard Worker		x=$(vara=1 varb="2  3" \cmd arg1 $arg2 "$arg3  4" )
11804*7c356e86SAndroid Build Coastguard Worker	}
11805*7c356e86SAndroid Build Coastguard Worker	function reread_TCOM { x=$((
11806*7c356e86SAndroid Build Coastguard Worker		vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4"
11807*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11808*7c356e86SAndroid Build Coastguard Worker	function reread_TCOM {
11809*7c356e86SAndroid Build Coastguard Worker		x=$( ( vara=1 varb="2  3" \cmd arg1 $arg2 "$arg3  4" ) | \tr u x )
11810*7c356e86SAndroid Build Coastguard Worker	}
11811*7c356e86SAndroid Build Coastguard Worker	inline_TPAREN_TPIPE_TLIST() {
11812*7c356e86SAndroid Build Coastguard Worker		(echo $foo  |  tr -dc 0-9; echo)
11813*7c356e86SAndroid Build Coastguard Worker	}
11814*7c356e86SAndroid Build Coastguard Worker	inline_TPAREN_TPIPE_TLIST() {
11815*7c356e86SAndroid Build Coastguard Worker		( \echo $foo | \tr -dc 0-9
11816*7c356e86SAndroid Build Coastguard Worker		  \echo )
11817*7c356e86SAndroid Build Coastguard Worker	}
11818*7c356e86SAndroid Build Coastguard Worker	function comsub_TPAREN_TPIPE_TLIST { x=$(
11819*7c356e86SAndroid Build Coastguard Worker		(echo $foo  |  tr -dc 0-9; echo)
11820*7c356e86SAndroid Build Coastguard Worker	); }
11821*7c356e86SAndroid Build Coastguard Worker	function comsub_TPAREN_TPIPE_TLIST {
11822*7c356e86SAndroid Build Coastguard Worker		x=$( ( \echo $foo | \tr -dc 0-9 ; \echo ) )
11823*7c356e86SAndroid Build Coastguard Worker	}
11824*7c356e86SAndroid Build Coastguard Worker	function reread_TPAREN_TPIPE_TLIST { x=$((
11825*7c356e86SAndroid Build Coastguard Worker		(echo $foo  |  tr -dc 0-9; echo)
11826*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11827*7c356e86SAndroid Build Coastguard Worker	function reread_TPAREN_TPIPE_TLIST {
11828*7c356e86SAndroid Build Coastguard Worker		x=$( ( ( \echo $foo | \tr -dc 0-9 ; \echo ) ) | \tr u x )
11829*7c356e86SAndroid Build Coastguard Worker	}
11830*7c356e86SAndroid Build Coastguard Worker	inline_TAND_TOR() {
11831*7c356e86SAndroid Build Coastguard Worker		cmd  &&  echo ja  ||  echo nein
11832*7c356e86SAndroid Build Coastguard Worker	}
11833*7c356e86SAndroid Build Coastguard Worker	inline_TAND_TOR() {
11834*7c356e86SAndroid Build Coastguard Worker		\cmd && \echo ja || \echo nein
11835*7c356e86SAndroid Build Coastguard Worker	}
11836*7c356e86SAndroid Build Coastguard Worker	function comsub_TAND_TOR { x=$(
11837*7c356e86SAndroid Build Coastguard Worker		cmd  &&  echo ja  ||  echo nein
11838*7c356e86SAndroid Build Coastguard Worker	); }
11839*7c356e86SAndroid Build Coastguard Worker	function comsub_TAND_TOR {
11840*7c356e86SAndroid Build Coastguard Worker		x=$(\cmd && \echo ja || \echo nein )
11841*7c356e86SAndroid Build Coastguard Worker	}
11842*7c356e86SAndroid Build Coastguard Worker	function reread_TAND_TOR { x=$((
11843*7c356e86SAndroid Build Coastguard Worker		cmd  &&  echo ja  ||  echo nein
11844*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11845*7c356e86SAndroid Build Coastguard Worker	function reread_TAND_TOR {
11846*7c356e86SAndroid Build Coastguard Worker		x=$( ( \cmd && \echo ja || \echo nein ) | \tr u x )
11847*7c356e86SAndroid Build Coastguard Worker	}
11848*7c356e86SAndroid Build Coastguard Worker	inline_TSELECT() {
11849*7c356e86SAndroid Build Coastguard Worker		select  file  in  *;  do  echo  "<$file>" ;  break ;  done
11850*7c356e86SAndroid Build Coastguard Worker	}
11851*7c356e86SAndroid Build Coastguard Worker	inline_TSELECT() {
11852*7c356e86SAndroid Build Coastguard Worker		select file in *
11853*7c356e86SAndroid Build Coastguard Worker		do
11854*7c356e86SAndroid Build Coastguard Worker			\echo "<$file>"
11855*7c356e86SAndroid Build Coastguard Worker			\break
11856*7c356e86SAndroid Build Coastguard Worker		done
11857*7c356e86SAndroid Build Coastguard Worker	}
11858*7c356e86SAndroid Build Coastguard Worker	function comsub_TSELECT { x=$(
11859*7c356e86SAndroid Build Coastguard Worker		select  file  in  *;  do  echo  "<$file>" ;  break ;  done
11860*7c356e86SAndroid Build Coastguard Worker	); }
11861*7c356e86SAndroid Build Coastguard Worker	function comsub_TSELECT {
11862*7c356e86SAndroid Build Coastguard Worker		x=$(select file in * ; do \echo "<$file>" ; \break ; done )
11863*7c356e86SAndroid Build Coastguard Worker	}
11864*7c356e86SAndroid Build Coastguard Worker	function reread_TSELECT { x=$((
11865*7c356e86SAndroid Build Coastguard Worker		select  file  in  *;  do  echo  "<$file>" ;  break ;  done
11866*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11867*7c356e86SAndroid Build Coastguard Worker	function reread_TSELECT {
11868*7c356e86SAndroid Build Coastguard Worker		x=$( ( select file in * ; do \echo "<$file>" ; \break ; done ) | \tr u x )
11869*7c356e86SAndroid Build Coastguard Worker	}
11870*7c356e86SAndroid Build Coastguard Worker	inline_TFOR_TTIME() {
11871*7c356e86SAndroid Build Coastguard Worker		time  for  i  in  {1,2,3}  ;  do  echo  $i ;  done
11872*7c356e86SAndroid Build Coastguard Worker	}
11873*7c356e86SAndroid Build Coastguard Worker	inline_TFOR_TTIME() {
11874*7c356e86SAndroid Build Coastguard Worker		time for i in {1,2,3}
11875*7c356e86SAndroid Build Coastguard Worker		do
11876*7c356e86SAndroid Build Coastguard Worker			\echo $i
11877*7c356e86SAndroid Build Coastguard Worker		done
11878*7c356e86SAndroid Build Coastguard Worker	}
11879*7c356e86SAndroid Build Coastguard Worker	function comsub_TFOR_TTIME { x=$(
11880*7c356e86SAndroid Build Coastguard Worker		time  for  i  in  {1,2,3}  ;  do  echo  $i ;  done
11881*7c356e86SAndroid Build Coastguard Worker	); }
11882*7c356e86SAndroid Build Coastguard Worker	function comsub_TFOR_TTIME {
11883*7c356e86SAndroid Build Coastguard Worker		x=$(time for i in {1,2,3} ; do \echo $i ; done )
11884*7c356e86SAndroid Build Coastguard Worker	}
11885*7c356e86SAndroid Build Coastguard Worker	function reread_TFOR_TTIME { x=$((
11886*7c356e86SAndroid Build Coastguard Worker		time  for  i  in  {1,2,3}  ;  do  echo  $i ;  done
11887*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11888*7c356e86SAndroid Build Coastguard Worker	function reread_TFOR_TTIME {
11889*7c356e86SAndroid Build Coastguard Worker		x=$( ( time for i in {1,2,3} ; do \echo $i ; done ) | \tr u x )
11890*7c356e86SAndroid Build Coastguard Worker	}
11891*7c356e86SAndroid Build Coastguard Worker	inline_TCASE() {
11892*7c356e86SAndroid Build Coastguard Worker		case  $foo  in  1)  echo eins;& 2) echo zwei  ;| *) echo kann net bis drei zählen;;  esac
11893*7c356e86SAndroid Build Coastguard Worker	}
11894*7c356e86SAndroid Build Coastguard Worker	inline_TCASE() {
11895*7c356e86SAndroid Build Coastguard Worker		case $foo in
11896*7c356e86SAndroid Build Coastguard Worker		(1)
11897*7c356e86SAndroid Build Coastguard Worker			\echo eins
11898*7c356e86SAndroid Build Coastguard Worker			;&
11899*7c356e86SAndroid Build Coastguard Worker		(2)
11900*7c356e86SAndroid Build Coastguard Worker			\echo zwei
11901*7c356e86SAndroid Build Coastguard Worker			;|
11902*7c356e86SAndroid Build Coastguard Worker		(*)
11903*7c356e86SAndroid Build Coastguard Worker			\echo kann net bis drei zählen
11904*7c356e86SAndroid Build Coastguard Worker			;;
11905*7c356e86SAndroid Build Coastguard Worker		esac
11906*7c356e86SAndroid Build Coastguard Worker	}
11907*7c356e86SAndroid Build Coastguard Worker	function comsub_TCASE { x=$(
11908*7c356e86SAndroid Build Coastguard Worker		case  $foo  in  1)  echo eins;& 2) echo zwei  ;| *) echo kann net bis drei zählen;;  esac
11909*7c356e86SAndroid Build Coastguard Worker	); }
11910*7c356e86SAndroid Build Coastguard Worker	function comsub_TCASE {
11911*7c356e86SAndroid Build Coastguard Worker		x=$(case $foo in (1) \echo eins  ;& (2) \echo zwei  ;| (*) \echo kann net bis drei zählen  ;; esac )
11912*7c356e86SAndroid Build Coastguard Worker	}
11913*7c356e86SAndroid Build Coastguard Worker	function reread_TCASE { x=$((
11914*7c356e86SAndroid Build Coastguard Worker		case  $foo  in  1)  echo eins;& 2) echo zwei  ;| *) echo kann net bis drei zählen;;  esac
11915*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11916*7c356e86SAndroid Build Coastguard Worker	function reread_TCASE {
11917*7c356e86SAndroid Build Coastguard Worker		x=$( ( case $foo in (1) \echo eins  ;& (2) \echo zwei  ;| (*) \echo kann net bis drei zählen  ;; esac ) | \tr u x )
11918*7c356e86SAndroid Build Coastguard Worker	}
11919*7c356e86SAndroid Build Coastguard Worker	inline_TIF_TBANG_TDBRACKET_TELIF() {
11920*7c356e86SAndroid Build Coastguard Worker		if  !  [[  1  =  1  ]]  ;  then  echo eins;  elif [[ 1 = 2 ]]; then echo zwei  ;else echo drei; fi
11921*7c356e86SAndroid Build Coastguard Worker	}
11922*7c356e86SAndroid Build Coastguard Worker	inline_TIF_TBANG_TDBRACKET_TELIF() {
11923*7c356e86SAndroid Build Coastguard Worker		if ! [[ 1 = 1 ]]
11924*7c356e86SAndroid Build Coastguard Worker		then
11925*7c356e86SAndroid Build Coastguard Worker			\echo eins
11926*7c356e86SAndroid Build Coastguard Worker		elif [[ 1 = 2 ]]
11927*7c356e86SAndroid Build Coastguard Worker		then
11928*7c356e86SAndroid Build Coastguard Worker			\echo zwei
11929*7c356e86SAndroid Build Coastguard Worker		else
11930*7c356e86SAndroid Build Coastguard Worker			\echo drei
11931*7c356e86SAndroid Build Coastguard Worker		fi
11932*7c356e86SAndroid Build Coastguard Worker	}
11933*7c356e86SAndroid Build Coastguard Worker	function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$(
11934*7c356e86SAndroid Build Coastguard Worker		if  !  [[  1  =  1  ]]  ;  then  echo eins;  elif [[ 1 = 2 ]]; then echo zwei  ;else echo drei; fi
11935*7c356e86SAndroid Build Coastguard Worker	); }
11936*7c356e86SAndroid Build Coastguard Worker	function comsub_TIF_TBANG_TDBRACKET_TELIF {
11937*7c356e86SAndroid Build Coastguard Worker		x=$(if ! [[ 1 = 1 ]] ; then \echo eins ; elif [[ 1 = 2 ]] ; then \echo zwei ; else \echo drei ; fi )
11938*7c356e86SAndroid Build Coastguard Worker	}
11939*7c356e86SAndroid Build Coastguard Worker	function reread_TIF_TBANG_TDBRACKET_TELIF { x=$((
11940*7c356e86SAndroid Build Coastguard Worker		if  !  [[  1  =  1  ]]  ;  then  echo eins;  elif [[ 1 = 2 ]]; then echo zwei  ;else echo drei; fi
11941*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11942*7c356e86SAndroid Build Coastguard Worker	function reread_TIF_TBANG_TDBRACKET_TELIF {
11943*7c356e86SAndroid Build Coastguard Worker		x=$( ( if ! [[ 1 = 1 ]] ; then \echo eins ; elif [[ 1 = 2 ]] ; then \echo zwei ; else \echo drei ; fi ) | \tr u x )
11944*7c356e86SAndroid Build Coastguard Worker	}
11945*7c356e86SAndroid Build Coastguard Worker	inline_TWHILE() {
11946*7c356e86SAndroid Build Coastguard Worker		i=1; while (( i < 10 )); do echo $i; let ++i; done
11947*7c356e86SAndroid Build Coastguard Worker	}
11948*7c356e86SAndroid Build Coastguard Worker	inline_TWHILE() {
11949*7c356e86SAndroid Build Coastguard Worker		i=1
11950*7c356e86SAndroid Build Coastguard Worker		while {
11951*7c356e86SAndroid Build Coastguard Worker			      \\builtin let " i < 10 "
11952*7c356e86SAndroid Build Coastguard Worker		      }
11953*7c356e86SAndroid Build Coastguard Worker		do
11954*7c356e86SAndroid Build Coastguard Worker			\echo $i
11955*7c356e86SAndroid Build Coastguard Worker			\let ++i
11956*7c356e86SAndroid Build Coastguard Worker		done
11957*7c356e86SAndroid Build Coastguard Worker	}
11958*7c356e86SAndroid Build Coastguard Worker	function comsub_TWHILE { x=$(
11959*7c356e86SAndroid Build Coastguard Worker		i=1; while (( i < 10 )); do echo $i; let ++i; done
11960*7c356e86SAndroid Build Coastguard Worker	); }
11961*7c356e86SAndroid Build Coastguard Worker	function comsub_TWHILE {
11962*7c356e86SAndroid Build Coastguard Worker		x=$(i=1 ; while { \\builtin let " i < 10 " ; } ; do \echo $i ; \let ++i ; done )
11963*7c356e86SAndroid Build Coastguard Worker	}
11964*7c356e86SAndroid Build Coastguard Worker	function reread_TWHILE { x=$((
11965*7c356e86SAndroid Build Coastguard Worker		i=1; while (( i < 10 )); do echo $i; let ++i; done
11966*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11967*7c356e86SAndroid Build Coastguard Worker	function reread_TWHILE {
11968*7c356e86SAndroid Build Coastguard Worker		x=$( ( i=1 ; while { \\builtin let " i < 10 " ; } ; do \echo $i ; \let ++i ; done ) | \tr u x )
11969*7c356e86SAndroid Build Coastguard Worker	}
11970*7c356e86SAndroid Build Coastguard Worker	inline_TUNTIL() {
11971*7c356e86SAndroid Build Coastguard Worker		i=10; until  (( !--i )) ; do echo $i; done
11972*7c356e86SAndroid Build Coastguard Worker	}
11973*7c356e86SAndroid Build Coastguard Worker	inline_TUNTIL() {
11974*7c356e86SAndroid Build Coastguard Worker		i=10
11975*7c356e86SAndroid Build Coastguard Worker		until {
11976*7c356e86SAndroid Build Coastguard Worker			      \\builtin let " !--i "
11977*7c356e86SAndroid Build Coastguard Worker		      }
11978*7c356e86SAndroid Build Coastguard Worker		do
11979*7c356e86SAndroid Build Coastguard Worker			\echo $i
11980*7c356e86SAndroid Build Coastguard Worker		done
11981*7c356e86SAndroid Build Coastguard Worker	}
11982*7c356e86SAndroid Build Coastguard Worker	function comsub_TUNTIL { x=$(
11983*7c356e86SAndroid Build Coastguard Worker		i=10; until  (( !--i )) ; do echo $i; done
11984*7c356e86SAndroid Build Coastguard Worker	); }
11985*7c356e86SAndroid Build Coastguard Worker	function comsub_TUNTIL {
11986*7c356e86SAndroid Build Coastguard Worker		x=$(i=10 ; until { \\builtin let " !--i " ; } ; do \echo $i ; done )
11987*7c356e86SAndroid Build Coastguard Worker	}
11988*7c356e86SAndroid Build Coastguard Worker	function reread_TUNTIL { x=$((
11989*7c356e86SAndroid Build Coastguard Worker		i=10; until  (( !--i )) ; do echo $i; done
11990*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
11991*7c356e86SAndroid Build Coastguard Worker	function reread_TUNTIL {
11992*7c356e86SAndroid Build Coastguard Worker		x=$( ( i=10 ; until { \\builtin let " !--i " ; } ; do \echo $i ; done ) | \tr u x )
11993*7c356e86SAndroid Build Coastguard Worker	}
11994*7c356e86SAndroid Build Coastguard Worker	inline_TCOPROC() {
11995*7c356e86SAndroid Build Coastguard Worker		cat  *  |&  ls
11996*7c356e86SAndroid Build Coastguard Worker	}
11997*7c356e86SAndroid Build Coastguard Worker	inline_TCOPROC() {
11998*7c356e86SAndroid Build Coastguard Worker		\cat * |&
11999*7c356e86SAndroid Build Coastguard Worker		\ls
12000*7c356e86SAndroid Build Coastguard Worker	}
12001*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOPROC { x=$(
12002*7c356e86SAndroid Build Coastguard Worker		cat  *  |&  ls
12003*7c356e86SAndroid Build Coastguard Worker	); }
12004*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOPROC {
12005*7c356e86SAndroid Build Coastguard Worker		x=$(\cat * |&  \ls )
12006*7c356e86SAndroid Build Coastguard Worker	}
12007*7c356e86SAndroid Build Coastguard Worker	function reread_TCOPROC { x=$((
12008*7c356e86SAndroid Build Coastguard Worker		cat  *  |&  ls
12009*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12010*7c356e86SAndroid Build Coastguard Worker	function reread_TCOPROC {
12011*7c356e86SAndroid Build Coastguard Worker		x=$( ( \cat * |&  \ls ) | \tr u x )
12012*7c356e86SAndroid Build Coastguard Worker	}
12013*7c356e86SAndroid Build Coastguard Worker	inline_TFUNCT_TBRACE_TASYNC() {
12014*7c356e86SAndroid Build Coastguard Worker		function  korn  {  echo eins; echo zwei ;  }
12015*7c356e86SAndroid Build Coastguard Worker		bourne  ()  {  logger *  &  }
12016*7c356e86SAndroid Build Coastguard Worker	}
12017*7c356e86SAndroid Build Coastguard Worker	inline_TFUNCT_TBRACE_TASYNC() {
12018*7c356e86SAndroid Build Coastguard Worker		function korn {
12019*7c356e86SAndroid Build Coastguard Worker			\echo eins
12020*7c356e86SAndroid Build Coastguard Worker			\echo zwei
12021*7c356e86SAndroid Build Coastguard Worker		}
12022*7c356e86SAndroid Build Coastguard Worker		bourne() {
12023*7c356e86SAndroid Build Coastguard Worker			\logger * &
12024*7c356e86SAndroid Build Coastguard Worker		}
12025*7c356e86SAndroid Build Coastguard Worker	}
12026*7c356e86SAndroid Build Coastguard Worker	function comsub_TFUNCT_TBRACE_TASYNC { x=$(
12027*7c356e86SAndroid Build Coastguard Worker		function  korn  {  echo eins; echo zwei ;  }
12028*7c356e86SAndroid Build Coastguard Worker		bourne  ()  {  logger *  &  }
12029*7c356e86SAndroid Build Coastguard Worker	); }
12030*7c356e86SAndroid Build Coastguard Worker	function comsub_TFUNCT_TBRACE_TASYNC {
12031*7c356e86SAndroid Build Coastguard Worker		x=$(function korn { \echo eins ; \echo zwei ; } ; bourne() { \logger * &  } )
12032*7c356e86SAndroid Build Coastguard Worker	}
12033*7c356e86SAndroid Build Coastguard Worker	function reread_TFUNCT_TBRACE_TASYNC { x=$((
12034*7c356e86SAndroid Build Coastguard Worker		function  korn  {  echo eins; echo zwei ;  }
12035*7c356e86SAndroid Build Coastguard Worker		bourne  ()  {  logger *  &  }
12036*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12037*7c356e86SAndroid Build Coastguard Worker	function reread_TFUNCT_TBRACE_TASYNC {
12038*7c356e86SAndroid Build Coastguard Worker		x=$( ( function korn { \echo eins ; \echo zwei ; } ; bourne() { \logger * &  } ) | \tr u x )
12039*7c356e86SAndroid Build Coastguard Worker	}
12040*7c356e86SAndroid Build Coastguard Worker	inline_IOREAD_IOCAT() {
12041*7c356e86SAndroid Build Coastguard Worker		tr  x  u  0<foo  >>bar
12042*7c356e86SAndroid Build Coastguard Worker	}
12043*7c356e86SAndroid Build Coastguard Worker	inline_IOREAD_IOCAT() {
12044*7c356e86SAndroid Build Coastguard Worker		\tr x u <foo >>bar
12045*7c356e86SAndroid Build Coastguard Worker	}
12046*7c356e86SAndroid Build Coastguard Worker	function comsub_IOREAD_IOCAT { x=$(
12047*7c356e86SAndroid Build Coastguard Worker		tr  x  u  0<foo  >>bar
12048*7c356e86SAndroid Build Coastguard Worker	); }
12049*7c356e86SAndroid Build Coastguard Worker	function comsub_IOREAD_IOCAT {
12050*7c356e86SAndroid Build Coastguard Worker		x=$(\tr x u <foo >>bar )
12051*7c356e86SAndroid Build Coastguard Worker	}
12052*7c356e86SAndroid Build Coastguard Worker	function reread_IOREAD_IOCAT { x=$((
12053*7c356e86SAndroid Build Coastguard Worker		tr  x  u  0<foo  >>bar
12054*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12055*7c356e86SAndroid Build Coastguard Worker	function reread_IOREAD_IOCAT {
12056*7c356e86SAndroid Build Coastguard Worker		x=$( ( \tr x u <foo >>bar ) | \tr u x )
12057*7c356e86SAndroid Build Coastguard Worker	}
12058*7c356e86SAndroid Build Coastguard Worker	inline_IOWRITE_IOCLOB_IOHERE_noIOSKIP() {
12059*7c356e86SAndroid Build Coastguard Worker		cat  >|bar  <<'EOFN'
12060*7c356e86SAndroid Build Coastguard Worker		foo
12061*7c356e86SAndroid Build Coastguard Worker	EOFN
12062*7c356e86SAndroid Build Coastguard Worker	}
12063*7c356e86SAndroid Build Coastguard Worker	inline_IOWRITE_IOCLOB_IOHERE_noIOSKIP() {
12064*7c356e86SAndroid Build Coastguard Worker		\cat >|bar <<"EOFN"
12065*7c356e86SAndroid Build Coastguard Worker		foo
12066*7c356e86SAndroid Build Coastguard Worker	EOFN
12067*7c356e86SAndroid Build Coastguard Worker
12068*7c356e86SAndroid Build Coastguard Worker	}
12069*7c356e86SAndroid Build Coastguard Worker	function comsub_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$(
12070*7c356e86SAndroid Build Coastguard Worker		cat  >|bar  <<'EOFN'
12071*7c356e86SAndroid Build Coastguard Worker		foo
12072*7c356e86SAndroid Build Coastguard Worker	EOFN
12073*7c356e86SAndroid Build Coastguard Worker	); }
12074*7c356e86SAndroid Build Coastguard Worker	function comsub_IOWRITE_IOCLOB_IOHERE_noIOSKIP {
12075*7c356e86SAndroid Build Coastguard Worker		x=$(\cat >|bar <<"EOFN"
12076*7c356e86SAndroid Build Coastguard Worker		foo
12077*7c356e86SAndroid Build Coastguard Worker	EOFN
12078*7c356e86SAndroid Build Coastguard Worker	)
12079*7c356e86SAndroid Build Coastguard Worker	}
12080*7c356e86SAndroid Build Coastguard Worker	function reread_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$((
12081*7c356e86SAndroid Build Coastguard Worker		cat  >|bar  <<'EOFN'
12082*7c356e86SAndroid Build Coastguard Worker		foo
12083*7c356e86SAndroid Build Coastguard Worker	EOFN
12084*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12085*7c356e86SAndroid Build Coastguard Worker	function reread_IOWRITE_IOCLOB_IOHERE_noIOSKIP {
12086*7c356e86SAndroid Build Coastguard Worker		x=$( ( \cat >|bar <<"EOFN" ) | \tr u x
12087*7c356e86SAndroid Build Coastguard Worker		foo
12088*7c356e86SAndroid Build Coastguard Worker	EOFN
12089*7c356e86SAndroid Build Coastguard Worker	)
12090*7c356e86SAndroid Build Coastguard Worker	}
12091*7c356e86SAndroid Build Coastguard Worker	inline_IOWRITE_noIOCLOB_IOHERE_IOSKIP() {
12092*7c356e86SAndroid Build Coastguard Worker		cat  1>bar  <<-EOFI
12093*7c356e86SAndroid Build Coastguard Worker		foo
12094*7c356e86SAndroid Build Coastguard Worker		EOFI
12095*7c356e86SAndroid Build Coastguard Worker	}
12096*7c356e86SAndroid Build Coastguard Worker	inline_IOWRITE_noIOCLOB_IOHERE_IOSKIP() {
12097*7c356e86SAndroid Build Coastguard Worker		\cat >bar <<-EOFI
12098*7c356e86SAndroid Build Coastguard Worker	foo
12099*7c356e86SAndroid Build Coastguard Worker	EOFI
12100*7c356e86SAndroid Build Coastguard Worker
12101*7c356e86SAndroid Build Coastguard Worker	}
12102*7c356e86SAndroid Build Coastguard Worker	function comsub_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$(
12103*7c356e86SAndroid Build Coastguard Worker		cat  1>bar  <<-EOFI
12104*7c356e86SAndroid Build Coastguard Worker		foo
12105*7c356e86SAndroid Build Coastguard Worker		EOFI
12106*7c356e86SAndroid Build Coastguard Worker	); }
12107*7c356e86SAndroid Build Coastguard Worker	function comsub_IOWRITE_noIOCLOB_IOHERE_IOSKIP {
12108*7c356e86SAndroid Build Coastguard Worker		x=$(\cat >bar <<-EOFI
12109*7c356e86SAndroid Build Coastguard Worker	foo
12110*7c356e86SAndroid Build Coastguard Worker	EOFI
12111*7c356e86SAndroid Build Coastguard Worker	)
12112*7c356e86SAndroid Build Coastguard Worker	}
12113*7c356e86SAndroid Build Coastguard Worker	function reread_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$((
12114*7c356e86SAndroid Build Coastguard Worker		cat  1>bar  <<-EOFI
12115*7c356e86SAndroid Build Coastguard Worker		foo
12116*7c356e86SAndroid Build Coastguard Worker		EOFI
12117*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12118*7c356e86SAndroid Build Coastguard Worker	function reread_IOWRITE_noIOCLOB_IOHERE_IOSKIP {
12119*7c356e86SAndroid Build Coastguard Worker		x=$( ( \cat >bar <<-EOFI ) | \tr u x
12120*7c356e86SAndroid Build Coastguard Worker	foo
12121*7c356e86SAndroid Build Coastguard Worker	EOFI
12122*7c356e86SAndroid Build Coastguard Worker	)
12123*7c356e86SAndroid Build Coastguard Worker	}
12124*7c356e86SAndroid Build Coastguard Worker	inline_IORDWR_IODUP() {
12125*7c356e86SAndroid Build Coastguard Worker		sh  1<>/dev/console  0<&1  2>&1
12126*7c356e86SAndroid Build Coastguard Worker	}
12127*7c356e86SAndroid Build Coastguard Worker	inline_IORDWR_IODUP() {
12128*7c356e86SAndroid Build Coastguard Worker		\sh 1<>/dev/console <&1 2>&1
12129*7c356e86SAndroid Build Coastguard Worker	}
12130*7c356e86SAndroid Build Coastguard Worker	function comsub_IORDWR_IODUP { x=$(
12131*7c356e86SAndroid Build Coastguard Worker		sh  1<>/dev/console  0<&1  2>&1
12132*7c356e86SAndroid Build Coastguard Worker	); }
12133*7c356e86SAndroid Build Coastguard Worker	function comsub_IORDWR_IODUP {
12134*7c356e86SAndroid Build Coastguard Worker		x=$(\sh 1<>/dev/console <&1 2>&1 )
12135*7c356e86SAndroid Build Coastguard Worker	}
12136*7c356e86SAndroid Build Coastguard Worker	function reread_IORDWR_IODUP { x=$((
12137*7c356e86SAndroid Build Coastguard Worker		sh  1<>/dev/console  0<&1  2>&1
12138*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12139*7c356e86SAndroid Build Coastguard Worker	function reread_IORDWR_IODUP {
12140*7c356e86SAndroid Build Coastguard Worker		x=$( ( \sh 1<>/dev/console <&1 2>&1 ) | \tr u x )
12141*7c356e86SAndroid Build Coastguard Worker	}
12142*7c356e86SAndroid Build Coastguard Worker	inline_COMSUB_EXPRSUB_FUNSUB_VALSUB() {
12143*7c356e86SAndroid Build Coastguard Worker		echo $(true) $((1+ 2)) ${  :;} ${| REPLY=x;}
12144*7c356e86SAndroid Build Coastguard Worker	}
12145*7c356e86SAndroid Build Coastguard Worker	inline_COMSUB_EXPRSUB_FUNSUB_VALSUB() {
12146*7c356e86SAndroid Build Coastguard Worker		\echo $(\true ) $((1+ 2)) ${ \: ;} ${|REPLY=x ;}
12147*7c356e86SAndroid Build Coastguard Worker	}
12148*7c356e86SAndroid Build Coastguard Worker	function comsub_COMSUB_EXPRSUB_FUNSUB_VALSUB { x=$(
12149*7c356e86SAndroid Build Coastguard Worker		echo $(true) $((1+ 2)) ${  :;} ${| REPLY=x;}
12150*7c356e86SAndroid Build Coastguard Worker	); }
12151*7c356e86SAndroid Build Coastguard Worker	function comsub_COMSUB_EXPRSUB_FUNSUB_VALSUB {
12152*7c356e86SAndroid Build Coastguard Worker		x=$(\echo $(\true ) $((1+ 2)) ${ \: ;} ${|REPLY=x ;} )
12153*7c356e86SAndroid Build Coastguard Worker	}
12154*7c356e86SAndroid Build Coastguard Worker	function reread_COMSUB_EXPRSUB_FUNSUB_VALSUB { x=$((
12155*7c356e86SAndroid Build Coastguard Worker		echo $(true) $((1+ 2)) ${  :;} ${| REPLY=x;}
12156*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12157*7c356e86SAndroid Build Coastguard Worker	function reread_COMSUB_EXPRSUB_FUNSUB_VALSUB {
12158*7c356e86SAndroid Build Coastguard Worker		x=$( ( \echo $(\true ) $((1+ 2)) ${ \: ;} ${|REPLY=x ;} ) | \tr u x )
12159*7c356e86SAndroid Build Coastguard Worker	}
12160*7c356e86SAndroid Build Coastguard Worker	inline_QCHAR_OQUOTE_CQUOTE() {
12161*7c356e86SAndroid Build Coastguard Worker		echo fo\ob\"a\`r\'b\$az
12162*7c356e86SAndroid Build Coastguard Worker		echo "fo\ob\"a\`r\'b\$az"
12163*7c356e86SAndroid Build Coastguard Worker		echo 'fo\ob\"a\`r'\''b\$az'
12164*7c356e86SAndroid Build Coastguard Worker	}
12165*7c356e86SAndroid Build Coastguard Worker	inline_QCHAR_OQUOTE_CQUOTE() {
12166*7c356e86SAndroid Build Coastguard Worker		\echo fo\ob\"a\`r\'b\$az
12167*7c356e86SAndroid Build Coastguard Worker		\echo "fo\ob\"a\`r\'b\$az"
12168*7c356e86SAndroid Build Coastguard Worker		\echo "fo\\ob\\\"a\\\`r"\'"b\\\$az"
12169*7c356e86SAndroid Build Coastguard Worker	}
12170*7c356e86SAndroid Build Coastguard Worker	function comsub_QCHAR_OQUOTE_CQUOTE { x=$(
12171*7c356e86SAndroid Build Coastguard Worker		echo fo\ob\"a\`r\'b\$az
12172*7c356e86SAndroid Build Coastguard Worker		echo "fo\ob\"a\`r\'b\$az"
12173*7c356e86SAndroid Build Coastguard Worker		echo 'fo\ob\"a\`r'\''b\$az'
12174*7c356e86SAndroid Build Coastguard Worker	); }
12175*7c356e86SAndroid Build Coastguard Worker	function comsub_QCHAR_OQUOTE_CQUOTE {
12176*7c356e86SAndroid Build Coastguard Worker		x=$(\echo fo\ob\"a\`r\'b\$az ; \echo "fo\ob\"a\`r\'b\$az" ; \echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" )
12177*7c356e86SAndroid Build Coastguard Worker	}
12178*7c356e86SAndroid Build Coastguard Worker	function reread_QCHAR_OQUOTE_CQUOTE { x=$((
12179*7c356e86SAndroid Build Coastguard Worker		echo fo\ob\"a\`r\'b\$az
12180*7c356e86SAndroid Build Coastguard Worker		echo "fo\ob\"a\`r\'b\$az"
12181*7c356e86SAndroid Build Coastguard Worker		echo 'fo\ob\"a\`r'\''b\$az'
12182*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12183*7c356e86SAndroid Build Coastguard Worker	function reread_QCHAR_OQUOTE_CQUOTE {
12184*7c356e86SAndroid Build Coastguard Worker		x=$( ( \echo fo\ob\"a\`r\'b\$az ; \echo "fo\ob\"a\`r\'b\$az" ; \echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" ) | \tr u x )
12185*7c356e86SAndroid Build Coastguard Worker	}
12186*7c356e86SAndroid Build Coastguard Worker	inline_OSUBST_CSUBST_OPAT_SPAT_CPAT() {
12187*7c356e86SAndroid Build Coastguard Worker		[[ ${foo#bl\(u\)b} = @(bar|baz) ]]
12188*7c356e86SAndroid Build Coastguard Worker	}
12189*7c356e86SAndroid Build Coastguard Worker	inline_OSUBST_CSUBST_OPAT_SPAT_CPAT() {
12190*7c356e86SAndroid Build Coastguard Worker		[[ ${foo#bl\(u\)b} = @(bar|baz) ]]
12191*7c356e86SAndroid Build Coastguard Worker	}
12192*7c356e86SAndroid Build Coastguard Worker	function comsub_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$(
12193*7c356e86SAndroid Build Coastguard Worker		[[ ${foo#bl\(u\)b} = @(bar|baz) ]]
12194*7c356e86SAndroid Build Coastguard Worker	); }
12195*7c356e86SAndroid Build Coastguard Worker	function comsub_OSUBST_CSUBST_OPAT_SPAT_CPAT {
12196*7c356e86SAndroid Build Coastguard Worker		x=$([[ ${foo#bl\(u\)b} = @(bar|baz) ]] )
12197*7c356e86SAndroid Build Coastguard Worker	}
12198*7c356e86SAndroid Build Coastguard Worker	function reread_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$((
12199*7c356e86SAndroid Build Coastguard Worker		[[ ${foo#bl\(u\)b} = @(bar|baz) ]]
12200*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12201*7c356e86SAndroid Build Coastguard Worker	function reread_OSUBST_CSUBST_OPAT_SPAT_CPAT {
12202*7c356e86SAndroid Build Coastguard Worker		x=$( ( [[ ${foo#bl\(u\)b} = @(bar|baz) ]] ) | \tr u x )
12203*7c356e86SAndroid Build Coastguard Worker	}
12204*7c356e86SAndroid Build Coastguard Worker	inline_heredoc_closed() {
12205*7c356e86SAndroid Build Coastguard Worker		x=$(cat <<EOFN
12206*7c356e86SAndroid Build Coastguard Worker		note there must be no space between EOFN and )
12207*7c356e86SAndroid Build Coastguard Worker	EOFN); echo $x
12208*7c356e86SAndroid Build Coastguard Worker	}
12209*7c356e86SAndroid Build Coastguard Worker	inline_heredoc_closed() {
12210*7c356e86SAndroid Build Coastguard Worker		x=$(\cat <<EOFN
12211*7c356e86SAndroid Build Coastguard Worker		note there must be no space between EOFN and )
12212*7c356e86SAndroid Build Coastguard Worker	EOFN
12213*7c356e86SAndroid Build Coastguard Worker	)
12214*7c356e86SAndroid Build Coastguard Worker		\echo $x
12215*7c356e86SAndroid Build Coastguard Worker	}
12216*7c356e86SAndroid Build Coastguard Worker	function comsub_heredoc_closed { x=$(
12217*7c356e86SAndroid Build Coastguard Worker		x=$(cat <<EOFN
12218*7c356e86SAndroid Build Coastguard Worker		note there must be no space between EOFN and )
12219*7c356e86SAndroid Build Coastguard Worker	EOFN); echo $x
12220*7c356e86SAndroid Build Coastguard Worker	); }
12221*7c356e86SAndroid Build Coastguard Worker	function comsub_heredoc_closed {
12222*7c356e86SAndroid Build Coastguard Worker		x=$(x=$(\cat <<EOFN
12223*7c356e86SAndroid Build Coastguard Worker		note there must be no space between EOFN and )
12224*7c356e86SAndroid Build Coastguard Worker	EOFN
12225*7c356e86SAndroid Build Coastguard Worker	) ; \echo $x )
12226*7c356e86SAndroid Build Coastguard Worker	}
12227*7c356e86SAndroid Build Coastguard Worker	function reread_heredoc_closed { x=$((
12228*7c356e86SAndroid Build Coastguard Worker		x=$(cat <<EOFN
12229*7c356e86SAndroid Build Coastguard Worker		note there must be no space between EOFN and )
12230*7c356e86SAndroid Build Coastguard Worker	EOFN); echo $x
12231*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12232*7c356e86SAndroid Build Coastguard Worker	function reread_heredoc_closed {
12233*7c356e86SAndroid Build Coastguard Worker		x=$( ( x=$(\cat <<EOFN
12234*7c356e86SAndroid Build Coastguard Worker		note there must be no space between EOFN and )
12235*7c356e86SAndroid Build Coastguard Worker	EOFN
12236*7c356e86SAndroid Build Coastguard Worker	) ; \echo $x ) | \tr u x )
12237*7c356e86SAndroid Build Coastguard Worker	}
12238*7c356e86SAndroid Build Coastguard Worker	inline_heredoc_space() {
12239*7c356e86SAndroid Build Coastguard Worker		x=$(cat <<EOFN\
12240*7c356e86SAndroid Build Coastguard Worker		note the space between EOFN and ) is actually part of the here document marker
12241*7c356e86SAndroid Build Coastguard Worker	EOFN ); echo $x
12242*7c356e86SAndroid Build Coastguard Worker	}
12243*7c356e86SAndroid Build Coastguard Worker	inline_heredoc_space() {
12244*7c356e86SAndroid Build Coastguard Worker		x=$(\cat <<EOFN\
12245*7c356e86SAndroid Build Coastguard Worker		note the space between EOFN and ) is actually part of the here document marker
12246*7c356e86SAndroid Build Coastguard Worker	EOFN
12247*7c356e86SAndroid Build Coastguard Worker	)
12248*7c356e86SAndroid Build Coastguard Worker		\echo $x
12249*7c356e86SAndroid Build Coastguard Worker	}
12250*7c356e86SAndroid Build Coastguard Worker	function comsub_heredoc_space { x=$(
12251*7c356e86SAndroid Build Coastguard Worker		x=$(cat <<EOFN\
12252*7c356e86SAndroid Build Coastguard Worker		note the space between EOFN and ) is actually part of the here document marker
12253*7c356e86SAndroid Build Coastguard Worker	EOFN ); echo $x
12254*7c356e86SAndroid Build Coastguard Worker	); }
12255*7c356e86SAndroid Build Coastguard Worker	function comsub_heredoc_space {
12256*7c356e86SAndroid Build Coastguard Worker		x=$(x=$(\cat <<EOFN\
12257*7c356e86SAndroid Build Coastguard Worker		note the space between EOFN and ) is actually part of the here document marker
12258*7c356e86SAndroid Build Coastguard Worker	EOFN
12259*7c356e86SAndroid Build Coastguard Worker	) ; \echo $x )
12260*7c356e86SAndroid Build Coastguard Worker	}
12261*7c356e86SAndroid Build Coastguard Worker	function reread_heredoc_space { x=$((
12262*7c356e86SAndroid Build Coastguard Worker		x=$(cat <<EOFN\
12263*7c356e86SAndroid Build Coastguard Worker		note the space between EOFN and ) is actually part of the here document marker
12264*7c356e86SAndroid Build Coastguard Worker	EOFN ); echo $x
12265*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12266*7c356e86SAndroid Build Coastguard Worker	function reread_heredoc_space {
12267*7c356e86SAndroid Build Coastguard Worker		x=$( ( x=$(\cat <<EOFN\
12268*7c356e86SAndroid Build Coastguard Worker		note the space between EOFN and ) is actually part of the here document marker
12269*7c356e86SAndroid Build Coastguard Worker	EOFN
12270*7c356e86SAndroid Build Coastguard Worker	) ; \echo $x ) | \tr u x )
12271*7c356e86SAndroid Build Coastguard Worker	}
12272*7c356e86SAndroid Build Coastguard Worker	inline_patch_motd() {
12273*7c356e86SAndroid Build Coastguard Worker		x=$(sysctl -n kern.version | sed 1q)
12274*7c356e86SAndroid Build Coastguard Worker		[[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \
12275*7c356e86SAndroid Build Coastguard Worker		    ed -s /etc/motd 2>&1 <<-EOF
12276*7c356e86SAndroid Build Coastguard Worker			1,/^\$/d
12277*7c356e86SAndroid Build Coastguard Worker			0a
12278*7c356e86SAndroid Build Coastguard Worker				$x
12279*7c356e86SAndroid Build Coastguard Worker
12280*7c356e86SAndroid Build Coastguard Worker			.
12281*7c356e86SAndroid Build Coastguard Worker			wq
12282*7c356e86SAndroid Build Coastguard Worker		EOF)" = @(?) ]] && rm -f /etc/motd
12283*7c356e86SAndroid Build Coastguard Worker		if [[ ! -s /etc/motd ]]; then
12284*7c356e86SAndroid Build Coastguard Worker			install -c -o root -g wheel -m 664 /dev/null /etc/motd
12285*7c356e86SAndroid Build Coastguard Worker			print -- "$x\n" >/etc/motd
12286*7c356e86SAndroid Build Coastguard Worker		fi
12287*7c356e86SAndroid Build Coastguard Worker	}
12288*7c356e86SAndroid Build Coastguard Worker	inline_patch_motd() {
12289*7c356e86SAndroid Build Coastguard Worker		x=$(\sysctl -n kern.version | \sed 1q )
12290*7c356e86SAndroid Build Coastguard Worker		[[ -s /etc/motd && "$([[ "$(\head -1 /etc/motd )" != $x ]] && \ed -s /etc/motd 2>&1 <<-EOF
12291*7c356e86SAndroid Build Coastguard Worker	1,/^\$/d
12292*7c356e86SAndroid Build Coastguard Worker	0a
12293*7c356e86SAndroid Build Coastguard Worker	$x
12294*7c356e86SAndroid Build Coastguard Worker
12295*7c356e86SAndroid Build Coastguard Worker	.
12296*7c356e86SAndroid Build Coastguard Worker	wq
12297*7c356e86SAndroid Build Coastguard Worker	EOF
12298*7c356e86SAndroid Build Coastguard Worker	)" = @(?) ]] && \rm -f /etc/motd
12299*7c356e86SAndroid Build Coastguard Worker		if [[ ! -s /etc/motd ]]
12300*7c356e86SAndroid Build Coastguard Worker		then
12301*7c356e86SAndroid Build Coastguard Worker			\install -c -o root -g wheel -m 664 /dev/null /etc/motd
12302*7c356e86SAndroid Build Coastguard Worker			\print -- "$x\n" >/etc/motd
12303*7c356e86SAndroid Build Coastguard Worker		fi
12304*7c356e86SAndroid Build Coastguard Worker	}
12305*7c356e86SAndroid Build Coastguard Worker	function comsub_patch_motd { x=$(
12306*7c356e86SAndroid Build Coastguard Worker		x=$(sysctl -n kern.version | sed 1q)
12307*7c356e86SAndroid Build Coastguard Worker		[[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \
12308*7c356e86SAndroid Build Coastguard Worker		    ed -s /etc/motd 2>&1 <<-EOF
12309*7c356e86SAndroid Build Coastguard Worker			1,/^\$/d
12310*7c356e86SAndroid Build Coastguard Worker			0a
12311*7c356e86SAndroid Build Coastguard Worker				$x
12312*7c356e86SAndroid Build Coastguard Worker
12313*7c356e86SAndroid Build Coastguard Worker			.
12314*7c356e86SAndroid Build Coastguard Worker			wq
12315*7c356e86SAndroid Build Coastguard Worker		EOF)" = @(?) ]] && rm -f /etc/motd
12316*7c356e86SAndroid Build Coastguard Worker		if [[ ! -s /etc/motd ]]; then
12317*7c356e86SAndroid Build Coastguard Worker			install -c -o root -g wheel -m 664 /dev/null /etc/motd
12318*7c356e86SAndroid Build Coastguard Worker			print -- "$x\n" >/etc/motd
12319*7c356e86SAndroid Build Coastguard Worker		fi
12320*7c356e86SAndroid Build Coastguard Worker	); }
12321*7c356e86SAndroid Build Coastguard Worker	function comsub_patch_motd {
12322*7c356e86SAndroid Build Coastguard Worker		x=$(x=$(\sysctl -n kern.version | \sed 1q ) ; [[ -s /etc/motd && "$([[ "$(\head -1 /etc/motd )" != $x ]] && \ed -s /etc/motd 2>&1 <<-EOF
12323*7c356e86SAndroid Build Coastguard Worker	1,/^\$/d
12324*7c356e86SAndroid Build Coastguard Worker	0a
12325*7c356e86SAndroid Build Coastguard Worker	$x
12326*7c356e86SAndroid Build Coastguard Worker
12327*7c356e86SAndroid Build Coastguard Worker	.
12328*7c356e86SAndroid Build Coastguard Worker	wq
12329*7c356e86SAndroid Build Coastguard Worker	EOF
12330*7c356e86SAndroid Build Coastguard Worker	)" = @(?) ]] && \rm -f /etc/motd ; if [[ ! -s /etc/motd ]] ; then \install -c -o root -g wheel -m 664 /dev/null /etc/motd ; \print -- "$x\n" >/etc/motd ; fi )
12331*7c356e86SAndroid Build Coastguard Worker	}
12332*7c356e86SAndroid Build Coastguard Worker	function reread_patch_motd { x=$((
12333*7c356e86SAndroid Build Coastguard Worker		x=$(sysctl -n kern.version | sed 1q)
12334*7c356e86SAndroid Build Coastguard Worker		[[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \
12335*7c356e86SAndroid Build Coastguard Worker		    ed -s /etc/motd 2>&1 <<-EOF
12336*7c356e86SAndroid Build Coastguard Worker			1,/^\$/d
12337*7c356e86SAndroid Build Coastguard Worker			0a
12338*7c356e86SAndroid Build Coastguard Worker				$x
12339*7c356e86SAndroid Build Coastguard Worker
12340*7c356e86SAndroid Build Coastguard Worker			.
12341*7c356e86SAndroid Build Coastguard Worker			wq
12342*7c356e86SAndroid Build Coastguard Worker		EOF)" = @(?) ]] && rm -f /etc/motd
12343*7c356e86SAndroid Build Coastguard Worker		if [[ ! -s /etc/motd ]]; then
12344*7c356e86SAndroid Build Coastguard Worker			install -c -o root -g wheel -m 664 /dev/null /etc/motd
12345*7c356e86SAndroid Build Coastguard Worker			print -- "$x\n" >/etc/motd
12346*7c356e86SAndroid Build Coastguard Worker		fi
12347*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12348*7c356e86SAndroid Build Coastguard Worker	function reread_patch_motd {
12349*7c356e86SAndroid Build Coastguard Worker		x=$( ( x=$(\sysctl -n kern.version | \sed 1q ) ; [[ -s /etc/motd && "$([[ "$(\head -1 /etc/motd )" != $x ]] && \ed -s /etc/motd 2>&1 <<-EOF
12350*7c356e86SAndroid Build Coastguard Worker	1,/^\$/d
12351*7c356e86SAndroid Build Coastguard Worker	0a
12352*7c356e86SAndroid Build Coastguard Worker	$x
12353*7c356e86SAndroid Build Coastguard Worker
12354*7c356e86SAndroid Build Coastguard Worker	.
12355*7c356e86SAndroid Build Coastguard Worker	wq
12356*7c356e86SAndroid Build Coastguard Worker	EOF
12357*7c356e86SAndroid Build Coastguard Worker	)" = @(?) ]] && \rm -f /etc/motd ; if [[ ! -s /etc/motd ]] ; then \install -c -o root -g wheel -m 664 /dev/null /etc/motd ; \print -- "$x\n" >/etc/motd ; fi ) | \tr u x )
12358*7c356e86SAndroid Build Coastguard Worker	}
12359*7c356e86SAndroid Build Coastguard Worker	inline_wdarrassign() {
12360*7c356e86SAndroid Build Coastguard Worker		case x in
12361*7c356e86SAndroid Build Coastguard Worker		x) a+=b; c+=(d e)
12362*7c356e86SAndroid Build Coastguard Worker		esac
12363*7c356e86SAndroid Build Coastguard Worker	}
12364*7c356e86SAndroid Build Coastguard Worker	inline_wdarrassign() {
12365*7c356e86SAndroid Build Coastguard Worker		case x in
12366*7c356e86SAndroid Build Coastguard Worker		(x)
12367*7c356e86SAndroid Build Coastguard Worker			a+=b
12368*7c356e86SAndroid Build Coastguard Worker			\\builtin set -A c+ -- d e
12369*7c356e86SAndroid Build Coastguard Worker			;;
12370*7c356e86SAndroid Build Coastguard Worker		esac
12371*7c356e86SAndroid Build Coastguard Worker	}
12372*7c356e86SAndroid Build Coastguard Worker	function comsub_wdarrassign { x=$(
12373*7c356e86SAndroid Build Coastguard Worker		case x in
12374*7c356e86SAndroid Build Coastguard Worker		x) a+=b; c+=(d e)
12375*7c356e86SAndroid Build Coastguard Worker		esac
12376*7c356e86SAndroid Build Coastguard Worker	); }
12377*7c356e86SAndroid Build Coastguard Worker	function comsub_wdarrassign {
12378*7c356e86SAndroid Build Coastguard Worker		x=$(case x in (x) a+=b ; \\builtin set -A c+ -- d e  ;; esac )
12379*7c356e86SAndroid Build Coastguard Worker	}
12380*7c356e86SAndroid Build Coastguard Worker	function reread_wdarrassign { x=$((
12381*7c356e86SAndroid Build Coastguard Worker		case x in
12382*7c356e86SAndroid Build Coastguard Worker		x) a+=b; c+=(d e)
12383*7c356e86SAndroid Build Coastguard Worker		esac
12384*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12385*7c356e86SAndroid Build Coastguard Worker	function reread_wdarrassign {
12386*7c356e86SAndroid Build Coastguard Worker		x=$( ( case x in (x) a+=b ; \\builtin set -A c+ -- d e  ;; esac ) | \tr u x )
12387*7c356e86SAndroid Build Coastguard Worker	}
12388*7c356e86SAndroid Build Coastguard Worker---
12389*7c356e86SAndroid Build Coastguard Workername: comsub-torture-io
12390*7c356e86SAndroid Build Coastguard Workerdescription:
12391*7c356e86SAndroid Build Coastguard Worker	Check the tree dump functions work correctly with I/O redirection
12392*7c356e86SAndroid Build Coastguard Workerstdin:
12393*7c356e86SAndroid Build Coastguard Worker	if [[ -z $__progname ]]; then echo >&2 call me with __progname; exit 1; fi
12394*7c356e86SAndroid Build Coastguard Worker	while IFS= read -r line; do
12395*7c356e86SAndroid Build Coastguard Worker		if [[ $line = '#1' ]]; then
12396*7c356e86SAndroid Build Coastguard Worker			lastf=0
12397*7c356e86SAndroid Build Coastguard Worker			continue
12398*7c356e86SAndroid Build Coastguard Worker		elif [[ $line = EOFN* ]]; then
12399*7c356e86SAndroid Build Coastguard Worker			fbody=$fbody$'\n'$line
12400*7c356e86SAndroid Build Coastguard Worker			continue
12401*7c356e86SAndroid Build Coastguard Worker		elif [[ $line != '#'* ]]; then
12402*7c356e86SAndroid Build Coastguard Worker			fbody=$fbody$'\n\t'$line
12403*7c356e86SAndroid Build Coastguard Worker			continue
12404*7c356e86SAndroid Build Coastguard Worker		fi
12405*7c356e86SAndroid Build Coastguard Worker		if (( lastf )); then
12406*7c356e86SAndroid Build Coastguard Worker			x="inline_${nextf}() {"$fbody$'\n}\n'
12407*7c356e86SAndroid Build Coastguard Worker			print -nr -- "$x"
12408*7c356e86SAndroid Build Coastguard Worker			print -r -- "${x}typeset -f inline_$nextf" | "$__progname"
12409*7c356e86SAndroid Build Coastguard Worker			x="function comsub_$nextf { x=\$("$fbody$'\n); }\n'
12410*7c356e86SAndroid Build Coastguard Worker			print -nr -- "$x"
12411*7c356e86SAndroid Build Coastguard Worker			print -r -- "${x}typeset -f comsub_$nextf" | "$__progname"
12412*7c356e86SAndroid Build Coastguard Worker			x="function reread_$nextf { x=\$(("$fbody$'\n)|tr u x); }\n'
12413*7c356e86SAndroid Build Coastguard Worker			print -nr -- "$x"
12414*7c356e86SAndroid Build Coastguard Worker			print -r -- "${x}typeset -f reread_$nextf" | "$__progname"
12415*7c356e86SAndroid Build Coastguard Worker		fi
12416*7c356e86SAndroid Build Coastguard Worker		lastf=1
12417*7c356e86SAndroid Build Coastguard Worker		fbody=
12418*7c356e86SAndroid Build Coastguard Worker		nextf=${line#?}
12419*7c356e86SAndroid Build Coastguard Worker	done <<'EOD'
12420*7c356e86SAndroid Build Coastguard Worker	#1
12421*7c356e86SAndroid Build Coastguard Worker	#TCOM
12422*7c356e86SAndroid Build Coastguard Worker	vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4" >&3
12423*7c356e86SAndroid Build Coastguard Worker	#TPAREN_TPIPE_TLIST
12424*7c356e86SAndroid Build Coastguard Worker	(echo $foo  |  tr -dc 0-9 >&3; echo >&3) >&3
12425*7c356e86SAndroid Build Coastguard Worker	#TAND_TOR
12426*7c356e86SAndroid Build Coastguard Worker	cmd  >&3 &&  >&3 echo ja  ||  echo >&3 nein
12427*7c356e86SAndroid Build Coastguard Worker	#TSELECT
12428*7c356e86SAndroid Build Coastguard Worker	select  file  in  *;  do  echo  "<$file>" ;  break >&3 ;  done >&3
12429*7c356e86SAndroid Build Coastguard Worker	#TFOR_TTIME
12430*7c356e86SAndroid Build Coastguard Worker	for  i  in  {1,2,3}  ;  do  time  >&3 echo  $i ;  done >&3
12431*7c356e86SAndroid Build Coastguard Worker	#TCASE
12432*7c356e86SAndroid Build Coastguard Worker	case  $foo  in  1)  echo eins >&3;& 2) echo zwei >&3  ;| *) echo kann net bis drei zählen >&3;;  esac >&3
12433*7c356e86SAndroid Build Coastguard Worker	#TIF_TBANG_TDBRACKET_TELIF
12434*7c356e86SAndroid Build Coastguard Worker	if  !  [[  1  =  1  ]]  >&3 ;  then  echo eins;  elif [[ 1 = 2 ]] >&3; then echo zwei  ;else echo drei; fi >&3
12435*7c356e86SAndroid Build Coastguard Worker	#TWHILE
12436*7c356e86SAndroid Build Coastguard Worker	i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3
12437*7c356e86SAndroid Build Coastguard Worker	#TUNTIL
12438*7c356e86SAndroid Build Coastguard Worker	i=10; until  (( !--i )) >&3 ; do echo $i; done >&3
12439*7c356e86SAndroid Build Coastguard Worker	#TCOPROC
12440*7c356e86SAndroid Build Coastguard Worker	cat  *  >&3 |&  >&3 ls
12441*7c356e86SAndroid Build Coastguard Worker	#TFUNCT_TBRACE_TASYNC
12442*7c356e86SAndroid Build Coastguard Worker	function  korn  {  echo eins; echo >&3 zwei ;  }
12443*7c356e86SAndroid Build Coastguard Worker	bourne  ()  {  logger *  >&3 &  }
12444*7c356e86SAndroid Build Coastguard Worker	#COMSUB_EXPRSUB
12445*7c356e86SAndroid Build Coastguard Worker	echo $(true >&3) $((1+ 2))
12446*7c356e86SAndroid Build Coastguard Worker	#0
12447*7c356e86SAndroid Build Coastguard Worker	EOD
12448*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12449*7c356e86SAndroid Build Coastguard Worker	inline_TCOM() {
12450*7c356e86SAndroid Build Coastguard Worker		vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4" >&3
12451*7c356e86SAndroid Build Coastguard Worker	}
12452*7c356e86SAndroid Build Coastguard Worker	inline_TCOM() {
12453*7c356e86SAndroid Build Coastguard Worker		vara=1 varb="2  3" \cmd arg1 $arg2 "$arg3  4" >&3
12454*7c356e86SAndroid Build Coastguard Worker	}
12455*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOM { x=$(
12456*7c356e86SAndroid Build Coastguard Worker		vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4" >&3
12457*7c356e86SAndroid Build Coastguard Worker	); }
12458*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOM {
12459*7c356e86SAndroid Build Coastguard Worker		x=$(vara=1 varb="2  3" \cmd arg1 $arg2 "$arg3  4" >&3 )
12460*7c356e86SAndroid Build Coastguard Worker	}
12461*7c356e86SAndroid Build Coastguard Worker	function reread_TCOM { x=$((
12462*7c356e86SAndroid Build Coastguard Worker		vara=1  varb='2  3'  cmd  arg1  $arg2  "$arg3  4" >&3
12463*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12464*7c356e86SAndroid Build Coastguard Worker	function reread_TCOM {
12465*7c356e86SAndroid Build Coastguard Worker		x=$( ( vara=1 varb="2  3" \cmd arg1 $arg2 "$arg3  4" >&3 ) | \tr u x )
12466*7c356e86SAndroid Build Coastguard Worker	}
12467*7c356e86SAndroid Build Coastguard Worker	inline_TPAREN_TPIPE_TLIST() {
12468*7c356e86SAndroid Build Coastguard Worker		(echo $foo  |  tr -dc 0-9 >&3; echo >&3) >&3
12469*7c356e86SAndroid Build Coastguard Worker	}
12470*7c356e86SAndroid Build Coastguard Worker	inline_TPAREN_TPIPE_TLIST() {
12471*7c356e86SAndroid Build Coastguard Worker		( \echo $foo | \tr -dc 0-9 >&3
12472*7c356e86SAndroid Build Coastguard Worker		  \echo >&3 ) >&3
12473*7c356e86SAndroid Build Coastguard Worker	}
12474*7c356e86SAndroid Build Coastguard Worker	function comsub_TPAREN_TPIPE_TLIST { x=$(
12475*7c356e86SAndroid Build Coastguard Worker		(echo $foo  |  tr -dc 0-9 >&3; echo >&3) >&3
12476*7c356e86SAndroid Build Coastguard Worker	); }
12477*7c356e86SAndroid Build Coastguard Worker	function comsub_TPAREN_TPIPE_TLIST {
12478*7c356e86SAndroid Build Coastguard Worker		x=$( ( \echo $foo | \tr -dc 0-9 >&3 ; \echo >&3 ) >&3 )
12479*7c356e86SAndroid Build Coastguard Worker	}
12480*7c356e86SAndroid Build Coastguard Worker	function reread_TPAREN_TPIPE_TLIST { x=$((
12481*7c356e86SAndroid Build Coastguard Worker		(echo $foo  |  tr -dc 0-9 >&3; echo >&3) >&3
12482*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12483*7c356e86SAndroid Build Coastguard Worker	function reread_TPAREN_TPIPE_TLIST {
12484*7c356e86SAndroid Build Coastguard Worker		x=$( ( ( \echo $foo | \tr -dc 0-9 >&3 ; \echo >&3 ) >&3 ) | \tr u x )
12485*7c356e86SAndroid Build Coastguard Worker	}
12486*7c356e86SAndroid Build Coastguard Worker	inline_TAND_TOR() {
12487*7c356e86SAndroid Build Coastguard Worker		cmd  >&3 &&  >&3 echo ja  ||  echo >&3 nein
12488*7c356e86SAndroid Build Coastguard Worker	}
12489*7c356e86SAndroid Build Coastguard Worker	inline_TAND_TOR() {
12490*7c356e86SAndroid Build Coastguard Worker		\cmd >&3 && \echo ja >&3 || \echo nein >&3
12491*7c356e86SAndroid Build Coastguard Worker	}
12492*7c356e86SAndroid Build Coastguard Worker	function comsub_TAND_TOR { x=$(
12493*7c356e86SAndroid Build Coastguard Worker		cmd  >&3 &&  >&3 echo ja  ||  echo >&3 nein
12494*7c356e86SAndroid Build Coastguard Worker	); }
12495*7c356e86SAndroid Build Coastguard Worker	function comsub_TAND_TOR {
12496*7c356e86SAndroid Build Coastguard Worker		x=$(\cmd >&3 && \echo ja >&3 || \echo nein >&3 )
12497*7c356e86SAndroid Build Coastguard Worker	}
12498*7c356e86SAndroid Build Coastguard Worker	function reread_TAND_TOR { x=$((
12499*7c356e86SAndroid Build Coastguard Worker		cmd  >&3 &&  >&3 echo ja  ||  echo >&3 nein
12500*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12501*7c356e86SAndroid Build Coastguard Worker	function reread_TAND_TOR {
12502*7c356e86SAndroid Build Coastguard Worker		x=$( ( \cmd >&3 && \echo ja >&3 || \echo nein >&3 ) | \tr u x )
12503*7c356e86SAndroid Build Coastguard Worker	}
12504*7c356e86SAndroid Build Coastguard Worker	inline_TSELECT() {
12505*7c356e86SAndroid Build Coastguard Worker		select  file  in  *;  do  echo  "<$file>" ;  break >&3 ;  done >&3
12506*7c356e86SAndroid Build Coastguard Worker	}
12507*7c356e86SAndroid Build Coastguard Worker	inline_TSELECT() {
12508*7c356e86SAndroid Build Coastguard Worker		select file in *
12509*7c356e86SAndroid Build Coastguard Worker		do
12510*7c356e86SAndroid Build Coastguard Worker			\echo "<$file>"
12511*7c356e86SAndroid Build Coastguard Worker			\break >&3
12512*7c356e86SAndroid Build Coastguard Worker		done >&3
12513*7c356e86SAndroid Build Coastguard Worker	}
12514*7c356e86SAndroid Build Coastguard Worker	function comsub_TSELECT { x=$(
12515*7c356e86SAndroid Build Coastguard Worker		select  file  in  *;  do  echo  "<$file>" ;  break >&3 ;  done >&3
12516*7c356e86SAndroid Build Coastguard Worker	); }
12517*7c356e86SAndroid Build Coastguard Worker	function comsub_TSELECT {
12518*7c356e86SAndroid Build Coastguard Worker		x=$(select file in * ; do \echo "<$file>" ; \break >&3 ; done >&3 )
12519*7c356e86SAndroid Build Coastguard Worker	}
12520*7c356e86SAndroid Build Coastguard Worker	function reread_TSELECT { x=$((
12521*7c356e86SAndroid Build Coastguard Worker		select  file  in  *;  do  echo  "<$file>" ;  break >&3 ;  done >&3
12522*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12523*7c356e86SAndroid Build Coastguard Worker	function reread_TSELECT {
12524*7c356e86SAndroid Build Coastguard Worker		x=$( ( select file in * ; do \echo "<$file>" ; \break >&3 ; done >&3 ) | \tr u x )
12525*7c356e86SAndroid Build Coastguard Worker	}
12526*7c356e86SAndroid Build Coastguard Worker	inline_TFOR_TTIME() {
12527*7c356e86SAndroid Build Coastguard Worker		for  i  in  {1,2,3}  ;  do  time  >&3 echo  $i ;  done >&3
12528*7c356e86SAndroid Build Coastguard Worker	}
12529*7c356e86SAndroid Build Coastguard Worker	inline_TFOR_TTIME() {
12530*7c356e86SAndroid Build Coastguard Worker		for i in {1,2,3}
12531*7c356e86SAndroid Build Coastguard Worker		do
12532*7c356e86SAndroid Build Coastguard Worker			time \echo $i >&3
12533*7c356e86SAndroid Build Coastguard Worker		done >&3
12534*7c356e86SAndroid Build Coastguard Worker	}
12535*7c356e86SAndroid Build Coastguard Worker	function comsub_TFOR_TTIME { x=$(
12536*7c356e86SAndroid Build Coastguard Worker		for  i  in  {1,2,3}  ;  do  time  >&3 echo  $i ;  done >&3
12537*7c356e86SAndroid Build Coastguard Worker	); }
12538*7c356e86SAndroid Build Coastguard Worker	function comsub_TFOR_TTIME {
12539*7c356e86SAndroid Build Coastguard Worker		x=$(for i in {1,2,3} ; do time \echo $i >&3 ; done >&3 )
12540*7c356e86SAndroid Build Coastguard Worker	}
12541*7c356e86SAndroid Build Coastguard Worker	function reread_TFOR_TTIME { x=$((
12542*7c356e86SAndroid Build Coastguard Worker		for  i  in  {1,2,3}  ;  do  time  >&3 echo  $i ;  done >&3
12543*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12544*7c356e86SAndroid Build Coastguard Worker	function reread_TFOR_TTIME {
12545*7c356e86SAndroid Build Coastguard Worker		x=$( ( for i in {1,2,3} ; do time \echo $i >&3 ; done >&3 ) | \tr u x )
12546*7c356e86SAndroid Build Coastguard Worker	}
12547*7c356e86SAndroid Build Coastguard Worker	inline_TCASE() {
12548*7c356e86SAndroid Build Coastguard Worker		case  $foo  in  1)  echo eins >&3;& 2) echo zwei >&3  ;| *) echo kann net bis drei zählen >&3;;  esac >&3
12549*7c356e86SAndroid Build Coastguard Worker	}
12550*7c356e86SAndroid Build Coastguard Worker	inline_TCASE() {
12551*7c356e86SAndroid Build Coastguard Worker		case $foo in
12552*7c356e86SAndroid Build Coastguard Worker		(1)
12553*7c356e86SAndroid Build Coastguard Worker			\echo eins >&3
12554*7c356e86SAndroid Build Coastguard Worker			;&
12555*7c356e86SAndroid Build Coastguard Worker		(2)
12556*7c356e86SAndroid Build Coastguard Worker			\echo zwei >&3
12557*7c356e86SAndroid Build Coastguard Worker			;|
12558*7c356e86SAndroid Build Coastguard Worker		(*)
12559*7c356e86SAndroid Build Coastguard Worker			\echo kann net bis drei zählen >&3
12560*7c356e86SAndroid Build Coastguard Worker			;;
12561*7c356e86SAndroid Build Coastguard Worker		esac >&3
12562*7c356e86SAndroid Build Coastguard Worker	}
12563*7c356e86SAndroid Build Coastguard Worker	function comsub_TCASE { x=$(
12564*7c356e86SAndroid Build Coastguard Worker		case  $foo  in  1)  echo eins >&3;& 2) echo zwei >&3  ;| *) echo kann net bis drei zählen >&3;;  esac >&3
12565*7c356e86SAndroid Build Coastguard Worker	); }
12566*7c356e86SAndroid Build Coastguard Worker	function comsub_TCASE {
12567*7c356e86SAndroid Build Coastguard Worker		x=$(case $foo in (1) \echo eins >&3  ;& (2) \echo zwei >&3  ;| (*) \echo kann net bis drei zählen >&3  ;; esac >&3 )
12568*7c356e86SAndroid Build Coastguard Worker	}
12569*7c356e86SAndroid Build Coastguard Worker	function reread_TCASE { x=$((
12570*7c356e86SAndroid Build Coastguard Worker		case  $foo  in  1)  echo eins >&3;& 2) echo zwei >&3  ;| *) echo kann net bis drei zählen >&3;;  esac >&3
12571*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12572*7c356e86SAndroid Build Coastguard Worker	function reread_TCASE {
12573*7c356e86SAndroid Build Coastguard Worker		x=$( ( case $foo in (1) \echo eins >&3  ;& (2) \echo zwei >&3  ;| (*) \echo kann net bis drei zählen >&3  ;; esac >&3 ) | \tr u x )
12574*7c356e86SAndroid Build Coastguard Worker	}
12575*7c356e86SAndroid Build Coastguard Worker	inline_TIF_TBANG_TDBRACKET_TELIF() {
12576*7c356e86SAndroid Build Coastguard Worker		if  !  [[  1  =  1  ]]  >&3 ;  then  echo eins;  elif [[ 1 = 2 ]] >&3; then echo zwei  ;else echo drei; fi >&3
12577*7c356e86SAndroid Build Coastguard Worker	}
12578*7c356e86SAndroid Build Coastguard Worker	inline_TIF_TBANG_TDBRACKET_TELIF() {
12579*7c356e86SAndroid Build Coastguard Worker		if ! [[ 1 = 1 ]] >&3
12580*7c356e86SAndroid Build Coastguard Worker		then
12581*7c356e86SAndroid Build Coastguard Worker			\echo eins
12582*7c356e86SAndroid Build Coastguard Worker		elif [[ 1 = 2 ]] >&3
12583*7c356e86SAndroid Build Coastguard Worker		then
12584*7c356e86SAndroid Build Coastguard Worker			\echo zwei
12585*7c356e86SAndroid Build Coastguard Worker		else
12586*7c356e86SAndroid Build Coastguard Worker			\echo drei
12587*7c356e86SAndroid Build Coastguard Worker		fi >&3
12588*7c356e86SAndroid Build Coastguard Worker	}
12589*7c356e86SAndroid Build Coastguard Worker	function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$(
12590*7c356e86SAndroid Build Coastguard Worker		if  !  [[  1  =  1  ]]  >&3 ;  then  echo eins;  elif [[ 1 = 2 ]] >&3; then echo zwei  ;else echo drei; fi >&3
12591*7c356e86SAndroid Build Coastguard Worker	); }
12592*7c356e86SAndroid Build Coastguard Worker	function comsub_TIF_TBANG_TDBRACKET_TELIF {
12593*7c356e86SAndroid Build Coastguard Worker		x=$(if ! [[ 1 = 1 ]] >&3 ; then \echo eins ; elif [[ 1 = 2 ]] >&3 ; then \echo zwei ; else \echo drei ; fi >&3 )
12594*7c356e86SAndroid Build Coastguard Worker	}
12595*7c356e86SAndroid Build Coastguard Worker	function reread_TIF_TBANG_TDBRACKET_TELIF { x=$((
12596*7c356e86SAndroid Build Coastguard Worker		if  !  [[  1  =  1  ]]  >&3 ;  then  echo eins;  elif [[ 1 = 2 ]] >&3; then echo zwei  ;else echo drei; fi >&3
12597*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12598*7c356e86SAndroid Build Coastguard Worker	function reread_TIF_TBANG_TDBRACKET_TELIF {
12599*7c356e86SAndroid Build Coastguard Worker		x=$( ( if ! [[ 1 = 1 ]] >&3 ; then \echo eins ; elif [[ 1 = 2 ]] >&3 ; then \echo zwei ; else \echo drei ; fi >&3 ) | \tr u x )
12600*7c356e86SAndroid Build Coastguard Worker	}
12601*7c356e86SAndroid Build Coastguard Worker	inline_TWHILE() {
12602*7c356e86SAndroid Build Coastguard Worker		i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3
12603*7c356e86SAndroid Build Coastguard Worker	}
12604*7c356e86SAndroid Build Coastguard Worker	inline_TWHILE() {
12605*7c356e86SAndroid Build Coastguard Worker		i=1
12606*7c356e86SAndroid Build Coastguard Worker		while {
12607*7c356e86SAndroid Build Coastguard Worker			      \\builtin let " i < 10 "
12608*7c356e86SAndroid Build Coastguard Worker		      } >&3
12609*7c356e86SAndroid Build Coastguard Worker		do
12610*7c356e86SAndroid Build Coastguard Worker			\echo $i
12611*7c356e86SAndroid Build Coastguard Worker			\let ++i
12612*7c356e86SAndroid Build Coastguard Worker		done >&3
12613*7c356e86SAndroid Build Coastguard Worker	}
12614*7c356e86SAndroid Build Coastguard Worker	function comsub_TWHILE { x=$(
12615*7c356e86SAndroid Build Coastguard Worker		i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3
12616*7c356e86SAndroid Build Coastguard Worker	); }
12617*7c356e86SAndroid Build Coastguard Worker	function comsub_TWHILE {
12618*7c356e86SAndroid Build Coastguard Worker		x=$(i=1 ; while { \\builtin let " i < 10 " ; } >&3 ; do \echo $i ; \let ++i ; done >&3 )
12619*7c356e86SAndroid Build Coastguard Worker	}
12620*7c356e86SAndroid Build Coastguard Worker	function reread_TWHILE { x=$((
12621*7c356e86SAndroid Build Coastguard Worker		i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3
12622*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12623*7c356e86SAndroid Build Coastguard Worker	function reread_TWHILE {
12624*7c356e86SAndroid Build Coastguard Worker		x=$( ( i=1 ; while { \\builtin let " i < 10 " ; } >&3 ; do \echo $i ; \let ++i ; done >&3 ) | \tr u x )
12625*7c356e86SAndroid Build Coastguard Worker	}
12626*7c356e86SAndroid Build Coastguard Worker	inline_TUNTIL() {
12627*7c356e86SAndroid Build Coastguard Worker		i=10; until  (( !--i )) >&3 ; do echo $i; done >&3
12628*7c356e86SAndroid Build Coastguard Worker	}
12629*7c356e86SAndroid Build Coastguard Worker	inline_TUNTIL() {
12630*7c356e86SAndroid Build Coastguard Worker		i=10
12631*7c356e86SAndroid Build Coastguard Worker		until {
12632*7c356e86SAndroid Build Coastguard Worker			      \\builtin let " !--i "
12633*7c356e86SAndroid Build Coastguard Worker		      } >&3
12634*7c356e86SAndroid Build Coastguard Worker		do
12635*7c356e86SAndroid Build Coastguard Worker			\echo $i
12636*7c356e86SAndroid Build Coastguard Worker		done >&3
12637*7c356e86SAndroid Build Coastguard Worker	}
12638*7c356e86SAndroid Build Coastguard Worker	function comsub_TUNTIL { x=$(
12639*7c356e86SAndroid Build Coastguard Worker		i=10; until  (( !--i )) >&3 ; do echo $i; done >&3
12640*7c356e86SAndroid Build Coastguard Worker	); }
12641*7c356e86SAndroid Build Coastguard Worker	function comsub_TUNTIL {
12642*7c356e86SAndroid Build Coastguard Worker		x=$(i=10 ; until { \\builtin let " !--i " ; } >&3 ; do \echo $i ; done >&3 )
12643*7c356e86SAndroid Build Coastguard Worker	}
12644*7c356e86SAndroid Build Coastguard Worker	function reread_TUNTIL { x=$((
12645*7c356e86SAndroid Build Coastguard Worker		i=10; until  (( !--i )) >&3 ; do echo $i; done >&3
12646*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12647*7c356e86SAndroid Build Coastguard Worker	function reread_TUNTIL {
12648*7c356e86SAndroid Build Coastguard Worker		x=$( ( i=10 ; until { \\builtin let " !--i " ; } >&3 ; do \echo $i ; done >&3 ) | \tr u x )
12649*7c356e86SAndroid Build Coastguard Worker	}
12650*7c356e86SAndroid Build Coastguard Worker	inline_TCOPROC() {
12651*7c356e86SAndroid Build Coastguard Worker		cat  *  >&3 |&  >&3 ls
12652*7c356e86SAndroid Build Coastguard Worker	}
12653*7c356e86SAndroid Build Coastguard Worker	inline_TCOPROC() {
12654*7c356e86SAndroid Build Coastguard Worker		\cat * >&3 |&
12655*7c356e86SAndroid Build Coastguard Worker		\ls >&3
12656*7c356e86SAndroid Build Coastguard Worker	}
12657*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOPROC { x=$(
12658*7c356e86SAndroid Build Coastguard Worker		cat  *  >&3 |&  >&3 ls
12659*7c356e86SAndroid Build Coastguard Worker	); }
12660*7c356e86SAndroid Build Coastguard Worker	function comsub_TCOPROC {
12661*7c356e86SAndroid Build Coastguard Worker		x=$(\cat * >&3 |&  \ls >&3 )
12662*7c356e86SAndroid Build Coastguard Worker	}
12663*7c356e86SAndroid Build Coastguard Worker	function reread_TCOPROC { x=$((
12664*7c356e86SAndroid Build Coastguard Worker		cat  *  >&3 |&  >&3 ls
12665*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12666*7c356e86SAndroid Build Coastguard Worker	function reread_TCOPROC {
12667*7c356e86SAndroid Build Coastguard Worker		x=$( ( \cat * >&3 |&  \ls >&3 ) | \tr u x )
12668*7c356e86SAndroid Build Coastguard Worker	}
12669*7c356e86SAndroid Build Coastguard Worker	inline_TFUNCT_TBRACE_TASYNC() {
12670*7c356e86SAndroid Build Coastguard Worker		function  korn  {  echo eins; echo >&3 zwei ;  }
12671*7c356e86SAndroid Build Coastguard Worker		bourne  ()  {  logger *  >&3 &  }
12672*7c356e86SAndroid Build Coastguard Worker	}
12673*7c356e86SAndroid Build Coastguard Worker	inline_TFUNCT_TBRACE_TASYNC() {
12674*7c356e86SAndroid Build Coastguard Worker		function korn {
12675*7c356e86SAndroid Build Coastguard Worker			\echo eins
12676*7c356e86SAndroid Build Coastguard Worker			\echo zwei >&3
12677*7c356e86SAndroid Build Coastguard Worker		}
12678*7c356e86SAndroid Build Coastguard Worker		bourne() {
12679*7c356e86SAndroid Build Coastguard Worker			\logger * >&3 &
12680*7c356e86SAndroid Build Coastguard Worker		}
12681*7c356e86SAndroid Build Coastguard Worker	}
12682*7c356e86SAndroid Build Coastguard Worker	function comsub_TFUNCT_TBRACE_TASYNC { x=$(
12683*7c356e86SAndroid Build Coastguard Worker		function  korn  {  echo eins; echo >&3 zwei ;  }
12684*7c356e86SAndroid Build Coastguard Worker		bourne  ()  {  logger *  >&3 &  }
12685*7c356e86SAndroid Build Coastguard Worker	); }
12686*7c356e86SAndroid Build Coastguard Worker	function comsub_TFUNCT_TBRACE_TASYNC {
12687*7c356e86SAndroid Build Coastguard Worker		x=$(function korn { \echo eins ; \echo zwei >&3 ; } ; bourne() { \logger * >&3 &  } )
12688*7c356e86SAndroid Build Coastguard Worker	}
12689*7c356e86SAndroid Build Coastguard Worker	function reread_TFUNCT_TBRACE_TASYNC { x=$((
12690*7c356e86SAndroid Build Coastguard Worker		function  korn  {  echo eins; echo >&3 zwei ;  }
12691*7c356e86SAndroid Build Coastguard Worker		bourne  ()  {  logger *  >&3 &  }
12692*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12693*7c356e86SAndroid Build Coastguard Worker	function reread_TFUNCT_TBRACE_TASYNC {
12694*7c356e86SAndroid Build Coastguard Worker		x=$( ( function korn { \echo eins ; \echo zwei >&3 ; } ; bourne() { \logger * >&3 &  } ) | \tr u x )
12695*7c356e86SAndroid Build Coastguard Worker	}
12696*7c356e86SAndroid Build Coastguard Worker	inline_COMSUB_EXPRSUB() {
12697*7c356e86SAndroid Build Coastguard Worker		echo $(true >&3) $((1+ 2))
12698*7c356e86SAndroid Build Coastguard Worker	}
12699*7c356e86SAndroid Build Coastguard Worker	inline_COMSUB_EXPRSUB() {
12700*7c356e86SAndroid Build Coastguard Worker		\echo $(\true >&3 ) $((1+ 2))
12701*7c356e86SAndroid Build Coastguard Worker	}
12702*7c356e86SAndroid Build Coastguard Worker	function comsub_COMSUB_EXPRSUB { x=$(
12703*7c356e86SAndroid Build Coastguard Worker		echo $(true >&3) $((1+ 2))
12704*7c356e86SAndroid Build Coastguard Worker	); }
12705*7c356e86SAndroid Build Coastguard Worker	function comsub_COMSUB_EXPRSUB {
12706*7c356e86SAndroid Build Coastguard Worker		x=$(\echo $(\true >&3 ) $((1+ 2)) )
12707*7c356e86SAndroid Build Coastguard Worker	}
12708*7c356e86SAndroid Build Coastguard Worker	function reread_COMSUB_EXPRSUB { x=$((
12709*7c356e86SAndroid Build Coastguard Worker		echo $(true >&3) $((1+ 2))
12710*7c356e86SAndroid Build Coastguard Worker	)|tr u x); }
12711*7c356e86SAndroid Build Coastguard Worker	function reread_COMSUB_EXPRSUB {
12712*7c356e86SAndroid Build Coastguard Worker		x=$( ( \echo $(\true >&3 ) $((1+ 2)) ) | \tr u x )
12713*7c356e86SAndroid Build Coastguard Worker	}
12714*7c356e86SAndroid Build Coastguard Worker---
12715*7c356e86SAndroid Build Coastguard Workername: funsub-1
12716*7c356e86SAndroid Build Coastguard Workerdescription:
12717*7c356e86SAndroid Build Coastguard Worker	Check that non-subenvironment command substitution works
12718*7c356e86SAndroid Build Coastguard Workerstdin:
12719*7c356e86SAndroid Build Coastguard Worker	set -e
12720*7c356e86SAndroid Build Coastguard Worker	foo=bar
12721*7c356e86SAndroid Build Coastguard Worker	echo "ob $foo ."
12722*7c356e86SAndroid Build Coastguard Worker	echo "${
12723*7c356e86SAndroid Build Coastguard Worker		echo "ib $foo :"
12724*7c356e86SAndroid Build Coastguard Worker		foo=baz
12725*7c356e86SAndroid Build Coastguard Worker		echo "ia $foo :"
12726*7c356e86SAndroid Build Coastguard Worker		false
12727*7c356e86SAndroid Build Coastguard Worker	}" .
12728*7c356e86SAndroid Build Coastguard Worker	echo "oa $foo ."
12729*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12730*7c356e86SAndroid Build Coastguard Worker	ob bar .
12731*7c356e86SAndroid Build Coastguard Worker	ib bar :
12732*7c356e86SAndroid Build Coastguard Worker	ia baz : .
12733*7c356e86SAndroid Build Coastguard Worker	oa baz .
12734*7c356e86SAndroid Build Coastguard Worker---
12735*7c356e86SAndroid Build Coastguard Workername: funsub-2
12736*7c356e86SAndroid Build Coastguard Workerdescription:
12737*7c356e86SAndroid Build Coastguard Worker	You can now reliably use local and return in funsubs
12738*7c356e86SAndroid Build Coastguard Worker	(not exit though)
12739*7c356e86SAndroid Build Coastguard Workerstdin:
12740*7c356e86SAndroid Build Coastguard Worker	x=q; e=1; x=${ echo a; e=2; echo x$e;}; echo 1:y$x,$e,$?.
12741*7c356e86SAndroid Build Coastguard Worker	x=q; e=1; x=${ echo a; typeset e=2; echo x$e;}; echo 2:y$x,$e,$?.
12742*7c356e86SAndroid Build Coastguard Worker	x=q; e=1; x=${ echo a; typeset e=2; return 3; echo x$e;}; echo 3:y$x,$e,$?.
12743*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12744*7c356e86SAndroid Build Coastguard Worker	1:ya x2,2,0.
12745*7c356e86SAndroid Build Coastguard Worker	2:ya x2,1,0.
12746*7c356e86SAndroid Build Coastguard Worker	3:ya,1,3.
12747*7c356e86SAndroid Build Coastguard Worker---
12748*7c356e86SAndroid Build Coastguard Workername: valsub-1
12749*7c356e86SAndroid Build Coastguard Workerdescription:
12750*7c356e86SAndroid Build Coastguard Worker	Check that "value substitutions" work as advertised
12751*7c356e86SAndroid Build Coastguard Workerstdin:
12752*7c356e86SAndroid Build Coastguard Worker	x=1
12753*7c356e86SAndroid Build Coastguard Worker	y=2
12754*7c356e86SAndroid Build Coastguard Worker	z=3
12755*7c356e86SAndroid Build Coastguard Worker	REPLY=4
12756*7c356e86SAndroid Build Coastguard Worker	echo "before:	x<$x> y<$y> z<$z> R<$REPLY>"
12757*7c356e86SAndroid Build Coastguard Worker	x=${|
12758*7c356e86SAndroid Build Coastguard Worker		local y
12759*7c356e86SAndroid Build Coastguard Worker		echo "start:	x<$x> y<$y> z<$z> R<$REPLY>"
12760*7c356e86SAndroid Build Coastguard Worker		x=5
12761*7c356e86SAndroid Build Coastguard Worker		y=6
12762*7c356e86SAndroid Build Coastguard Worker		z=7
12763*7c356e86SAndroid Build Coastguard Worker		REPLY=8
12764*7c356e86SAndroid Build Coastguard Worker		echo "end:	x<$x> y<$y> z<$z> R<$REPLY>"
12765*7c356e86SAndroid Build Coastguard Worker	}
12766*7c356e86SAndroid Build Coastguard Worker	echo "after:	x<$x> y<$y> z<$z> R<$REPLY>"
12767*7c356e86SAndroid Build Coastguard Worker	# ensure trailing newlines are kept
12768*7c356e86SAndroid Build Coastguard Worker	t=${|REPLY=$'foo\n\n';}
12769*7c356e86SAndroid Build Coastguard Worker	typeset -p t
12770*7c356e86SAndroid Build Coastguard Worker	echo -n this used to segfault
12771*7c356e86SAndroid Build Coastguard Worker	echo ${|true;}$(true).
12772*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12773*7c356e86SAndroid Build Coastguard Worker	before:	x<1> y<2> z<3> R<4>
12774*7c356e86SAndroid Build Coastguard Worker	start:	x<1> y<> z<3> R<>
12775*7c356e86SAndroid Build Coastguard Worker	end:	x<5> y<6> z<7> R<8>
12776*7c356e86SAndroid Build Coastguard Worker	after:	x<8> y<2> z<7> R<4>
12777*7c356e86SAndroid Build Coastguard Worker	typeset t=$'foo\n\n'
12778*7c356e86SAndroid Build Coastguard Worker	this used to segfault.
12779*7c356e86SAndroid Build Coastguard Worker---
12780*7c356e86SAndroid Build Coastguard Workername: event-subst-3
12781*7c356e86SAndroid Build Coastguard Workerdescription:
12782*7c356e86SAndroid Build Coastguard Worker	Check that '!' substitution in noninteractive mode is ignored
12783*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "falsetto"
12784*7c356e86SAndroid Build Coastguard Worker	#! /bin/sh
12785*7c356e86SAndroid Build Coastguard Worker	echo molto bene
12786*7c356e86SAndroid Build Coastguard Worker	exit 42
12787*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "!false"
12788*7c356e86SAndroid Build Coastguard Worker	#! /bin/sh
12789*7c356e86SAndroid Build Coastguard Worker	echo si
12790*7c356e86SAndroid Build Coastguard Workerstdin:
12791*7c356e86SAndroid Build Coastguard Worker	export PATH=.$PATHSEP$PATH
12792*7c356e86SAndroid Build Coastguard Worker	falsetto
12793*7c356e86SAndroid Build Coastguard Worker	echo yeap
12794*7c356e86SAndroid Build Coastguard Worker	!false
12795*7c356e86SAndroid Build Coastguard Worker	echo meow
12796*7c356e86SAndroid Build Coastguard Worker	! false
12797*7c356e86SAndroid Build Coastguard Worker	echo = $?
12798*7c356e86SAndroid Build Coastguard Worker	if
12799*7c356e86SAndroid Build Coastguard Worker	! false; then echo foo; else echo bar; fi
12800*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12801*7c356e86SAndroid Build Coastguard Worker	molto bene
12802*7c356e86SAndroid Build Coastguard Worker	yeap
12803*7c356e86SAndroid Build Coastguard Worker	si
12804*7c356e86SAndroid Build Coastguard Worker	meow
12805*7c356e86SAndroid Build Coastguard Worker	= 0
12806*7c356e86SAndroid Build Coastguard Worker	foo
12807*7c356e86SAndroid Build Coastguard Worker---
12808*7c356e86SAndroid Build Coastguard Workername: event-subst-0
12809*7c356e86SAndroid Build Coastguard Workerdescription:
12810*7c356e86SAndroid Build Coastguard Worker	Check that '!' substitution in interactive mode is ignored
12811*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes
12812*7c356e86SAndroid Build Coastguard Workerarguments: !-i!
12813*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "falsetto"
12814*7c356e86SAndroid Build Coastguard Worker	#! /bin/sh
12815*7c356e86SAndroid Build Coastguard Worker	echo molto bene
12816*7c356e86SAndroid Build Coastguard Worker	exit 42
12817*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "!false"
12818*7c356e86SAndroid Build Coastguard Worker	#! /bin/sh
12819*7c356e86SAndroid Build Coastguard Worker	echo si
12820*7c356e86SAndroid Build Coastguard Workerstdin:
12821*7c356e86SAndroid Build Coastguard Worker	export PATH=.$PATHSEP$PATH
12822*7c356e86SAndroid Build Coastguard Worker	falsetto
12823*7c356e86SAndroid Build Coastguard Worker	echo yeap
12824*7c356e86SAndroid Build Coastguard Worker	!false
12825*7c356e86SAndroid Build Coastguard Worker	echo meow
12826*7c356e86SAndroid Build Coastguard Worker	! false
12827*7c356e86SAndroid Build Coastguard Worker	echo = $?
12828*7c356e86SAndroid Build Coastguard Worker	if
12829*7c356e86SAndroid Build Coastguard Worker	! false; then echo foo; else echo bar; fi
12830*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12831*7c356e86SAndroid Build Coastguard Worker	molto bene
12832*7c356e86SAndroid Build Coastguard Worker	yeap
12833*7c356e86SAndroid Build Coastguard Worker	si
12834*7c356e86SAndroid Build Coastguard Worker	meow
12835*7c356e86SAndroid Build Coastguard Worker	= 0
12836*7c356e86SAndroid Build Coastguard Worker	foo
12837*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
12838*7c356e86SAndroid Build Coastguard Worker	/.*/
12839*7c356e86SAndroid Build Coastguard Worker---
12840*7c356e86SAndroid Build Coastguard Workername: nounset-1
12841*7c356e86SAndroid Build Coastguard Workerdescription:
12842*7c356e86SAndroid Build Coastguard Worker	Check that "set -u" matches (future) SUSv4 requirement
12843*7c356e86SAndroid Build Coastguard Workerstdin:
12844*7c356e86SAndroid Build Coastguard Worker	(set -u
12845*7c356e86SAndroid Build Coastguard Worker	try() {
12846*7c356e86SAndroid Build Coastguard Worker		local v
12847*7c356e86SAndroid Build Coastguard Worker		eval v=\$$1
12848*7c356e86SAndroid Build Coastguard Worker		if [[ -n $v ]]; then
12849*7c356e86SAndroid Build Coastguard Worker			echo $1=nz
12850*7c356e86SAndroid Build Coastguard Worker		else
12851*7c356e86SAndroid Build Coastguard Worker			echo $1=zf
12852*7c356e86SAndroid Build Coastguard Worker		fi
12853*7c356e86SAndroid Build Coastguard Worker	}
12854*7c356e86SAndroid Build Coastguard Worker	x=y
12855*7c356e86SAndroid Build Coastguard Worker	(echo $x)
12856*7c356e86SAndroid Build Coastguard Worker	echo =1
12857*7c356e86SAndroid Build Coastguard Worker	(echo $y)
12858*7c356e86SAndroid Build Coastguard Worker	echo =2
12859*7c356e86SAndroid Build Coastguard Worker	(try x)
12860*7c356e86SAndroid Build Coastguard Worker	echo =3
12861*7c356e86SAndroid Build Coastguard Worker	(try y)
12862*7c356e86SAndroid Build Coastguard Worker	echo =4
12863*7c356e86SAndroid Build Coastguard Worker	(try 0)
12864*7c356e86SAndroid Build Coastguard Worker	echo =5
12865*7c356e86SAndroid Build Coastguard Worker	(try 2)
12866*7c356e86SAndroid Build Coastguard Worker	echo =6
12867*7c356e86SAndroid Build Coastguard Worker	(try)
12868*7c356e86SAndroid Build Coastguard Worker	echo =7
12869*7c356e86SAndroid Build Coastguard Worker	(echo at=$@)
12870*7c356e86SAndroid Build Coastguard Worker	echo =8
12871*7c356e86SAndroid Build Coastguard Worker	(echo asterisk=$*)
12872*7c356e86SAndroid Build Coastguard Worker	echo =9
12873*7c356e86SAndroid Build Coastguard Worker	(echo $?)
12874*7c356e86SAndroid Build Coastguard Worker	echo =10
12875*7c356e86SAndroid Build Coastguard Worker	(echo $!)
12876*7c356e86SAndroid Build Coastguard Worker	echo =11
12877*7c356e86SAndroid Build Coastguard Worker	(echo $-)
12878*7c356e86SAndroid Build Coastguard Worker	echo =12
12879*7c356e86SAndroid Build Coastguard Worker	#(echo $_)
12880*7c356e86SAndroid Build Coastguard Worker	#echo =13
12881*7c356e86SAndroid Build Coastguard Worker	(echo $#)
12882*7c356e86SAndroid Build Coastguard Worker	echo =14
12883*7c356e86SAndroid Build Coastguard Worker	(mypid=$$; try mypid)
12884*7c356e86SAndroid Build Coastguard Worker	echo =15
12885*7c356e86SAndroid Build Coastguard Worker	) 2>&1 | sed -e 's/^[A-Za-z]://' -e 's/^[^]]*]//' -e 's/^[^:]*: *//'
12886*7c356e86SAndroid Build Coastguard Worker	exit ${PIPESTATUS[0]}
12887*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12888*7c356e86SAndroid Build Coastguard Worker	y
12889*7c356e86SAndroid Build Coastguard Worker	=1
12890*7c356e86SAndroid Build Coastguard Worker	y: parameter not set
12891*7c356e86SAndroid Build Coastguard Worker	=2
12892*7c356e86SAndroid Build Coastguard Worker	x=nz
12893*7c356e86SAndroid Build Coastguard Worker	=3
12894*7c356e86SAndroid Build Coastguard Worker	y: parameter not set
12895*7c356e86SAndroid Build Coastguard Worker	=4
12896*7c356e86SAndroid Build Coastguard Worker	0=nz
12897*7c356e86SAndroid Build Coastguard Worker	=5
12898*7c356e86SAndroid Build Coastguard Worker	2: parameter not set
12899*7c356e86SAndroid Build Coastguard Worker	=6
12900*7c356e86SAndroid Build Coastguard Worker	1: parameter not set
12901*7c356e86SAndroid Build Coastguard Worker	=7
12902*7c356e86SAndroid Build Coastguard Worker	at=
12903*7c356e86SAndroid Build Coastguard Worker	=8
12904*7c356e86SAndroid Build Coastguard Worker	asterisk=
12905*7c356e86SAndroid Build Coastguard Worker	=9
12906*7c356e86SAndroid Build Coastguard Worker	0
12907*7c356e86SAndroid Build Coastguard Worker	=10
12908*7c356e86SAndroid Build Coastguard Worker	!: parameter not set
12909*7c356e86SAndroid Build Coastguard Worker	=11
12910*7c356e86SAndroid Build Coastguard Worker	ush
12911*7c356e86SAndroid Build Coastguard Worker	=12
12912*7c356e86SAndroid Build Coastguard Worker	0
12913*7c356e86SAndroid Build Coastguard Worker	=14
12914*7c356e86SAndroid Build Coastguard Worker	mypid=nz
12915*7c356e86SAndroid Build Coastguard Worker	=15
12916*7c356e86SAndroid Build Coastguard Worker---
12917*7c356e86SAndroid Build Coastguard Workername: nameref-1
12918*7c356e86SAndroid Build Coastguard Workerdescription:
12919*7c356e86SAndroid Build Coastguard Worker	Testsuite for nameref (bound variables)
12920*7c356e86SAndroid Build Coastguard Workerstdin:
12921*7c356e86SAndroid Build Coastguard Worker	bar=global
12922*7c356e86SAndroid Build Coastguard Worker	typeset -n ir2=bar
12923*7c356e86SAndroid Build Coastguard Worker	typeset -n ind=ir2
12924*7c356e86SAndroid Build Coastguard Worker	echo !ind: ${!ind}
12925*7c356e86SAndroid Build Coastguard Worker	echo ind: $ind
12926*7c356e86SAndroid Build Coastguard Worker	echo !ir2: ${!ir2}
12927*7c356e86SAndroid Build Coastguard Worker	echo ir2: $ir2
12928*7c356e86SAndroid Build Coastguard Worker	typeset +n ind
12929*7c356e86SAndroid Build Coastguard Worker	echo !ind: ${!ind}
12930*7c356e86SAndroid Build Coastguard Worker	echo ind: $ind
12931*7c356e86SAndroid Build Coastguard Worker	typeset -n ir2=ind
12932*7c356e86SAndroid Build Coastguard Worker	echo !ir2: ${!ir2}
12933*7c356e86SAndroid Build Coastguard Worker	echo ir2: $ir2
12934*7c356e86SAndroid Build Coastguard Worker	set|grep ^ir2|sed 's/^/s1: /'
12935*7c356e86SAndroid Build Coastguard Worker	typeset|grep ' ir2'|sed -e 's/^/s2: /' -e 's/nameref/typeset -n/'
12936*7c356e86SAndroid Build Coastguard Worker	set -A blub -- e1 e2 e3
12937*7c356e86SAndroid Build Coastguard Worker	typeset -n ind=blub
12938*7c356e86SAndroid Build Coastguard Worker	typeset -n ir2=blub[2]
12939*7c356e86SAndroid Build Coastguard Worker	echo !ind[1]: ${!ind[1]}
12940*7c356e86SAndroid Build Coastguard Worker	echo !ir2: $!ir2
12941*7c356e86SAndroid Build Coastguard Worker	echo ind[1]: ${ind[1]}
12942*7c356e86SAndroid Build Coastguard Worker	echo ir2: $ir2
12943*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12944*7c356e86SAndroid Build Coastguard Worker	!ind: bar
12945*7c356e86SAndroid Build Coastguard Worker	ind: global
12946*7c356e86SAndroid Build Coastguard Worker	!ir2: bar
12947*7c356e86SAndroid Build Coastguard Worker	ir2: global
12948*7c356e86SAndroid Build Coastguard Worker	!ind: ind
12949*7c356e86SAndroid Build Coastguard Worker	ind: ir2
12950*7c356e86SAndroid Build Coastguard Worker	!ir2: ind
12951*7c356e86SAndroid Build Coastguard Worker	ir2: ir2
12952*7c356e86SAndroid Build Coastguard Worker	s1: ir2=ind
12953*7c356e86SAndroid Build Coastguard Worker	s2: typeset -n ir2
12954*7c356e86SAndroid Build Coastguard Worker	!ind[1]: blub[1]
12955*7c356e86SAndroid Build Coastguard Worker	!ir2: ir2
12956*7c356e86SAndroid Build Coastguard Worker	ind[1]: e2
12957*7c356e86SAndroid Build Coastguard Worker	ir2: e3
12958*7c356e86SAndroid Build Coastguard Worker---
12959*7c356e86SAndroid Build Coastguard Workername: nameref-2da
12960*7c356e86SAndroid Build Coastguard Workerdescription:
12961*7c356e86SAndroid Build Coastguard Worker	Testsuite for nameref (bound variables)
12962*7c356e86SAndroid Build Coastguard Worker	Functions, argument given directly, after local
12963*7c356e86SAndroid Build Coastguard Workerstdin:
12964*7c356e86SAndroid Build Coastguard Worker	function foo {
12965*7c356e86SAndroid Build Coastguard Worker		typeset bar=lokal baz=auch
12966*7c356e86SAndroid Build Coastguard Worker		typeset -n v=bar
12967*7c356e86SAndroid Build Coastguard Worker		echo entering
12968*7c356e86SAndroid Build Coastguard Worker		echo !v: ${!v}
12969*7c356e86SAndroid Build Coastguard Worker		echo !bar: ${!bar}
12970*7c356e86SAndroid Build Coastguard Worker		echo !baz: ${!baz}
12971*7c356e86SAndroid Build Coastguard Worker		echo bar: $bar
12972*7c356e86SAndroid Build Coastguard Worker		echo v: $v
12973*7c356e86SAndroid Build Coastguard Worker		v=123
12974*7c356e86SAndroid Build Coastguard Worker		echo bar: $bar
12975*7c356e86SAndroid Build Coastguard Worker		echo v: $v
12976*7c356e86SAndroid Build Coastguard Worker		echo exiting
12977*7c356e86SAndroid Build Coastguard Worker	}
12978*7c356e86SAndroid Build Coastguard Worker	bar=global
12979*7c356e86SAndroid Build Coastguard Worker	echo bar: $bar
12980*7c356e86SAndroid Build Coastguard Worker	foo bar
12981*7c356e86SAndroid Build Coastguard Worker	echo bar: $bar
12982*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
12983*7c356e86SAndroid Build Coastguard Worker	bar: global
12984*7c356e86SAndroid Build Coastguard Worker	entering
12985*7c356e86SAndroid Build Coastguard Worker	!v: bar
12986*7c356e86SAndroid Build Coastguard Worker	!bar: bar
12987*7c356e86SAndroid Build Coastguard Worker	!baz: baz
12988*7c356e86SAndroid Build Coastguard Worker	bar: lokal
12989*7c356e86SAndroid Build Coastguard Worker	v: lokal
12990*7c356e86SAndroid Build Coastguard Worker	bar: 123
12991*7c356e86SAndroid Build Coastguard Worker	v: 123
12992*7c356e86SAndroid Build Coastguard Worker	exiting
12993*7c356e86SAndroid Build Coastguard Worker	bar: global
12994*7c356e86SAndroid Build Coastguard Worker---
12995*7c356e86SAndroid Build Coastguard Workername: nameref-3
12996*7c356e86SAndroid Build Coastguard Workerdescription:
12997*7c356e86SAndroid Build Coastguard Worker	Advanced testsuite for bound variables (ksh93 fails this)
12998*7c356e86SAndroid Build Coastguard Workerstdin:
12999*7c356e86SAndroid Build Coastguard Worker	typeset -n foo=bar[i]
13000*7c356e86SAndroid Build Coastguard Worker	set -A bar -- b c a
13001*7c356e86SAndroid Build Coastguard Worker	for i in 0 1 2 3; do
13002*7c356e86SAndroid Build Coastguard Worker		print $i $foo .
13003*7c356e86SAndroid Build Coastguard Worker	done
13004*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13005*7c356e86SAndroid Build Coastguard Worker	0 b .
13006*7c356e86SAndroid Build Coastguard Worker	1 c .
13007*7c356e86SAndroid Build Coastguard Worker	2 a .
13008*7c356e86SAndroid Build Coastguard Worker	3 .
13009*7c356e86SAndroid Build Coastguard Worker---
13010*7c356e86SAndroid Build Coastguard Workername: nameref-4
13011*7c356e86SAndroid Build Coastguard Workerdescription:
13012*7c356e86SAndroid Build Coastguard Worker	Ensure we don't run in an infinite loop
13013*7c356e86SAndroid Build Coastguard Workertime-limit: 3
13014*7c356e86SAndroid Build Coastguard Workerstdin:
13015*7c356e86SAndroid Build Coastguard Worker	baz() {
13016*7c356e86SAndroid Build Coastguard Worker		typeset -n foo=fnord fnord=foo
13017*7c356e86SAndroid Build Coastguard Worker		foo[0]=bar
13018*7c356e86SAndroid Build Coastguard Worker	}
13019*7c356e86SAndroid Build Coastguard Worker	set -A foo bad
13020*7c356e86SAndroid Build Coastguard Worker	echo sind $foo .
13021*7c356e86SAndroid Build Coastguard Worker	baz
13022*7c356e86SAndroid Build Coastguard Worker	echo blah $foo .
13023*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13024*7c356e86SAndroid Build Coastguard Worker	sind bad .
13025*7c356e86SAndroid Build Coastguard Worker	blah bad .
13026*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
13027*7c356e86SAndroid Build Coastguard Worker	/fnord: expression recurses on parameter/
13028*7c356e86SAndroid Build Coastguard Worker---
13029*7c356e86SAndroid Build Coastguard Workername: better-parens-1a
13030*7c356e86SAndroid Build Coastguard Workerdescription:
13031*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13032*7c356e86SAndroid Build Coastguard Workerstdin:
13033*7c356e86SAndroid Build Coastguard Worker	if ( (echo fubar)|tr u x); then
13034*7c356e86SAndroid Build Coastguard Worker		echo ja
13035*7c356e86SAndroid Build Coastguard Worker	else
13036*7c356e86SAndroid Build Coastguard Worker		echo nein
13037*7c356e86SAndroid Build Coastguard Worker	fi
13038*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13039*7c356e86SAndroid Build Coastguard Worker	fxbar
13040*7c356e86SAndroid Build Coastguard Worker	ja
13041*7c356e86SAndroid Build Coastguard Worker---
13042*7c356e86SAndroid Build Coastguard Workername: better-parens-1b
13043*7c356e86SAndroid Build Coastguard Workerdescription:
13044*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13045*7c356e86SAndroid Build Coastguard Workerstdin:
13046*7c356e86SAndroid Build Coastguard Worker	echo $( (echo fubar)|tr u x) $?
13047*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13048*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13049*7c356e86SAndroid Build Coastguard Worker---
13050*7c356e86SAndroid Build Coastguard Workername: better-parens-1c
13051*7c356e86SAndroid Build Coastguard Workerdescription:
13052*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13053*7c356e86SAndroid Build Coastguard Workerstdin:
13054*7c356e86SAndroid Build Coastguard Worker	x=$( (echo fubar)|tr u x); echo $x $?
13055*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13056*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13057*7c356e86SAndroid Build Coastguard Worker---
13058*7c356e86SAndroid Build Coastguard Workername: better-parens-2a
13059*7c356e86SAndroid Build Coastguard Workerdescription:
13060*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13061*7c356e86SAndroid Build Coastguard Workerstdin:
13062*7c356e86SAndroid Build Coastguard Worker	if ((echo fubar)|tr u x); then
13063*7c356e86SAndroid Build Coastguard Worker		echo ja
13064*7c356e86SAndroid Build Coastguard Worker	else
13065*7c356e86SAndroid Build Coastguard Worker		echo nein
13066*7c356e86SAndroid Build Coastguard Worker	fi
13067*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13068*7c356e86SAndroid Build Coastguard Worker	fxbar
13069*7c356e86SAndroid Build Coastguard Worker	ja
13070*7c356e86SAndroid Build Coastguard Worker---
13071*7c356e86SAndroid Build Coastguard Workername: better-parens-2b
13072*7c356e86SAndroid Build Coastguard Workerdescription:
13073*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13074*7c356e86SAndroid Build Coastguard Workerstdin:
13075*7c356e86SAndroid Build Coastguard Worker	echo $((echo fubar)|tr u x) $?
13076*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13077*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13078*7c356e86SAndroid Build Coastguard Worker---
13079*7c356e86SAndroid Build Coastguard Workername: better-parens-2c
13080*7c356e86SAndroid Build Coastguard Workerdescription:
13081*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13082*7c356e86SAndroid Build Coastguard Workerstdin:
13083*7c356e86SAndroid Build Coastguard Worker	x=$((echo fubar)|tr u x); echo $x $?
13084*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13085*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13086*7c356e86SAndroid Build Coastguard Worker---
13087*7c356e86SAndroid Build Coastguard Workername: better-parens-3a
13088*7c356e86SAndroid Build Coastguard Workerdescription:
13089*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13090*7c356e86SAndroid Build Coastguard Workerstdin:
13091*7c356e86SAndroid Build Coastguard Worker	if ( (echo fubar)|(tr u x)); then
13092*7c356e86SAndroid Build Coastguard Worker		echo ja
13093*7c356e86SAndroid Build Coastguard Worker	else
13094*7c356e86SAndroid Build Coastguard Worker		echo nein
13095*7c356e86SAndroid Build Coastguard Worker	fi
13096*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13097*7c356e86SAndroid Build Coastguard Worker	fxbar
13098*7c356e86SAndroid Build Coastguard Worker	ja
13099*7c356e86SAndroid Build Coastguard Worker---
13100*7c356e86SAndroid Build Coastguard Workername: better-parens-3b
13101*7c356e86SAndroid Build Coastguard Workerdescription:
13102*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13103*7c356e86SAndroid Build Coastguard Workerstdin:
13104*7c356e86SAndroid Build Coastguard Worker	echo $( (echo fubar)|(tr u x)) $?
13105*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13106*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13107*7c356e86SAndroid Build Coastguard Worker---
13108*7c356e86SAndroid Build Coastguard Workername: better-parens-3c
13109*7c356e86SAndroid Build Coastguard Workerdescription:
13110*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13111*7c356e86SAndroid Build Coastguard Workerstdin:
13112*7c356e86SAndroid Build Coastguard Worker	x=$( (echo fubar)|(tr u x)); echo $x $?
13113*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13114*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13115*7c356e86SAndroid Build Coastguard Worker---
13116*7c356e86SAndroid Build Coastguard Workername: better-parens-4a
13117*7c356e86SAndroid Build Coastguard Workerdescription:
13118*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13119*7c356e86SAndroid Build Coastguard Workerstdin:
13120*7c356e86SAndroid Build Coastguard Worker	if ((echo fubar)|(tr u x)); then
13121*7c356e86SAndroid Build Coastguard Worker		echo ja
13122*7c356e86SAndroid Build Coastguard Worker	else
13123*7c356e86SAndroid Build Coastguard Worker		echo nein
13124*7c356e86SAndroid Build Coastguard Worker	fi
13125*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13126*7c356e86SAndroid Build Coastguard Worker	fxbar
13127*7c356e86SAndroid Build Coastguard Worker	ja
13128*7c356e86SAndroid Build Coastguard Worker---
13129*7c356e86SAndroid Build Coastguard Workername: better-parens-4b
13130*7c356e86SAndroid Build Coastguard Workerdescription:
13131*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13132*7c356e86SAndroid Build Coastguard Workerstdin:
13133*7c356e86SAndroid Build Coastguard Worker	echo $((echo fubar)|(tr u x)) $?
13134*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13135*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13136*7c356e86SAndroid Build Coastguard Worker---
13137*7c356e86SAndroid Build Coastguard Workername: better-parens-4c
13138*7c356e86SAndroid Build Coastguard Workerdescription:
13139*7c356e86SAndroid Build Coastguard Worker	Check support for ((…)) and $((…)) vs (…) and $(…)
13140*7c356e86SAndroid Build Coastguard Workerstdin:
13141*7c356e86SAndroid Build Coastguard Worker	x=$((echo fubar)|(tr u x)); echo $x $?
13142*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13143*7c356e86SAndroid Build Coastguard Worker	fxbar 0
13144*7c356e86SAndroid Build Coastguard Worker---
13145*7c356e86SAndroid Build Coastguard Workername: better-parens-5
13146*7c356e86SAndroid Build Coastguard Workerdescription:
13147*7c356e86SAndroid Build Coastguard Worker	Another corner case
13148*7c356e86SAndroid Build Coastguard Workerstdin:
13149*7c356e86SAndroid Build Coastguard Worker	( (echo 'fo	o$bar' "baz\$bla\"" m\$eh) | tr a A)
13150*7c356e86SAndroid Build Coastguard Worker	((echo 'fo	o$bar' "baz\$bla\"" m\$eh) | tr a A)
13151*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13152*7c356e86SAndroid Build Coastguard Worker	fo	o$bAr bAz$blA" m$eh
13153*7c356e86SAndroid Build Coastguard Worker	fo	o$bAr bAz$blA" m$eh
13154*7c356e86SAndroid Build Coastguard Worker---
13155*7c356e86SAndroid Build Coastguard Workername: echo-test-1
13156*7c356e86SAndroid Build Coastguard Workerdescription:
13157*7c356e86SAndroid Build Coastguard Worker	Test what the echo builtin does (mksh)
13158*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes
13159*7c356e86SAndroid Build Coastguard Workerstdin:
13160*7c356e86SAndroid Build Coastguard Worker	echo -n 'foo\x40bar'
13161*7c356e86SAndroid Build Coastguard Worker	echo -e '\tbaz'
13162*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13163*7c356e86SAndroid Build Coastguard Worker	foo@bar	baz
13164*7c356e86SAndroid Build Coastguard Worker---
13165*7c356e86SAndroid Build Coastguard Workername: echo-test-1-ebcdic
13166*7c356e86SAndroid Build Coastguard Workerdescription:
13167*7c356e86SAndroid Build Coastguard Worker	Test what the echo builtin does (mksh)
13168*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
13169*7c356e86SAndroid Build Coastguard Workerstdin:
13170*7c356e86SAndroid Build Coastguard Worker	echo -n 'foo\x7Cbar'
13171*7c356e86SAndroid Build Coastguard Worker	echo -e '\tbaz'
13172*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13173*7c356e86SAndroid Build Coastguard Worker	foo@bar	baz
13174*7c356e86SAndroid Build Coastguard Worker---
13175*7c356e86SAndroid Build Coastguard Workername: echo-test-2
13176*7c356e86SAndroid Build Coastguard Workerdescription:
13177*7c356e86SAndroid Build Coastguard Worker	Test what the echo builtin does (POSIX)
13178*7c356e86SAndroid Build Coastguard Worker	Note: this follows Debian Policy 10.4 which mandates
13179*7c356e86SAndroid Build Coastguard Worker	that -n shall be treated as an option, not XSI which
13180*7c356e86SAndroid Build Coastguard Worker	mandates it shall be treated as string but escapes
13181*7c356e86SAndroid Build Coastguard Worker	shall be expanded.
13182*7c356e86SAndroid Build Coastguard Workerstdin:
13183*7c356e86SAndroid Build Coastguard Worker	test -n "$POSH_VERSION" || set -o posix
13184*7c356e86SAndroid Build Coastguard Worker	echo -n 'foo\x40bar'
13185*7c356e86SAndroid Build Coastguard Worker	echo -e '\tbaz'
13186*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13187*7c356e86SAndroid Build Coastguard Worker	foo\x40bar-e \tbaz
13188*7c356e86SAndroid Build Coastguard Worker---
13189*7c356e86SAndroid Build Coastguard Workername: echo-test-3-mnbsd
13190*7c356e86SAndroid Build Coastguard Workerdescription:
13191*7c356e86SAndroid Build Coastguard Worker	Test what the echo builtin does, and test a compatibility flag.
13192*7c356e86SAndroid Build Coastguard Workercategory: mnbsdash
13193*7c356e86SAndroid Build Coastguard Workerstdin:
13194*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo -n 1=\\x40$1; echo -e \\x2E' -- foo bar
13195*7c356e86SAndroid Build Coastguard Worker	"$__progname" -o posix -c 'echo -n 2=\\x40$1; echo -e \\x2E' -- foo bar
13196*7c356e86SAndroid Build Coastguard Worker	"$__progname" -o sh -c 'echo -n 3=\\x40$1; echo -e \\x2E' -- foo bar
13197*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13198*7c356e86SAndroid Build Coastguard Worker	1=@foo.
13199*7c356e86SAndroid Build Coastguard Worker	2=\x40foo-e \x2E
13200*7c356e86SAndroid Build Coastguard Worker	3=\x40bar.
13201*7c356e86SAndroid Build Coastguard Worker---
13202*7c356e86SAndroid Build Coastguard Workername: echo-test-3-normal
13203*7c356e86SAndroid Build Coastguard Workerdescription:
13204*7c356e86SAndroid Build Coastguard Worker	Test what the echo builtin does, and test a compatibility flag.
13205*7c356e86SAndroid Build Coastguard Workercategory: !mnbsdash,!shell:ebcdic-yes
13206*7c356e86SAndroid Build Coastguard Workerstdin:
13207*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo -n 1=\\x40$1; echo -e \\x2E' -- foo bar
13208*7c356e86SAndroid Build Coastguard Worker	"$__progname" -o posix -c 'echo -n 2=\\x40$1; echo -e \\x2E' -- foo bar
13209*7c356e86SAndroid Build Coastguard Worker	"$__progname" -o sh -c 'echo -n 3=\\x40$1; echo -e \\x2E' -- foo bar
13210*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13211*7c356e86SAndroid Build Coastguard Worker	1=@foo.
13212*7c356e86SAndroid Build Coastguard Worker	2=\x40foo-e \x2E
13213*7c356e86SAndroid Build Coastguard Worker	3=\x40foo-e \x2E
13214*7c356e86SAndroid Build Coastguard Worker---
13215*7c356e86SAndroid Build Coastguard Workername: echo-test-3-ebcdic
13216*7c356e86SAndroid Build Coastguard Workerdescription:
13217*7c356e86SAndroid Build Coastguard Worker	Test what the echo builtin does, and test a compatibility flag.
13218*7c356e86SAndroid Build Coastguard Workercategory: !mnbsdash,!shell:ebcdic-no
13219*7c356e86SAndroid Build Coastguard Workerstdin:
13220*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'echo -n 1=\\x7C$1; echo -e \\x4B' -- foo bar
13221*7c356e86SAndroid Build Coastguard Worker	"$__progname" -o posix -c 'echo -n 2=\\x7C$1; echo -e \\x4B' -- foo bar
13222*7c356e86SAndroid Build Coastguard Worker	"$__progname" -o sh -c 'echo -n 3=\\x7C$1; echo -e \\x4B' -- foo bar
13223*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13224*7c356e86SAndroid Build Coastguard Worker	1=@foo.
13225*7c356e86SAndroid Build Coastguard Worker	2=\x7Cfoo-e \x4B
13226*7c356e86SAndroid Build Coastguard Worker	3=\x7Cfoo-e \x4B
13227*7c356e86SAndroid Build Coastguard Worker---
13228*7c356e86SAndroid Build Coastguard Workername: utilities-getopts-1
13229*7c356e86SAndroid Build Coastguard Workerdescription:
13230*7c356e86SAndroid Build Coastguard Worker	getopts sets OPTIND correctly for unparsed option
13231*7c356e86SAndroid Build Coastguard Workerstdin:
13232*7c356e86SAndroid Build Coastguard Worker	set -- -a -a -x
13233*7c356e86SAndroid Build Coastguard Worker	while getopts :a optc; do
13234*7c356e86SAndroid Build Coastguard Worker	    echo "OPTARG=$OPTARG, OPTIND=$OPTIND, optc=$optc."
13235*7c356e86SAndroid Build Coastguard Worker	done
13236*7c356e86SAndroid Build Coastguard Worker	echo done
13237*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13238*7c356e86SAndroid Build Coastguard Worker	OPTARG=, OPTIND=2, optc=a.
13239*7c356e86SAndroid Build Coastguard Worker	OPTARG=, OPTIND=3, optc=a.
13240*7c356e86SAndroid Build Coastguard Worker	OPTARG=x, OPTIND=4, optc=?.
13241*7c356e86SAndroid Build Coastguard Worker	done
13242*7c356e86SAndroid Build Coastguard Worker---
13243*7c356e86SAndroid Build Coastguard Workername: utilities-getopts-2
13244*7c356e86SAndroid Build Coastguard Workerdescription:
13245*7c356e86SAndroid Build Coastguard Worker	Check OPTARG
13246*7c356e86SAndroid Build Coastguard Workerstdin:
13247*7c356e86SAndroid Build Coastguard Worker	set -- -a Mary -x
13248*7c356e86SAndroid Build Coastguard Worker	while getopts a: optc; do
13249*7c356e86SAndroid Build Coastguard Worker	    echo "OPTARG=$OPTARG, OPTIND=$OPTIND, optc=$optc."
13250*7c356e86SAndroid Build Coastguard Worker	done
13251*7c356e86SAndroid Build Coastguard Worker	echo done
13252*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13253*7c356e86SAndroid Build Coastguard Worker	OPTARG=Mary, OPTIND=3, optc=a.
13254*7c356e86SAndroid Build Coastguard Worker	OPTARG=, OPTIND=4, optc=?.
13255*7c356e86SAndroid Build Coastguard Worker	done
13256*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*-x.*option/
13257*7c356e86SAndroid Build Coastguard Worker---
13258*7c356e86SAndroid Build Coastguard Workername: utilities-getopts-3
13259*7c356e86SAndroid Build Coastguard Workerdescription:
13260*7c356e86SAndroid Build Coastguard Worker	Check unsetting OPTARG
13261*7c356e86SAndroid Build Coastguard Workerstdin:
13262*7c356e86SAndroid Build Coastguard Worker	set -- -x arg -y
13263*7c356e86SAndroid Build Coastguard Worker	getopts x:y opt && echo "${OPTARG-unset}"
13264*7c356e86SAndroid Build Coastguard Worker	getopts x:y opt && echo "${OPTARG-unset}"
13265*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13266*7c356e86SAndroid Build Coastguard Worker	arg
13267*7c356e86SAndroid Build Coastguard Worker	unset
13268*7c356e86SAndroid Build Coastguard Worker---
13269*7c356e86SAndroid Build Coastguard Workername: wcswidth-1
13270*7c356e86SAndroid Build Coastguard Workerdescription:
13271*7c356e86SAndroid Build Coastguard Worker	Check the new wcswidth feature
13272*7c356e86SAndroid Build Coastguard Workerstdin:
13273*7c356e86SAndroid Build Coastguard Worker	s=何
13274*7c356e86SAndroid Build Coastguard Worker	set +U
13275*7c356e86SAndroid Build Coastguard Worker	print octets: ${#s} .
13276*7c356e86SAndroid Build Coastguard Worker	print 8-bit width: ${%s} .
13277*7c356e86SAndroid Build Coastguard Worker	set -U
13278*7c356e86SAndroid Build Coastguard Worker	print characters: ${#s} .
13279*7c356e86SAndroid Build Coastguard Worker	print columns: ${%s} .
13280*7c356e86SAndroid Build Coastguard Worker	s=�
13281*7c356e86SAndroid Build Coastguard Worker	set +U
13282*7c356e86SAndroid Build Coastguard Worker	print octets: ${#s} .
13283*7c356e86SAndroid Build Coastguard Worker	print 8-bit width: ${%s} .
13284*7c356e86SAndroid Build Coastguard Worker	set -U
13285*7c356e86SAndroid Build Coastguard Worker	print characters: ${#s} .
13286*7c356e86SAndroid Build Coastguard Worker	print columns: ${%s} .
13287*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13288*7c356e86SAndroid Build Coastguard Worker	octets: 3 .
13289*7c356e86SAndroid Build Coastguard Worker	8-bit width: -1 .
13290*7c356e86SAndroid Build Coastguard Worker	characters: 1 .
13291*7c356e86SAndroid Build Coastguard Worker	columns: 2 .
13292*7c356e86SAndroid Build Coastguard Worker	octets: 3 .
13293*7c356e86SAndroid Build Coastguard Worker	8-bit width: 3 .
13294*7c356e86SAndroid Build Coastguard Worker	characters: 1 .
13295*7c356e86SAndroid Build Coastguard Worker	columns: 1 .
13296*7c356e86SAndroid Build Coastguard Worker---
13297*7c356e86SAndroid Build Coastguard Workername: wcswidth-2
13298*7c356e86SAndroid Build Coastguard Workerdescription:
13299*7c356e86SAndroid Build Coastguard Worker	Check some corner cases
13300*7c356e86SAndroid Build Coastguard Workerstdin:
13301*7c356e86SAndroid Build Coastguard Worker	print % $% .
13302*7c356e86SAndroid Build Coastguard Worker	set -U
13303*7c356e86SAndroid Build Coastguard Worker	x='a	b'
13304*7c356e86SAndroid Build Coastguard Worker	print c ${%x} .
13305*7c356e86SAndroid Build Coastguard Worker	set +U
13306*7c356e86SAndroid Build Coastguard Worker	x='a	b'
13307*7c356e86SAndroid Build Coastguard Worker	print d ${%x} .
13308*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13309*7c356e86SAndroid Build Coastguard Worker	% $% .
13310*7c356e86SAndroid Build Coastguard Worker	c -1 .
13311*7c356e86SAndroid Build Coastguard Worker	d -1 .
13312*7c356e86SAndroid Build Coastguard Worker---
13313*7c356e86SAndroid Build Coastguard Workername: wcswidth-3
13314*7c356e86SAndroid Build Coastguard Workerdescription:
13315*7c356e86SAndroid Build Coastguard Worker	Check some corner cases
13316*7c356e86SAndroid Build Coastguard Workerstdin:
13317*7c356e86SAndroid Build Coastguard Worker	print ${%} .
13318*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
13319*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
13320*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
13321*7c356e86SAndroid Build Coastguard Worker---
13322*7c356e86SAndroid Build Coastguard Workername: wcswidth-4a
13323*7c356e86SAndroid Build Coastguard Workerdescription:
13324*7c356e86SAndroid Build Coastguard Worker	Check some corner cases
13325*7c356e86SAndroid Build Coastguard Workerstdin:
13326*7c356e86SAndroid Build Coastguard Worker	print ${%*} .
13327*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
13328*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
13329*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
13330*7c356e86SAndroid Build Coastguard Worker---
13331*7c356e86SAndroid Build Coastguard Workername: wcswidth-4b
13332*7c356e86SAndroid Build Coastguard Workerdescription:
13333*7c356e86SAndroid Build Coastguard Worker	Check some corner cases
13334*7c356e86SAndroid Build Coastguard Workerstdin:
13335*7c356e86SAndroid Build Coastguard Worker	print ${%@} .
13336*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
13337*7c356e86SAndroid Build Coastguard Worker	/bad substitution/
13338*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1
13339*7c356e86SAndroid Build Coastguard Worker---
13340*7c356e86SAndroid Build Coastguard Workername: wcswidth-4c
13341*7c356e86SAndroid Build Coastguard Workerdescription:
13342*7c356e86SAndroid Build Coastguard Worker	Check some corner cases
13343*7c356e86SAndroid Build Coastguard Workerstdin:
13344*7c356e86SAndroid Build Coastguard Worker	:
13345*7c356e86SAndroid Build Coastguard Worker	print ${%?} .
13346*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13347*7c356e86SAndroid Build Coastguard Worker	1 .
13348*7c356e86SAndroid Build Coastguard Worker---
13349*7c356e86SAndroid Build Coastguard Workername: realpath-1
13350*7c356e86SAndroid Build Coastguard Workerdescription:
13351*7c356e86SAndroid Build Coastguard Worker	Check proper return values for realpath
13352*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd
13353*7c356e86SAndroid Build Coastguard Workerstdin:
13354*7c356e86SAndroid Build Coastguard Worker	wd=$(realpath .)
13355*7c356e86SAndroid Build Coastguard Worker	mkdir dir
13356*7c356e86SAndroid Build Coastguard Worker	:>file
13357*7c356e86SAndroid Build Coastguard Worker	:>dir/file
13358*7c356e86SAndroid Build Coastguard Worker	ln -s dir lndir
13359*7c356e86SAndroid Build Coastguard Worker	ln -s file lnfile
13360*7c356e86SAndroid Build Coastguard Worker	ln -s nix lnnix
13361*7c356e86SAndroid Build Coastguard Worker	ln -s . lnself
13362*7c356e86SAndroid Build Coastguard Worker	i=0
13363*7c356e86SAndroid Build Coastguard Worker	chk() {
13364*7c356e86SAndroid Build Coastguard Worker		typeset x y
13365*7c356e86SAndroid Build Coastguard Worker		x=$(realpath "$wd/$1" 2>&1); y=$?
13366*7c356e86SAndroid Build Coastguard Worker		print $((++i)) "?$1" =${x##*$wd/} !$y
13367*7c356e86SAndroid Build Coastguard Worker	}
13368*7c356e86SAndroid Build Coastguard Worker	chk dir
13369*7c356e86SAndroid Build Coastguard Worker	chk dir/
13370*7c356e86SAndroid Build Coastguard Worker	chk dir/file
13371*7c356e86SAndroid Build Coastguard Worker	chk dir/nix
13372*7c356e86SAndroid Build Coastguard Worker	chk file
13373*7c356e86SAndroid Build Coastguard Worker	chk file/
13374*7c356e86SAndroid Build Coastguard Worker	chk file/file
13375*7c356e86SAndroid Build Coastguard Worker	chk file/nix
13376*7c356e86SAndroid Build Coastguard Worker	chk nix
13377*7c356e86SAndroid Build Coastguard Worker	chk nix/
13378*7c356e86SAndroid Build Coastguard Worker	chk nix/file
13379*7c356e86SAndroid Build Coastguard Worker	chk nix/nix
13380*7c356e86SAndroid Build Coastguard Worker	chk lndir
13381*7c356e86SAndroid Build Coastguard Worker	chk lndir/
13382*7c356e86SAndroid Build Coastguard Worker	chk lndir/file
13383*7c356e86SAndroid Build Coastguard Worker	chk lndir/nix
13384*7c356e86SAndroid Build Coastguard Worker	chk lnfile
13385*7c356e86SAndroid Build Coastguard Worker	chk lnfile/
13386*7c356e86SAndroid Build Coastguard Worker	chk lnfile/file
13387*7c356e86SAndroid Build Coastguard Worker	chk lnfile/nix
13388*7c356e86SAndroid Build Coastguard Worker	chk lnnix
13389*7c356e86SAndroid Build Coastguard Worker	chk lnnix/
13390*7c356e86SAndroid Build Coastguard Worker	chk lnnix/file
13391*7c356e86SAndroid Build Coastguard Worker	chk lnnix/nix
13392*7c356e86SAndroid Build Coastguard Worker	chk lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself
13393*7c356e86SAndroid Build Coastguard Worker	rm lnself
13394*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13395*7c356e86SAndroid Build Coastguard Worker	1 ?dir =dir !0
13396*7c356e86SAndroid Build Coastguard Worker	2 ?dir/ =dir !0
13397*7c356e86SAndroid Build Coastguard Worker	3 ?dir/file =dir/file !0
13398*7c356e86SAndroid Build Coastguard Worker	4 ?dir/nix =dir/nix !0
13399*7c356e86SAndroid Build Coastguard Worker	5 ?file =file !0
13400*7c356e86SAndroid Build Coastguard Worker	6 ?file/ =file/: Not a directory !20
13401*7c356e86SAndroid Build Coastguard Worker	7 ?file/file =file/file: Not a directory !20
13402*7c356e86SAndroid Build Coastguard Worker	8 ?file/nix =file/nix: Not a directory !20
13403*7c356e86SAndroid Build Coastguard Worker	9 ?nix =nix !0
13404*7c356e86SAndroid Build Coastguard Worker	10 ?nix/ =nix !0
13405*7c356e86SAndroid Build Coastguard Worker	11 ?nix/file =nix/file: No such file or directory !2
13406*7c356e86SAndroid Build Coastguard Worker	12 ?nix/nix =nix/nix: No such file or directory !2
13407*7c356e86SAndroid Build Coastguard Worker	13 ?lndir =dir !0
13408*7c356e86SAndroid Build Coastguard Worker	14 ?lndir/ =dir !0
13409*7c356e86SAndroid Build Coastguard Worker	15 ?lndir/file =dir/file !0
13410*7c356e86SAndroid Build Coastguard Worker	16 ?lndir/nix =dir/nix !0
13411*7c356e86SAndroid Build Coastguard Worker	17 ?lnfile =file !0
13412*7c356e86SAndroid Build Coastguard Worker	18 ?lnfile/ =lnfile/: Not a directory !20
13413*7c356e86SAndroid Build Coastguard Worker	19 ?lnfile/file =lnfile/file: Not a directory !20
13414*7c356e86SAndroid Build Coastguard Worker	20 ?lnfile/nix =lnfile/nix: Not a directory !20
13415*7c356e86SAndroid Build Coastguard Worker	21 ?lnnix =nix !0
13416*7c356e86SAndroid Build Coastguard Worker	22 ?lnnix/ =nix !0
13417*7c356e86SAndroid Build Coastguard Worker	23 ?lnnix/file =lnnix/file: No such file or directory !2
13418*7c356e86SAndroid Build Coastguard Worker	24 ?lnnix/nix =lnnix/nix: No such file or directory !2
13419*7c356e86SAndroid Build Coastguard Worker	25 ?lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself =lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself: Too many levels of symbolic links !62
13420*7c356e86SAndroid Build Coastguard Worker---
13421*7c356e86SAndroid Build Coastguard Workername: realpath-2
13422*7c356e86SAndroid Build Coastguard Workerdescription:
13423*7c356e86SAndroid Build Coastguard Worker	Ensure that exactly two leading slashes are not collapsed
13424*7c356e86SAndroid Build Coastguard Worker	POSIX guarantees this exception, e.g. for UNC paths on Cygwin
13425*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd
13426*7c356e86SAndroid Build Coastguard Workerstdin:
13427*7c356e86SAndroid Build Coastguard Worker	ln -s /bin t1
13428*7c356e86SAndroid Build Coastguard Worker	ln -s //bin t2
13429*7c356e86SAndroid Build Coastguard Worker	ln -s ///bin t3
13430*7c356e86SAndroid Build Coastguard Worker	realpath /bin
13431*7c356e86SAndroid Build Coastguard Worker	realpath //bin
13432*7c356e86SAndroid Build Coastguard Worker	realpath ///bin
13433*7c356e86SAndroid Build Coastguard Worker	realpath /usr/bin
13434*7c356e86SAndroid Build Coastguard Worker	realpath /usr//bin
13435*7c356e86SAndroid Build Coastguard Worker	realpath /usr///bin
13436*7c356e86SAndroid Build Coastguard Worker	realpath t1
13437*7c356e86SAndroid Build Coastguard Worker	realpath t2
13438*7c356e86SAndroid Build Coastguard Worker	realpath t3
13439*7c356e86SAndroid Build Coastguard Worker	rm -f t1 t2 t3
13440*7c356e86SAndroid Build Coastguard Worker	cd //usr/bin
13441*7c356e86SAndroid Build Coastguard Worker	pwd
13442*7c356e86SAndroid Build Coastguard Worker	cd ../lib
13443*7c356e86SAndroid Build Coastguard Worker	pwd
13444*7c356e86SAndroid Build Coastguard Worker	realpath //usr/include/../bin
13445*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13446*7c356e86SAndroid Build Coastguard Worker	/bin
13447*7c356e86SAndroid Build Coastguard Worker	//bin
13448*7c356e86SAndroid Build Coastguard Worker	/bin
13449*7c356e86SAndroid Build Coastguard Worker	/usr/bin
13450*7c356e86SAndroid Build Coastguard Worker	/usr/bin
13451*7c356e86SAndroid Build Coastguard Worker	/usr/bin
13452*7c356e86SAndroid Build Coastguard Worker	/bin
13453*7c356e86SAndroid Build Coastguard Worker	//bin
13454*7c356e86SAndroid Build Coastguard Worker	/bin
13455*7c356e86SAndroid Build Coastguard Worker	//usr/bin
13456*7c356e86SAndroid Build Coastguard Worker	//usr/lib
13457*7c356e86SAndroid Build Coastguard Worker	//usr/bin
13458*7c356e86SAndroid Build Coastguard Worker---
13459*7c356e86SAndroid Build Coastguard Workername: crash-1
13460*7c356e86SAndroid Build Coastguard Workerdescription:
13461*7c356e86SAndroid Build Coastguard Worker	Crashed during March 2011, fixed on vernal equinōx ☺
13462*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd,os:openbsd
13463*7c356e86SAndroid Build Coastguard Workerstdin:
13464*7c356e86SAndroid Build Coastguard Worker	export MALLOC_OPTIONS=FGJRSX
13465*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'x=$(tr z r <<<baz); echo $x'
13466*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13467*7c356e86SAndroid Build Coastguard Worker	bar
13468*7c356e86SAndroid Build Coastguard Worker---
13469*7c356e86SAndroid Build Coastguard Workername: debian-117-1
13470*7c356e86SAndroid Build Coastguard Workerdescription:
13471*7c356e86SAndroid Build Coastguard Worker	Check test - bug#465250
13472*7c356e86SAndroid Build Coastguard Workerstdin:
13473*7c356e86SAndroid Build Coastguard Worker	test \( ! -e \) ; echo $?
13474*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13475*7c356e86SAndroid Build Coastguard Worker	1
13476*7c356e86SAndroid Build Coastguard Worker---
13477*7c356e86SAndroid Build Coastguard Workername: debian-117-2
13478*7c356e86SAndroid Build Coastguard Workerdescription:
13479*7c356e86SAndroid Build Coastguard Worker	Check test - bug#465250
13480*7c356e86SAndroid Build Coastguard Workerstdin:
13481*7c356e86SAndroid Build Coastguard Worker	test \(  -e \) ; echo $?
13482*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13483*7c356e86SAndroid Build Coastguard Worker	0
13484*7c356e86SAndroid Build Coastguard Worker---
13485*7c356e86SAndroid Build Coastguard Workername: debian-117-3
13486*7c356e86SAndroid Build Coastguard Workerdescription:
13487*7c356e86SAndroid Build Coastguard Worker	Check test - bug#465250
13488*7c356e86SAndroid Build Coastguard Workerstdin:
13489*7c356e86SAndroid Build Coastguard Worker	test ! -e  ; echo $?
13490*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13491*7c356e86SAndroid Build Coastguard Worker	1
13492*7c356e86SAndroid Build Coastguard Worker---
13493*7c356e86SAndroid Build Coastguard Workername: debian-117-4
13494*7c356e86SAndroid Build Coastguard Workerdescription:
13495*7c356e86SAndroid Build Coastguard Worker	Check test - bug#465250
13496*7c356e86SAndroid Build Coastguard Workerstdin:
13497*7c356e86SAndroid Build Coastguard Worker	test  -e  ; echo $?
13498*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13499*7c356e86SAndroid Build Coastguard Worker	0
13500*7c356e86SAndroid Build Coastguard Worker---
13501*7c356e86SAndroid Build Coastguard Workername: case-zsh
13502*7c356e86SAndroid Build Coastguard Workerdescription:
13503*7c356e86SAndroid Build Coastguard Worker	Check that zsh case variants work
13504*7c356e86SAndroid Build Coastguard Workerstdin:
13505*7c356e86SAndroid Build Coastguard Worker	case 'b' in
13506*7c356e86SAndroid Build Coastguard Worker	  a) echo a ;;
13507*7c356e86SAndroid Build Coastguard Worker	  b) echo b ;;
13508*7c356e86SAndroid Build Coastguard Worker	  c) echo c ;;
13509*7c356e86SAndroid Build Coastguard Worker	  *) echo x ;;
13510*7c356e86SAndroid Build Coastguard Worker	esac
13511*7c356e86SAndroid Build Coastguard Worker	echo =
13512*7c356e86SAndroid Build Coastguard Worker	case 'b' in
13513*7c356e86SAndroid Build Coastguard Worker	  a) echo a ;&
13514*7c356e86SAndroid Build Coastguard Worker	  b) echo b ;&
13515*7c356e86SAndroid Build Coastguard Worker	  c) echo c ;&
13516*7c356e86SAndroid Build Coastguard Worker	  *) echo x ;&
13517*7c356e86SAndroid Build Coastguard Worker	esac
13518*7c356e86SAndroid Build Coastguard Worker	echo =
13519*7c356e86SAndroid Build Coastguard Worker	case 'b' in
13520*7c356e86SAndroid Build Coastguard Worker	  a) echo a ;|
13521*7c356e86SAndroid Build Coastguard Worker	  b) echo b ;|
13522*7c356e86SAndroid Build Coastguard Worker	  c) echo c ;|
13523*7c356e86SAndroid Build Coastguard Worker	  *) echo x ;|
13524*7c356e86SAndroid Build Coastguard Worker	esac
13525*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13526*7c356e86SAndroid Build Coastguard Worker	b
13527*7c356e86SAndroid Build Coastguard Worker	=
13528*7c356e86SAndroid Build Coastguard Worker	b
13529*7c356e86SAndroid Build Coastguard Worker	c
13530*7c356e86SAndroid Build Coastguard Worker	x
13531*7c356e86SAndroid Build Coastguard Worker	=
13532*7c356e86SAndroid Build Coastguard Worker	b
13533*7c356e86SAndroid Build Coastguard Worker	x
13534*7c356e86SAndroid Build Coastguard Worker---
13535*7c356e86SAndroid Build Coastguard Workername: case-braces
13536*7c356e86SAndroid Build Coastguard Workerdescription:
13537*7c356e86SAndroid Build Coastguard Worker	Check that case end tokens are not mixed up (Debian #220272)
13538*7c356e86SAndroid Build Coastguard Workerstdin:
13539*7c356e86SAndroid Build Coastguard Worker	i=0
13540*7c356e86SAndroid Build Coastguard Worker	for value in 'x' '}' 'esac'; do
13541*7c356e86SAndroid Build Coastguard Worker		print -n "$((++i))($value)bourne "
13542*7c356e86SAndroid Build Coastguard Worker		case $value in
13543*7c356e86SAndroid Build Coastguard Worker		}) echo brace ;;
13544*7c356e86SAndroid Build Coastguard Worker		*) echo no ;;
13545*7c356e86SAndroid Build Coastguard Worker		esac
13546*7c356e86SAndroid Build Coastguard Worker		print -n "$((++i))($value)korn "
13547*7c356e86SAndroid Build Coastguard Worker		case $value {
13548*7c356e86SAndroid Build Coastguard Worker		esac) echo esac ;;
13549*7c356e86SAndroid Build Coastguard Worker		*) echo no ;;
13550*7c356e86SAndroid Build Coastguard Worker		}
13551*7c356e86SAndroid Build Coastguard Worker	done
13552*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13553*7c356e86SAndroid Build Coastguard Worker	1(x)bourne no
13554*7c356e86SAndroid Build Coastguard Worker	2(x)korn no
13555*7c356e86SAndroid Build Coastguard Worker	3(})bourne brace
13556*7c356e86SAndroid Build Coastguard Worker	4(})korn no
13557*7c356e86SAndroid Build Coastguard Worker	5(esac)bourne no
13558*7c356e86SAndroid Build Coastguard Worker	6(esac)korn esac
13559*7c356e86SAndroid Build Coastguard Worker---
13560*7c356e86SAndroid Build Coastguard Workername: command-shift
13561*7c356e86SAndroid Build Coastguard Workerdescription:
13562*7c356e86SAndroid Build Coastguard Worker	Check that 'command shift' works
13563*7c356e86SAndroid Build Coastguard Workerstdin:
13564*7c356e86SAndroid Build Coastguard Worker	function snc {
13565*7c356e86SAndroid Build Coastguard Worker		echo "before	0='$0' 1='$1' 2='$2'"
13566*7c356e86SAndroid Build Coastguard Worker		shift
13567*7c356e86SAndroid Build Coastguard Worker		echo "after	0='$0' 1='$1' 2='$2'"
13568*7c356e86SAndroid Build Coastguard Worker	}
13569*7c356e86SAndroid Build Coastguard Worker	function swc {
13570*7c356e86SAndroid Build Coastguard Worker		echo "before	0='$0' 1='$1' 2='$2'"
13571*7c356e86SAndroid Build Coastguard Worker		command shift
13572*7c356e86SAndroid Build Coastguard Worker		echo "after	0='$0' 1='$1' 2='$2'"
13573*7c356e86SAndroid Build Coastguard Worker	}
13574*7c356e86SAndroid Build Coastguard Worker	echo = without command
13575*7c356e86SAndroid Build Coastguard Worker	snc 一 二
13576*7c356e86SAndroid Build Coastguard Worker	echo = with command
13577*7c356e86SAndroid Build Coastguard Worker	swc 一 二
13578*7c356e86SAndroid Build Coastguard Worker	echo = done
13579*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13580*7c356e86SAndroid Build Coastguard Worker	= without command
13581*7c356e86SAndroid Build Coastguard Worker	before	0='snc' 1='一' 2='二'
13582*7c356e86SAndroid Build Coastguard Worker	after	0='snc' 1='二' 2=''
13583*7c356e86SAndroid Build Coastguard Worker	= with command
13584*7c356e86SAndroid Build Coastguard Worker	before	0='swc' 1='一' 2='二'
13585*7c356e86SAndroid Build Coastguard Worker	after	0='swc' 1='二' 2=''
13586*7c356e86SAndroid Build Coastguard Worker	= done
13587*7c356e86SAndroid Build Coastguard Worker---
13588*7c356e86SAndroid Build Coastguard Workername: command-set
13589*7c356e86SAndroid Build Coastguard Workerdescription:
13590*7c356e86SAndroid Build Coastguard Worker	Same but with set
13591*7c356e86SAndroid Build Coastguard Workerstdin:
13592*7c356e86SAndroid Build Coastguard Worker	showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; }
13593*7c356e86SAndroid Build Coastguard Worker	showargs 1 "$@"
13594*7c356e86SAndroid Build Coastguard Worker	set -- foo bar baz
13595*7c356e86SAndroid Build Coastguard Worker	showargs 2 "$@"
13596*7c356e86SAndroid Build Coastguard Worker	command set -- miau 'meow nyao'
13597*7c356e86SAndroid Build Coastguard Worker	showargs 3 "$@"
13598*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13599*7c356e86SAndroid Build Coastguard Worker	<1> .
13600*7c356e86SAndroid Build Coastguard Worker	<2> <foo> <bar> <baz> .
13601*7c356e86SAndroid Build Coastguard Worker	<3> <miau> <meow nyao> .
13602*7c356e86SAndroid Build Coastguard Worker---
13603*7c356e86SAndroid Build Coastguard Workername: command-readonly
13604*7c356e86SAndroid Build Coastguard Workerdescription:
13605*7c356e86SAndroid Build Coastguard Worker	These should not exit on error when prefixed
13606*7c356e86SAndroid Build Coastguard Workerstdin:
13607*7c356e86SAndroid Build Coastguard Worker	exec 2>/dev/null
13608*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly v; export v=foo || echo ok'
13609*7c356e86SAndroid Build Coastguard Worker	echo ef=$?
13610*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly v; command export v=foo || echo ok'
13611*7c356e86SAndroid Build Coastguard Worker	echo en=$?
13612*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly v; readonly v=foo || echo ok'
13613*7c356e86SAndroid Build Coastguard Worker	echo rf=$?
13614*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'readonly v; command readonly v=foo || echo ok'
13615*7c356e86SAndroid Build Coastguard Worker	echo rn=$?
13616*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13617*7c356e86SAndroid Build Coastguard Worker	ef=2
13618*7c356e86SAndroid Build Coastguard Worker	ok
13619*7c356e86SAndroid Build Coastguard Worker	en=0
13620*7c356e86SAndroid Build Coastguard Worker	rf=2
13621*7c356e86SAndroid Build Coastguard Worker	ok
13622*7c356e86SAndroid Build Coastguard Worker	rn=0
13623*7c356e86SAndroid Build Coastguard Worker---
13624*7c356e86SAndroid Build Coastguard Workername: command-dot-regression
13625*7c356e86SAndroid Build Coastguard Workerdescription:
13626*7c356e86SAndroid Build Coastguard Worker	Check a regression in fixing the above does not appear
13627*7c356e86SAndroid Build Coastguard Workerstdin:
13628*7c356e86SAndroid Build Coastguard Worker	cat >test.mksh <<\EOF
13629*7c356e86SAndroid Build Coastguard Worker	set -- one two
13630*7c356e86SAndroid Build Coastguard Worker	shift
13631*7c356e86SAndroid Build Coastguard Worker	for s_arg in "$#" "$@"; do echo -n "<$s_arg> "; done; echo .
13632*7c356e86SAndroid Build Coastguard Worker	EOF
13633*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c '. ./test.mksh' dummy oh dear this is not good
13634*7c356e86SAndroid Build Coastguard Worker	echo =
13635*7c356e86SAndroid Build Coastguard Worker	"$__progname" -c 'command . ./test.mksh' dummy oh dear this is not good
13636*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13637*7c356e86SAndroid Build Coastguard Worker	<1> <two> .
13638*7c356e86SAndroid Build Coastguard Worker	=
13639*7c356e86SAndroid Build Coastguard Worker	<1> <two> .
13640*7c356e86SAndroid Build Coastguard Worker---
13641*7c356e86SAndroid Build Coastguard Workername: command-pvV-posix-priorities
13642*7c356e86SAndroid Build Coastguard Workerdescription:
13643*7c356e86SAndroid Build Coastguard Worker	For POSIX compatibility, command -v should find aliases and reserved
13644*7c356e86SAndroid Build Coastguard Worker	words, and command -p[vV] should find aliases, reserved words, and
13645*7c356e86SAndroid Build Coastguard Worker	builtins over external commands.
13646*7c356e86SAndroid Build Coastguard Workerstdin:
13647*7c356e86SAndroid Build Coastguard Worker	# extra checks prep
13648*7c356e86SAndroid Build Coastguard Worker	mkdir mrr
13649*7c356e86SAndroid Build Coastguard Worker	:>mrr/miau
13650*7c356e86SAndroid Build Coastguard Worker	chmod +x mrr/miau
13651*7c356e86SAndroid Build Coastguard Worker	# priorities
13652*7c356e86SAndroid Build Coastguard Worker	PATH=/bin:/usr/bin
13653*7c356e86SAndroid Build Coastguard Worker	alias foo="bar baz"
13654*7c356e86SAndroid Build Coastguard Worker	alias '[ab]=:'
13655*7c356e86SAndroid Build Coastguard Worker	bar() { :; }
13656*7c356e86SAndroid Build Coastguard Worker	for word in 'if' 'foo' 'bar' 'set' 'true' '[ab]'; do
13657*7c356e86SAndroid Build Coastguard Worker		command -v "$word"
13658*7c356e86SAndroid Build Coastguard Worker		command -pv "$word"
13659*7c356e86SAndroid Build Coastguard Worker		command -V "$word"
13660*7c356e86SAndroid Build Coastguard Worker		command -pV "$word"
13661*7c356e86SAndroid Build Coastguard Worker	done
13662*7c356e86SAndroid Build Coastguard Worker	# extra checks
13663*7c356e86SAndroid Build Coastguard Worker	alias '[ab]'
13664*7c356e86SAndroid Build Coastguard Worker	whence '[ab]'
13665*7c356e86SAndroid Build Coastguard Worker	PATH=mrr
13666*7c356e86SAndroid Build Coastguard Worker	case $(command -v miau) {
13667*7c356e86SAndroid Build Coastguard Worker	(mrr/miau) echo fail ;;
13668*7c356e86SAndroid Build Coastguard Worker	(!(/*|[A-Z]:/*)) echo fail2 ;;
13669*7c356e86SAndroid Build Coastguard Worker	($PWD/mrr/miau) echo ok ;;
13670*7c356e86SAndroid Build Coastguard Worker	(/*|[A-Z]:/*) echo pwd bad? ;;
13671*7c356e86SAndroid Build Coastguard Worker	(*) echo not reached ;;
13672*7c356e86SAndroid Build Coastguard Worker	}
13673*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13674*7c356e86SAndroid Build Coastguard Worker	if
13675*7c356e86SAndroid Build Coastguard Worker	if
13676*7c356e86SAndroid Build Coastguard Worker	if is a reserved word
13677*7c356e86SAndroid Build Coastguard Worker	if is a reserved word
13678*7c356e86SAndroid Build Coastguard Worker	alias foo='bar baz'
13679*7c356e86SAndroid Build Coastguard Worker	alias foo='bar baz'
13680*7c356e86SAndroid Build Coastguard Worker	foo is an alias for 'bar baz'
13681*7c356e86SAndroid Build Coastguard Worker	foo is an alias for 'bar baz'
13682*7c356e86SAndroid Build Coastguard Worker	bar
13683*7c356e86SAndroid Build Coastguard Worker	bar
13684*7c356e86SAndroid Build Coastguard Worker	bar is a function
13685*7c356e86SAndroid Build Coastguard Worker	bar is a function
13686*7c356e86SAndroid Build Coastguard Worker	set
13687*7c356e86SAndroid Build Coastguard Worker	set
13688*7c356e86SAndroid Build Coastguard Worker	set is a special shell builtin
13689*7c356e86SAndroid Build Coastguard Worker	set is a special shell builtin
13690*7c356e86SAndroid Build Coastguard Worker	true
13691*7c356e86SAndroid Build Coastguard Worker	true
13692*7c356e86SAndroid Build Coastguard Worker	true is a shell builtin
13693*7c356e86SAndroid Build Coastguard Worker	true is a shell builtin
13694*7c356e86SAndroid Build Coastguard Worker	alias '[ab]'=:
13695*7c356e86SAndroid Build Coastguard Worker	alias '[ab]'=:
13696*7c356e86SAndroid Build Coastguard Worker	'[ab]' is an alias for :
13697*7c356e86SAndroid Build Coastguard Worker	'[ab]' is an alias for :
13698*7c356e86SAndroid Build Coastguard Worker	'[ab]'=:
13699*7c356e86SAndroid Build Coastguard Worker	:
13700*7c356e86SAndroid Build Coastguard Worker	ok
13701*7c356e86SAndroid Build Coastguard Worker---
13702*7c356e86SAndroid Build Coastguard Workername: whence-preserve-tradition
13703*7c356e86SAndroid Build Coastguard Workerdescription:
13704*7c356e86SAndroid Build Coastguard Worker	This regression test is to ensure that the POSIX compatibility
13705*7c356e86SAndroid Build Coastguard Worker	changes for 'command' (see previous test) do not affect traditional
13706*7c356e86SAndroid Build Coastguard Worker	'whence' behaviour.
13707*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd
13708*7c356e86SAndroid Build Coastguard Workerstdin:
13709*7c356e86SAndroid Build Coastguard Worker	PATH=/bin:/usr/bin
13710*7c356e86SAndroid Build Coastguard Worker	alias foo="bar baz"
13711*7c356e86SAndroid Build Coastguard Worker	bar() { :; }
13712*7c356e86SAndroid Build Coastguard Worker	for word in 'if' 'foo' 'bar' 'set' 'true'; do
13713*7c356e86SAndroid Build Coastguard Worker		whence "$word"
13714*7c356e86SAndroid Build Coastguard Worker		whence -p "$word"
13715*7c356e86SAndroid Build Coastguard Worker		whence -v "$word"
13716*7c356e86SAndroid Build Coastguard Worker		whence -pv "$word"
13717*7c356e86SAndroid Build Coastguard Worker	done
13718*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13719*7c356e86SAndroid Build Coastguard Worker	if
13720*7c356e86SAndroid Build Coastguard Worker	if is a reserved word
13721*7c356e86SAndroid Build Coastguard Worker	if not found
13722*7c356e86SAndroid Build Coastguard Worker	'bar baz'
13723*7c356e86SAndroid Build Coastguard Worker	foo is an alias for 'bar baz'
13724*7c356e86SAndroid Build Coastguard Worker	foo not found
13725*7c356e86SAndroid Build Coastguard Worker	bar
13726*7c356e86SAndroid Build Coastguard Worker	bar is a function
13727*7c356e86SAndroid Build Coastguard Worker	bar not found
13728*7c356e86SAndroid Build Coastguard Worker	set
13729*7c356e86SAndroid Build Coastguard Worker	set is a special shell builtin
13730*7c356e86SAndroid Build Coastguard Worker	set not found
13731*7c356e86SAndroid Build Coastguard Worker	true
13732*7c356e86SAndroid Build Coastguard Worker	/bin/true
13733*7c356e86SAndroid Build Coastguard Worker	true is a shell builtin
13734*7c356e86SAndroid Build Coastguard Worker	true is a tracked alias for /bin/true
13735*7c356e86SAndroid Build Coastguard Worker---
13736*7c356e86SAndroid Build Coastguard Workername: duffs-device
13737*7c356e86SAndroid Build Coastguard Workerdescription:
13738*7c356e86SAndroid Build Coastguard Worker	Check that the compiler did not optimise-break them
13739*7c356e86SAndroid Build Coastguard Worker	(lex.c has got a similar one in SHEREDELIM)
13740*7c356e86SAndroid Build Coastguard Workercategory: !shell:faux-ebcdic,!shell:ebcdic-yes
13741*7c356e86SAndroid Build Coastguard Workerstdin:
13742*7c356e86SAndroid Build Coastguard Worker	set +U
13743*7c356e86SAndroid Build Coastguard Worker	s=
13744*7c356e86SAndroid Build Coastguard Worker	typeset -i1 i=0
13745*7c356e86SAndroid Build Coastguard Worker	while (( ++i < 256 )); do
13746*7c356e86SAndroid Build Coastguard Worker		s+=${i#1#}
13747*7c356e86SAndroid Build Coastguard Worker	done
13748*7c356e86SAndroid Build Coastguard Worker	s+=$'\xC2\xA0\xE2\x82\xAC\xEF\xBF\xBD\xEF\xBF\xBE\xEF\xBF\xBF\xF0\x90\x80\x80.'
13749*7c356e86SAndroid Build Coastguard Worker	typeset -p s
13750*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13751*7c356e86SAndroid Build Coastguard Worker	typeset s=$'\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\E\034\035\036\037 !"#$%&\047()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\u00A0\u20AC\uFFFD\357\277\276\357\277\277\360\220\200\200.'
13752*7c356e86SAndroid Build Coastguard Worker---
13753*7c356e86SAndroid Build Coastguard Workername: duffs-device-ebcdic
13754*7c356e86SAndroid Build Coastguard Workerdescription:
13755*7c356e86SAndroid Build Coastguard Worker	Check that the compiler did not optimise-break them
13756*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no
13757*7c356e86SAndroid Build Coastguard Workerstdin:
13758*7c356e86SAndroid Build Coastguard Worker	set +U
13759*7c356e86SAndroid Build Coastguard Worker	s=
13760*7c356e86SAndroid Build Coastguard Worker	typeset -i1 i=0
13761*7c356e86SAndroid Build Coastguard Worker	while (( ++i < 256 )); do
13762*7c356e86SAndroid Build Coastguard Worker		s+=${i#1#}
13763*7c356e86SAndroid Build Coastguard Worker	done
13764*7c356e86SAndroid Build Coastguard Worker	#s+=$'\xC2\xA0\xE2\x82\xAC\xEF\xBF\xBD\xEF\xBF\xBE\xEF\xBF\xBF\xF0\x90\x80\x80.' #XXX
13765*7c356e86SAndroid Build Coastguard Worker	typeset -p s
13766*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13767*7c356e86SAndroid Build Coastguard Worker	typeset s=$'\001\002\003\004\t\006\007\010\011\012\v\f\r\016\017\020\021\022\023\024\n\b\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\E\050\051\052\053\054\055\056\a\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077 ���������.<(+|&���������!$*);^-/�������Ѧ,%_>?���������`:#@\175="�abcdefghi�������jklmnopqr���Ƥ�~stuvwxyz���[ޮ����������ݨ�]��{ABCDEFGHI������}JKLMNOPQR������\\�STUVWXYZ������0123456789�����\377'
13768*7c356e86SAndroid Build Coastguard Worker---
13769*7c356e86SAndroid Build Coastguard Workername: duffs-device-faux-EBCDIC
13770*7c356e86SAndroid Build Coastguard Workerdescription:
13771*7c356e86SAndroid Build Coastguard Worker	Check that the compiler did not optimise-break them
13772*7c356e86SAndroid Build Coastguard Workercategory: shell:faux-ebcdic
13773*7c356e86SAndroid Build Coastguard Workerstdin:
13774*7c356e86SAndroid Build Coastguard Worker	set +U
13775*7c356e86SAndroid Build Coastguard Worker	s=
13776*7c356e86SAndroid Build Coastguard Worker	typeset -i1 i=0
13777*7c356e86SAndroid Build Coastguard Worker	while (( ++i < 256 )); do
13778*7c356e86SAndroid Build Coastguard Worker		s+=${i#1#}
13779*7c356e86SAndroid Build Coastguard Worker	done
13780*7c356e86SAndroid Build Coastguard Worker	s+=$'\xC2\xA0\xE2\x82\xAC\xEF\xBF\xBD\xEF\xBF\xBE\xEF\xBF\xBF\xF0\x90\x80\x80.'
13781*7c356e86SAndroid Build Coastguard Worker	typeset -p s
13782*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13783*7c356e86SAndroid Build Coastguard Worker	typeset s=$'\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\E\034\035\036\037 !"#$%&\047()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237������������������������������������������������������������������������������������������������\u00A0\u20AC\uFFFD￾￿�\220\200\200.'
13784*7c356e86SAndroid Build Coastguard Worker---
13785*7c356e86SAndroid Build Coastguard Workername: stateptr-underflow
13786*7c356e86SAndroid Build Coastguard Workerdescription:
13787*7c356e86SAndroid Build Coastguard Worker	This check overflows an Xrestpos stored in a short in R40
13788*7c356e86SAndroid Build Coastguard Workercategory: fastbox
13789*7c356e86SAndroid Build Coastguard Workerstdin:
13790*7c356e86SAndroid Build Coastguard Worker	function Lb64decode {
13791*7c356e86SAndroid Build Coastguard Worker		[[ -o utf8-mode ]]; local u=$?
13792*7c356e86SAndroid Build Coastguard Worker		set +U
13793*7c356e86SAndroid Build Coastguard Worker		local c s="$*" t=
13794*7c356e86SAndroid Build Coastguard Worker		[[ -n $s ]] || { s=$(cat;print x); s=${s%x}; }
13795*7c356e86SAndroid Build Coastguard Worker		local -i i=0 n=${#s} p=0 v x
13796*7c356e86SAndroid Build Coastguard Worker		local -i16 o
13797*7c356e86SAndroid Build Coastguard Worker
13798*7c356e86SAndroid Build Coastguard Worker		while (( i < n )); do
13799*7c356e86SAndroid Build Coastguard Worker			c=${s:(i++):1}
13800*7c356e86SAndroid Build Coastguard Worker			case $c {
13801*7c356e86SAndroid Build Coastguard Worker			(=)	break ;;
13802*7c356e86SAndroid Build Coastguard Worker			([A-Z])	(( v = 1#$c - 65 )) ;;
13803*7c356e86SAndroid Build Coastguard Worker			([a-z])	(( v = 1#$c - 71 )) ;;
13804*7c356e86SAndroid Build Coastguard Worker			([0-9])	(( v = 1#$c + 4 )) ;;
13805*7c356e86SAndroid Build Coastguard Worker			(+)	v=62 ;;
13806*7c356e86SAndroid Build Coastguard Worker			(/)	v=63 ;;
13807*7c356e86SAndroid Build Coastguard Worker			(*)	continue ;;
13808*7c356e86SAndroid Build Coastguard Worker			}
13809*7c356e86SAndroid Build Coastguard Worker			(( x = (x << 6) | v ))
13810*7c356e86SAndroid Build Coastguard Worker			case $((p++)) {
13811*7c356e86SAndroid Build Coastguard Worker			(0)	continue ;;
13812*7c356e86SAndroid Build Coastguard Worker			(1)	(( o = (x >> 4) & 255 )) ;;
13813*7c356e86SAndroid Build Coastguard Worker			(2)	(( o = (x >> 2) & 255 )) ;;
13814*7c356e86SAndroid Build Coastguard Worker			(3)	(( o = x & 255 ))
13815*7c356e86SAndroid Build Coastguard Worker				p=0
13816*7c356e86SAndroid Build Coastguard Worker				;;
13817*7c356e86SAndroid Build Coastguard Worker			}
13818*7c356e86SAndroid Build Coastguard Worker			t=$t\\x${o#16#}
13819*7c356e86SAndroid Build Coastguard Worker		done
13820*7c356e86SAndroid Build Coastguard Worker		print -n $t
13821*7c356e86SAndroid Build Coastguard Worker		(( u )) || set -U
13822*7c356e86SAndroid Build Coastguard Worker	}
13823*7c356e86SAndroid Build Coastguard Worker
13824*7c356e86SAndroid Build Coastguard Worker	i=-1
13825*7c356e86SAndroid Build Coastguard Worker	s=
13826*7c356e86SAndroid Build Coastguard Worker	while (( ++i < 12120 )); do
13827*7c356e86SAndroid Build Coastguard Worker		s+=a
13828*7c356e86SAndroid Build Coastguard Worker	done
13829*7c356e86SAndroid Build Coastguard Worker	Lb64decode $s >/dev/null
13830*7c356e86SAndroid Build Coastguard Worker---
13831*7c356e86SAndroid Build Coastguard Workername: xtrace-1
13832*7c356e86SAndroid Build Coastguard Workerdescription:
13833*7c356e86SAndroid Build Coastguard Worker	Check that "set -x" doesn't redirect too quickly
13834*7c356e86SAndroid Build Coastguard Workerstdin:
13835*7c356e86SAndroid Build Coastguard Worker	print '#!'"$__progname" >bash
13836*7c356e86SAndroid Build Coastguard Worker	cat >>bash <<'EOF'
13837*7c356e86SAndroid Build Coastguard Worker	echo 'GNU bash, version 2.05b.0(1)-release (i386-ecce-mirbsd10)
13838*7c356e86SAndroid Build Coastguard Worker	Copyright (C) 2002 Free Software Foundation, Inc.'
13839*7c356e86SAndroid Build Coastguard Worker	EOF
13840*7c356e86SAndroid Build Coastguard Worker	chmod +x bash
13841*7c356e86SAndroid Build Coastguard Worker	"$__progname" -xc 'foo=$(./bash --version 2>&1 | sed q); echo "=$foo="'
13842*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13843*7c356e86SAndroid Build Coastguard Worker	=GNU bash, version 2.05b.0(1)-release (i386-ecce-mirbsd10)=
13844*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern:
13845*7c356e86SAndroid Build Coastguard Worker	/.*/
13846*7c356e86SAndroid Build Coastguard Worker---
13847*7c356e86SAndroid Build Coastguard Workername: xtrace-2
13848*7c356e86SAndroid Build Coastguard Workerdescription:
13849*7c356e86SAndroid Build Coastguard Worker	Check that "set -x" is off during PS4 expansion
13850*7c356e86SAndroid Build Coastguard Workerstdin:
13851*7c356e86SAndroid Build Coastguard Worker	f() {
13852*7c356e86SAndroid Build Coastguard Worker		print -n "(f1:$-)"
13853*7c356e86SAndroid Build Coastguard Worker		set -x
13854*7c356e86SAndroid Build Coastguard Worker		print -n "(f2:$-)"
13855*7c356e86SAndroid Build Coastguard Worker	}
13856*7c356e86SAndroid Build Coastguard Worker	PS4='[(p:$-)$(f)] '
13857*7c356e86SAndroid Build Coastguard Worker	print "(o0:$-)"
13858*7c356e86SAndroid Build Coastguard Worker	set -x -o inherit-xtrace
13859*7c356e86SAndroid Build Coastguard Worker	print "(o1:$-)"
13860*7c356e86SAndroid Build Coastguard Worker	set +x
13861*7c356e86SAndroid Build Coastguard Worker	print "(o2:$-)"
13862*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13863*7c356e86SAndroid Build Coastguard Worker	(o0:sh)
13864*7c356e86SAndroid Build Coastguard Worker	(o1:shx)
13865*7c356e86SAndroid Build Coastguard Worker	(o2:sh)
13866*7c356e86SAndroid Build Coastguard Workerexpected-stderr:
13867*7c356e86SAndroid Build Coastguard Worker	[(p:sh)(f1:sh)(f2:sh)] print '(o1:shx)'
13868*7c356e86SAndroid Build Coastguard Worker	[(p:sh)(f1:sh)(f2:sh)] set +x
13869*7c356e86SAndroid Build Coastguard Worker---
13870*7c356e86SAndroid Build Coastguard Workername: fksh-flags
13871*7c356e86SAndroid Build Coastguard Workerdescription:
13872*7c356e86SAndroid Build Coastguard Worker	Check that FKSH functions have their own shell flags
13873*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no
13874*7c356e86SAndroid Build Coastguard Workerstdin:
13875*7c356e86SAndroid Build Coastguard Worker	[[ $KSH_VERSION = Version* ]] && set +B
13876*7c356e86SAndroid Build Coastguard Worker	function foo {
13877*7c356e86SAndroid Build Coastguard Worker		set +f
13878*7c356e86SAndroid Build Coastguard Worker		set -e
13879*7c356e86SAndroid Build Coastguard Worker		echo 2 "${-/s}" .
13880*7c356e86SAndroid Build Coastguard Worker	}
13881*7c356e86SAndroid Build Coastguard Worker	set -fh
13882*7c356e86SAndroid Build Coastguard Worker	echo 1 "${-/s}" .
13883*7c356e86SAndroid Build Coastguard Worker	foo
13884*7c356e86SAndroid Build Coastguard Worker	echo 3 "${-/s}" .
13885*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13886*7c356e86SAndroid Build Coastguard Worker	1 fh .
13887*7c356e86SAndroid Build Coastguard Worker	2 eh .
13888*7c356e86SAndroid Build Coastguard Worker	3 fh .
13889*7c356e86SAndroid Build Coastguard Worker---
13890*7c356e86SAndroid Build Coastguard Workername: fksh-flags-legacy
13891*7c356e86SAndroid Build Coastguard Workerdescription:
13892*7c356e86SAndroid Build Coastguard Worker	Check that even FKSH functions share the shell flags
13893*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-yes
13894*7c356e86SAndroid Build Coastguard Workerstdin:
13895*7c356e86SAndroid Build Coastguard Worker	[[ $KSH_VERSION = Version* ]] && set +B
13896*7c356e86SAndroid Build Coastguard Worker	foo() {
13897*7c356e86SAndroid Build Coastguard Worker		set +f
13898*7c356e86SAndroid Build Coastguard Worker		set -e
13899*7c356e86SAndroid Build Coastguard Worker		echo 2 "${-/s}" .
13900*7c356e86SAndroid Build Coastguard Worker	}
13901*7c356e86SAndroid Build Coastguard Worker	set -fh
13902*7c356e86SAndroid Build Coastguard Worker	echo 1 "${-/s}" .
13903*7c356e86SAndroid Build Coastguard Worker	foo
13904*7c356e86SAndroid Build Coastguard Worker	echo 3 "${-/s}" .
13905*7c356e86SAndroid Build Coastguard Workerexpected-stdout:
13906*7c356e86SAndroid Build Coastguard Worker	1 fh .
13907*7c356e86SAndroid Build Coastguard Worker	2 eh .
13908*7c356e86SAndroid Build Coastguard Worker	3 eh .
13909*7c356e86SAndroid Build Coastguard Worker---
13910*7c356e86SAndroid Build Coastguard Workername: fsh-flags
13911*7c356e86SAndroid Build Coastguard Workerdescription:
13912*7c356e86SAndroid Build Coastguard Worker	Check that !FKSH functions share the shell flags
13913*7c356e86SAndroid Build Coastguard Workerstdin:
13914*7c356e86SAndroid Build Coastguard Worker	[[ $KSH_VERSION = Version* ]] && set +B
13915*7c356e86SAndroid Build Coastguard Worker	foo() {
13916*7c356e86SAndroid Build Coastguard Worker		set +f
13917*7c356e86SAndroid Build Coastguard Worker		set -e
13918*7c356e86SAndroid Build Coastguard Worker		echo 2 "${-/s}" .
13919*7c356e86SAndroid Build Coastguard Worker	}
13920*7c356e86SAndroid Build Coastguard Worker	set -fh
13921*7c356e86SAndroid Build Coastguard Worker	echo 1 "${-/s}" .
13922	foo
13923	echo 3 "${-/s}" .
13924expected-stdout:
13925	1 fh .
13926	2 eh .
13927	3 eh .
13928---
13929