1da2e3ebdSchin########################################################################
2da2e3ebdSchin#                                                                      #
3da2e3ebdSchin#               This software is part of the ast package               #
4*b30d1939SAndy Fiddaman#          Copyright (c) 1982-2011 AT&T Intellectual Property          #
5da2e3ebdSchin#                      and is licensed under the                       #
6*b30d1939SAndy Fiddaman#                 Eclipse Public License, Version 1.0                  #
77c2fbfb3SApril Chin#                    by AT&T Intellectual Property                     #
8da2e3ebdSchin#                                                                      #
9da2e3ebdSchin#                A copy of the License is available at                 #
10*b30d1939SAndy Fiddaman#          http://www.eclipse.org/org/documents/epl-v10.html           #
11*b30d1939SAndy Fiddaman#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
12da2e3ebdSchin#                                                                      #
13da2e3ebdSchin#              Information and Software Systems Research               #
14da2e3ebdSchin#                            AT&T Research                             #
15da2e3ebdSchin#                           Florham Park NJ                            #
16da2e3ebdSchin#                                                                      #
17da2e3ebdSchin#                  David Korn <dgk@research.att.com>                   #
18da2e3ebdSchin#                                                                      #
19da2e3ebdSchin########################################################################
20da2e3ebdSchinfunction err_exit
21da2e3ebdSchin{
22da2e3ebdSchin	print -u2 -n "\t"
23da2e3ebdSchin	print -u2 -r ${Command}[$1]: "${@:2}"
24*b30d1939SAndy Fiddaman	(( Errors++ ))
25da2e3ebdSchin}
26da2e3ebdSchinalias err_exit='err_exit $LINENO'
27da2e3ebdSchin
28da2e3ebdSchinCommand=${0##*/}
29da2e3ebdSchininteger Errors=0
30da2e3ebdSchinif	[[ 'hi there' != "hi there" ]]
31da2e3ebdSchinthen	err_exit "single quotes not the same as double quotes"
32da2e3ebdSchinfi
33da2e3ebdSchinx='hi there'
34da2e3ebdSchinif	[[ $x != 'hi there' ]]
35da2e3ebdSchinthen	err_exit "$x not the same as 'hi there'"
36da2e3ebdSchinfi
37da2e3ebdSchinif	[[ $x != "hi there" ]]
38da2e3ebdSchinthen	err_exit "$x not the same as \"hi there \""
39da2e3ebdSchinfi
40da2e3ebdSchinif	[[ \a\b\c\*\|\"\ \\ != 'abc*|" \' ]]
41da2e3ebdSchinthen	err_exit " \\ differs from '' "
42da2e3ebdSchinfi
43da2e3ebdSchinif	[[ "ab\'\"\$(" != 'ab\'\''"$(' ]]
44da2e3ebdSchinthen	err_exit " \"\" differs from '' "
45da2e3ebdSchinfi
46da2e3ebdSchinif	[[ $(print -r - 'abc*|" \') !=  'abc*|" \' ]]
47da2e3ebdSchinthen	err_exit "\$(print -r - '') differs from ''"
48da2e3ebdSchinfi
49da2e3ebdSchinif	[[ $(print -r - "abc*|\" \\") !=  'abc*|" \' ]]
50da2e3ebdSchinthen	err_exit "\$(print -r - '') differs from ''"
51da2e3ebdSchinfi
52da2e3ebdSchinif	[[ "$(print -r - 'abc*|" \')" !=  'abc*|" \' ]]
53da2e3ebdSchinthen	err_exit "\"\$(print -r - '')\" differs from ''"
54da2e3ebdSchinfi
55da2e3ebdSchinif	[[ "$(print -r - "abc*|\" \\")" !=  'abc*|" \' ]]
56da2e3ebdSchinthen	err_exit "\"\$(print -r - "")\" differs from ''"
57da2e3ebdSchinfi
58da2e3ebdSchinif	[[ $(print -r - $(print -r - 'abc*|" \')) !=  'abc*|" \' ]]
59da2e3ebdSchinthen	err_exit "nested \$(print -r - '') differs from ''"
60da2e3ebdSchinfi
61da2e3ebdSchinif	[[ "$(print -r - $(print -r - 'abc*|" \'))" !=  'abc*|" \' ]]
62da2e3ebdSchinthen	err_exit "\"nested \$(print -r - '')\" differs from ''"
63da2e3ebdSchinfi
64da2e3ebdSchinif	[[ $(print -r - "$(print -r - 'abc*|" \')") !=  'abc*|" \' ]]
65da2e3ebdSchinthen	err_exit "nested \"\$(print -r - '')\" differs from ''"
66da2e3ebdSchinfi
67da2e3ebdSchinunset x
68da2e3ebdSchinif	[[ ${x-$(print -r - "abc*|\" \\")} !=  'abc*|" \' ]]
69da2e3ebdSchinthen	err_exit "\${x-\$(print -r - '')} differs from ''"
70da2e3ebdSchinfi
71da2e3ebdSchinif	[[ ${x-$(print -r - "a}c*|\" \\")} !=  'a}c*|" \' ]]
72da2e3ebdSchinthen	err_exit "\${x-\$(print -r - '}')} differs from ''"
73da2e3ebdSchinfi
74da2e3ebdSchinx=$((echo foo)|(cat))
75da2e3ebdSchinif	[[ $x != foo  ]]
76da2e3ebdSchinthen	err_exit "((cmd)|(cmd)) failed"
77da2e3ebdSchinfi
78da2e3ebdSchinx=$(print -r -- "\"$HOME\"")
79da2e3ebdSchinif	[[ $x != '"'$HOME'"' ]]
80da2e3ebdSchinthen	err_exit "nested double quotes failed"
81da2e3ebdSchinfi
82*b30d1939SAndy Fiddamanunset z
83da2e3ebdSchin: ${z="a{b}c"}
84da2e3ebdSchinif	[[ $z != 'a{b}c' ]]
85da2e3ebdSchinthen	err_exit '${z="a{b}c"} not correct'
86da2e3ebdSchinfi
87da2e3ebdSchinunset z
88da2e3ebdSchin: "${z="a{b}c"}"
89da2e3ebdSchinif	[[ $z != 'a{b}c' ]]
90da2e3ebdSchinthen	err_exit '"${z="a{b}c"}" not correct'
91da2e3ebdSchinfi
92da2e3ebdSchinif	[[ $(print -r -- "a\*b") !=  'a\*b' ]]
93da2e3ebdSchinthen	err_exit '$(print -r -- "a\*b") differs from  a\*b'
94da2e3ebdSchinfi
95da2e3ebdSchinunset x
96da2e3ebdSchinif	[[ $(print -r -- "a\*b$x") !=  'a\*b' ]]
97da2e3ebdSchinthen	err_exit '$(print -r -- "a\*b$x") differs from  a\*b'
98da2e3ebdSchinfi
99da2e3ebdSchinx=hello
100da2e3ebdSchinset -- ${x+foo bar bam}
101da2e3ebdSchinif	(( $# !=3 ))
102da2e3ebdSchinthen	err_exit '${x+foo bar bam} does not yield three arguments'
103da2e3ebdSchinfi
104da2e3ebdSchinset -- ${x+foo "bar bam"}
105da2e3ebdSchinif	(( $# !=2 ))
106da2e3ebdSchinthen	err_exit '${x+foo "bar bam"} does not yield two arguments'
107da2e3ebdSchinfi
108da2e3ebdSchinset -- ${x+foo 'bar bam'}
109da2e3ebdSchinif	(( $# !=2 ))
110da2e3ebdSchinthen	err_exit '${x+foo '\''bar bam'\''} does not yield two arguments'
111da2e3ebdSchinfi
112da2e3ebdSchinset -- ${x+foo $x bam}
113da2e3ebdSchinif	(( $# !=3 ))
114da2e3ebdSchinthen	err_exit '${x+foo $x bam} does not yield three arguments'
115da2e3ebdSchinfi
116da2e3ebdSchinset -- ${x+foo "$x" bam}
117da2e3ebdSchinif	(( $# !=3 ))
118da2e3ebdSchinthen	err_exit '${x+foo "$x" bam} does not yield three arguments'
119da2e3ebdSchinfi
120da2e3ebdSchinset -- ${x+"foo $x bam"}
121da2e3ebdSchinif	(( $# !=1 ))
122da2e3ebdSchinthen	err_exit '${x+"foo $x bam"} does not yield one argument'
123da2e3ebdSchinfi
124da2e3ebdSchinset -- "${x+foo $x bam}"
125da2e3ebdSchinif	(( $# !=1 ))
126da2e3ebdSchinthen	err_exit '"${x+foo $x bam}" does not yield one argument'
127da2e3ebdSchinfi
128da2e3ebdSchinset -- ${x+foo "$x "bam}
129da2e3ebdSchinif	(( $# !=2 ))
130da2e3ebdSchinthen	err_exit '${x+foo "$x "bam} does not yield two arguments'
131da2e3ebdSchinfi
132da2e3ebdSchinx="ab$'cd"
133da2e3ebdSchinif	[[ $x != 'ab$'"'cd" ]]
134da2e3ebdSchinthen	err_exit '$'"' inside double quotes not working"
135da2e3ebdSchinfi
136da2e3ebdSchinx=`print 'ab$'`
137da2e3ebdSchinif	[[ $x != 'ab$' ]]
138da2e3ebdSchinthen	err_exit '$'"' inside `` quotes not working"
139da2e3ebdSchinfi
140da2e3ebdSchinunset a
141da2e3ebdSchinx=$(print -r -- "'\
142da2e3ebdSchin\
143da2e3ebdSchin")
144da2e3ebdSchinif	[[ $x != "'" ]]
145da2e3ebdSchinthen	err_exit 'line continuation in double strings not working'
146da2e3ebdSchinfi
147da2e3ebdSchinx=$(print -r -- "'\
148da2e3ebdSchin$a\
149da2e3ebdSchin")
150da2e3ebdSchinif	[[ $x != "'" ]]
151da2e3ebdSchinthen	err_exit 'line continuation in expanded double strings not working'
152da2e3ebdSchinfi
153da2e3ebdSchinx='\*'
154da2e3ebdSchinif	[[ $(print -r -- $x) != '\*' ]]
155da2e3ebdSchinthen	err_exit 'x="\\*";$x != \*'
156da2e3ebdSchinfi
157da2e3ebdSchinx='   hello    world    '
158da2e3ebdSchinset -- $x
159da2e3ebdSchinif	(( $# != 2 ))
160da2e3ebdSchinthen	err_exit 'field splitting error'
161da2e3ebdSchinfi
162da2e3ebdSchinx=$(print -r -- '1234567890123456789012345678901234567890123456789012345678901234567890 \
163da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
164da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
165da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
166da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
167da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
168da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
169da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
170da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
171da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
172da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
173da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
174da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
175da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890 \
176da2e3ebdSchin1234567890123456789012345678901234567890123456789012345678901234567890')
177da2e3ebdSchinif	(( ${#x} != (15*73-3) ))
178da2e3ebdSchinthen	err_exit "length of x, ${#x}, is incorrect should be $((15*73-3))"
179da2e3ebdSchinfi
180da2e3ebdSchinx='$hi'
181da2e3ebdSchinif	[[ $x\$ != '$hi$' ]]
182da2e3ebdSchinthen	err_exit ' $x\$, with x=$hi, does not expand to $hi$'
183da2e3ebdSchinfi
184da2e3ebdSchinif	[[ $x$ != '$hi$' ]]
185da2e3ebdSchinthen	err_exit ' $x$, with x=$hi, does not expand to $hi$'
186da2e3ebdSchinfi
187da2e3ebdSchinset -- $(/bin/echo foo;sleep 1;/bin/echo bar)
188da2e3ebdSchinif	[[ $# != 2 ]]
189da2e3ebdSchinthen	err_exit 'word splitting after command substitution not working'
190da2e3ebdSchinfi
191da2e3ebdSchinunset q
192da2e3ebdSchinif	[[ "${q:+'}q${q:+'}" != q ]]
193da2e3ebdSchinthen	err_exit 'expansion of "{q:+'\''}" not correct when q unset'
194da2e3ebdSchinfi
195da2e3ebdSchinq=1
196da2e3ebdSchinif	[[ "${q:+'}q${q:+'}" != "'q'" ]]
197da2e3ebdSchinthen	err_exit 'expansion of "{q:+'\''}" not correct when q set'
198da2e3ebdSchinfi
199da2e3ebdSchinx=$'x\' #y'
200da2e3ebdSchinif	[[ $x != "x' #y" ]]
201da2e3ebdSchinthen	err_exit "$'x\' #y'" not working
202da2e3ebdSchinfi
203da2e3ebdSchinx=$q$'x\' #y'
204da2e3ebdSchinif	[[ $x != "1x' #y" ]]
205da2e3ebdSchinthen	err_exit "$q$'x\' #y'" not working
206da2e3ebdSchinfi
207da2e3ebdSchinIFS=,
208da2e3ebdSchinx='a,b\,c,d'
209da2e3ebdSchinset -- $x
210da2e3ebdSchinif	[[ $2 != 'b\' ]]
211da2e3ebdSchinthen	err_exit "field splitting of $x with IFS=$IFS not working"
212da2e3ebdSchinfi
213da2e3ebdSchinfoo=bar
214da2e3ebdSchinbar=$(print -r -- ${foo+\\n\ })
215da2e3ebdSchinif	[[ $bar != '\n ' ]]
21634f9b3eeSRoland Mainzthen	err_exit '${foo+\\n\ } expansion error'
217da2e3ebdSchinfi
218da2e3ebdSchinunset bar
219da2e3ebdSchinbar=$(print -r -- ${foo+\\n\ $bar})
220da2e3ebdSchinif	[[ $bar != '\n ' ]]
22134f9b3eeSRoland Mainzthen	err_exit '${foo+\\n\ $bar} expansion error with bar unset'
222da2e3ebdSchinfi
223da2e3ebdSchinx='\\(..\\)|&\|\|\\&\\|'
224da2e3ebdSchinif	[[ $(print -r -- $x) != "$x" ]]
225da2e3ebdSchinthen	err_exit '$x, where x=\\(..\\)|&\|\|\\&\\| not working'
226da2e3ebdSchinfi
227da2e3ebdSchinx='\\('
228da2e3ebdSchinif	[[ $(print -r -- a${x}b) != a"${x}"b ]]
229da2e3ebdSchinthen	err_exit 'a${x}b, where x=\\( not working'
230da2e3ebdSchinfi
231da2e3ebdSchinx=
232da2e3ebdSchinif	[[ $(print -r -- $x'\\1') != '\\1' ]]
233da2e3ebdSchinthen	err_exit 'backreference inside single quotes broken'
234da2e3ebdSchinfi
235da2e3ebdSchinset -- ''
236da2e3ebdSchinset -- "$@"
237da2e3ebdSchinif	(( $# != 1 ))
238da2e3ebdSchinthen	err_exit '"$@" not preserving nulls'
239da2e3ebdSchinfi
240da2e3ebdSchinx=
241da2e3ebdSchinif	[[ $(print -r s"!\2${x}\1\a!") != 's!\2\1\a!' ]]
242da2e3ebdSchinthen	err_exit  'print -r s"!\2${x}\1\a!" not equal s!\2\1\a!'
243da2e3ebdSchinfi
244da2e3ebdSchinif	[[ $(print -r $'foo\n\n\n') != foo ]]
245da2e3ebdSchinthen	err_exit 'trailing newlines on comsubstitution not removed'
246da2e3ebdSchinfi
247da2e3ebdSchinunset x
248da2e3ebdSchinif	[[ ${x:='//'} != '//' ]]
249da2e3ebdSchinthen	err_exit '${x:='//'} != "//"'
250da2e3ebdSchinfi
251da2e3ebdSchinif	[[ $(print -r "\"hi$\"")	!= '"hi$"' ]]
252da2e3ebdSchinthen	err_exit '$\ not correct inside ""'
253da2e3ebdSchinfi
254da2e3ebdSchinunset x
255da2e3ebdSchinif	[[ "${x-a\}b}" != 'a}b' ]]
256da2e3ebdSchinthen	err_exit '"${x-a\}b}" !=  "a}b"'
257da2e3ebdSchinfi
258da2e3ebdSchinif	[[ "\}\]$x\*\{\[\\" != '\}\]\*\{\[\' ]]
259da2e3ebdSchinthen	err_exit '"\}\]$x\*\{\[\\" !=  "\}\]\*\{\[\"'
260da2e3ebdSchinfi
261da2e3ebdSchinfoo=yes
262da2e3ebdSchinif	[[ $(print -r -- {\$foo}) != '{$foo}' ]]
263da2e3ebdSchinthen	err_exit '{\$foo}' not expanded correctly
264da2e3ebdSchinfi
265da2e3ebdSchin[[ foo == $(
266da2e3ebdSchin###########################################################
267da2e3ebdSchin###########################################################
268da2e3ebdSchin###########################################################
269da2e3ebdSchin###########################################################
270da2e3ebdSchin###########################################################
271da2e3ebdSchin###########################################################
272da2e3ebdSchin###########################################################
273da2e3ebdSchin###########################################################
274da2e3ebdSchin###########################################################
275da2e3ebdSchin###########################################################
276da2e3ebdSchin###########################################################
277da2e3ebdSchin###########################################################
278da2e3ebdSchin###########################################################
279da2e3ebdSchin###########################################################
280da2e3ebdSchin###########################################################
281da2e3ebdSchin###########################################################
282da2e3ebdSchin###########################################################
283da2e3ebdSchin###########################################################
284da2e3ebdSchin###########################################################
285da2e3ebdSchin###########################################################
286da2e3ebdSchin###########################################################
287da2e3ebdSchin###########################################################
288da2e3ebdSchin###########################################################
289da2e3ebdSchin###########################################################
290da2e3ebdSchin###########################################################
291da2e3ebdSchin###########################################################
292da2e3ebdSchin###########################################################
293da2e3ebdSchin###########################################################
294da2e3ebdSchin###########################################################
295da2e3ebdSchin###########################################################
296da2e3ebdSchin###########################################################
297da2e3ebdSchin###########################################################
298da2e3ebdSchin###########################################################
299da2e3ebdSchin###########################################################
300da2e3ebdSchin###########################################################
301da2e3ebdSchin###########################################################
302da2e3ebdSchin###########################################################
303da2e3ebdSchin###########################################################
304da2e3ebdSchinprint foo) ]] || err_exit "command subsitution with long comments broken"
305da2e3ebdSchinsubject='some/other/words'
306*b30d1939SAndy Fiddamanre='@(?*)/@(?*)/@(?*)'
307da2e3ebdSchin[[ ${subject/${re}/\3} != words ]] && err_exit 'string replacement with \3 not working'
308da2e3ebdSchin[[ ${subject/${re}/'\3'} != '\3' ]] && err_exit 'string replacement with '"'\3'"' not working'
309da2e3ebdSchin[[ ${subject/${re}/"\\3"} != '\3' ]] && err_exit 'string replacement with "\\3" not working'
310da2e3ebdSchin[[ ${subject/${re}/"\3"} != '\3' ]] && err_exit 'string replacement with "\3" not working'
311da2e3ebdSchinstring='\3'
312da2e3ebdSchin[[ ${subject/${re}/${string}} != words ]] && err_exit 'string replacement with $string not working with string=\3'
313da2e3ebdSchin[[ $(print -r "${subject/${re}/${string}}") != words ]] && err_exit 'string replacement with $string not working with string=\3 using print'
314da2e3ebdSchin[[ ${subject/${re}/"${string}"} != '\3' ]] && err_exit 'string replacement with "$string" not working with  string=\3'
315da2e3ebdSchin[[ $(print -r "${subject/${re}/"${string}"}") != '\3' ]] && err_exit 'string replacement with "$string" not working with  string=\3 using print'
316da2e3ebdSchinstring='\\3'
317da2e3ebdSchin[[ ${subject/${re}/${string}} != '\3' ]] && err_exit 'string replacement with $string not working with string=\\3'
318da2e3ebdSchin[[ ${subject/${re}/"${string}"} != '\\3' ]] && err_exit 'string replacement with "$string" not working with  string=\\3'
319da2e3ebdSchin[[ ${subject/${re}/\4} != '\4' ]] && err_exit 'string replacement with \4 not working'
320da2e3ebdSchin[[ ${subject/${re}/'\4'} != '\4' ]] && err_exit 'string replacement with '\4' not working'
321da2e3ebdSchinstring='\4'
322da2e3ebdSchin[[ ${subject/${re}/${string}} != '\4' ]] && err_exit 'string replacement with $string not working with string=\4'
323da2e3ebdSchin[[ ${subject/${re}/"${string}"} != '\4' ]] && err_exit 'string replacement with "$string" not working with  string=\4'
324da2e3ebdSchinstring='&foo'
325da2e3ebdSchin[[ ${subject/${re}/${string}} != '&foo' ]] && err_exit 'string replacement with $string not working with string=&foo'
326da2e3ebdSchin[[ ${subject/${re}/"${string}"} != '&foo' ]] && err_exit 'string replacement with "$string" not working with  string=&foo'
327da2e3ebdSchin{
328da2e3ebdSchinx=x
329da2e3ebdSchinx=${x:-`id | sed 's/^[^(]*(\([^)]*\)).*/\1/'`}
33034f9b3eeSRoland Mainz} 2> /dev/null || err_exit 'skipping over `` failed'
331da2e3ebdSchin[[ $x == x ]] || err_exit 'assignment ${x:=`...`} failed'
3327c2fbfb3SApril Chin[[ $($SHELL -c 'print a[') == 'a[' ]] || err_exit "unbalanced '[' in command arg fails"
3337c2fbfb3SApril Chin$SHELL -c $'false && (( `wc -l /dev/null | nawk \'{print $1}\'` > 2 )) && true;:' 2> /dev/null ||  err_exit 'syntax error with ` in arithmetic expression'
3347c2fbfb3SApril Chin{ $SHELL  -c '((  1`: "{ }"` ))' ;} 2> /dev/null || err_exit 'problem with ` inside (())'
3357c2fbfb3SApril Chinvarname=foobarx
3367c2fbfb3SApril Chinx=`print '"\$'${varname}'"'`
3377c2fbfb3SApril Chin[[ $x == '"$foobarx"' ]] ||  err_exit $'\\$\' not handled correctly inside ``'
33834f9b3eeSRoland Mainz
33934f9b3eeSRoland Mainzcopy1=5 copynum=1
34034f9b3eeSRoland Mainzfoo="`eval echo "$"{copy$copynum"-0}"`"
34134f9b3eeSRoland Mainz[[ $foo == "$copy1" ]] || err_exit '$"..." not being ignored inside ``'
34234f9b3eeSRoland Mainz
343*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  ${1+"$@"}; print $#' cmd '') == 1 ]] || err_exit '${1+"$@"} with one empty argument fails'
344*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  ${1+"$@"}; print $#' cmd foo '') == 2 ]] || err_exit '${1+"$@"} with one non-empty and on empty argument fails'
345*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  ${1+"$@"}; print $#' cmd "" '') == 2 ]] || err_exit '${1+"$@"} with two empty arguments fails'
346*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  ${1+"$@"}; print $#' cmd "" '' '') == 3 ]] || err_exit '${1+"$@"} with three empty arguments fails'
347*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  "$@"; print $#' cmd '') == 1 ]] || err_exit '"$@" with one empty argument fails'
348*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  "${@:2}"; print $#' cmd '') == 0 ]] || err_exit '"$@" with one empty argument fails'
349*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  "$@"; print $#' cmd foo '') == 2 ]] || err_exit '"$@" with one non-empty and on empty argument fails'
350*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  "$@"; print $#' cmd "" '') == 2 ]] || err_exit '"$@" with two empty arguments fails'
351*b30d1939SAndy Fiddaman[[ $($SHELL -c 'set --  "$@"; print $#' cmd "" '' '') == 3 ]] || err_exit '"$@" with three empty arguments fails'
352*b30d1939SAndy Fiddamanargs=('')
353*b30d1939SAndy Fiddamanset -- "${args[@]}"
354*b30d1939SAndy Fiddaman[[ $# == 1 ]] || err_exit '"${args[@]}"} with one empty argument fails'
355*b30d1939SAndy Fiddamanset -- ${1+"${args[@]}"}
356*b30d1939SAndy Fiddaman[[ $# == 1 ]] || err_exit '${1+"${args[@]}"} with one empty argument fails'
357*b30d1939SAndy Fiddamanargs=(foo '')
358*b30d1939SAndy Fiddamanset -- "${args[@]}"
359*b30d1939SAndy Fiddaman[[ $# == 2 ]] || err_exit '"${args[@]}"} with one non-empty and one empty argument fails'
360*b30d1939SAndy Fiddamanset -- ${1+"${args[@]}"}
361*b30d1939SAndy Fiddaman[[ $# == 2 ]] || err_exit '${1+"${args[@]}"} with one non-empty and one empty argument fails'
362*b30d1939SAndy Fiddaman
363*b30d1939SAndy Fiddamanunset ARGS
364*b30d1939SAndy Fiddamanset --
365*b30d1939SAndy FiddamanARGS=("$@")
366*b30d1939SAndy Fiddamanset -- "${ARGS[@]}"
367*b30d1939SAndy Fiddaman(( $# )) &&  err_exit 'set -- "${ARGS[@]}" for empty array should not produce arguments'
368*b30d1939SAndy Fiddaman
369*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125))
370