OILS / spec / ble-features.test.sh View on Github | oilshell.org

644 lines, 348 significant
1
2#### [bash_unset] local-unset / dynamic-unset for localvar
3unlocal() { unset -v "$1"; }
4
5f1() {
6 local v=local
7 unset v
8 echo "[$1,local,(unset)] v: ${v-(unset)}"
9}
10v=global
11f1 global
12
13f1() {
14 local v=local
15 unlocal v
16 echo "[$1,local,(unlocal)] v: ${v-(unset)}"
17}
18v=global
19f1 'global'
20
21## STDOUT:
22# bash-unset
23# local-unset = value-unset
24# dynamic-unset = cell-unset
25[global,local,(unset)] v: (unset)
26[global,local,(unlocal)] v: global
27## END
28
29## OK osh/mksh/yash STDOUT:
30# always-cell-unset
31# local-unset = cell-unset
32# dynamic-unset = cell-unset
33[global,local,(unset)] v: global
34[global,local,(unlocal)] v: global
35## END
36
37## OK zsh/ash/dash STDOUT:
38# always-value-unset
39# local-unset = value-unset
40# dynamic-unset = value-unset
41[global,local,(unset)] v: (unset)
42[global,local,(unlocal)] v: (unset)
43## END
44
45
46#### [bash_unset] local-unset / dynamic-unset for localvar (mutated from tempenv)
47unlocal() { unset -v "$1"; }
48
49f1() {
50 local v=local
51 unset v
52 echo "[$1,local,(unset)] v: ${v-(unset)}"
53}
54v=global
55v=tempenv f1 'global,tempenv'
56
57f1() {
58 local v=local
59 unlocal v
60 echo "[$1,local,(unlocal)] v: ${v-(unset)}"
61}
62v=global
63v=tempenv f1 'global,tempenv'
64
65## STDOUT:
66# bash-unset (bash-5.1)
67# local-unset = local-unset
68# dynamic-unset = cell-unset
69[global,tempenv,local,(unset)] v: (unset)
70[global,tempenv,local,(unlocal)] v: global
71## END
72
73## BUG bash STDOUT:
74# bash-unset (bash-4.3..5.0 bug)
75[global,tempenv,local,(unset)] v: global
76[global,tempenv,local,(unlocal)] v: global
77## END
78
79## OK osh/mksh/yash STDOUT:
80# always-cell-unset
81# local-unset = cell-unset
82# dynamic-unset = cell-unset
83[global,tempenv,local,(unset)] v: tempenv
84[global,tempenv,local,(unlocal)] v: tempenv
85## END
86
87## OK zsh/ash/dash STDOUT:
88# always-value-unset
89# local-unset = value-unset
90# dynamic-unset = value-unset
91[global,tempenv,local,(unset)] v: (unset)
92[global,tempenv,local,(unlocal)] v: (unset)
93## END
94
95
96#### [bash_unset] local-unset / dynamic-unset for tempenv
97unlocal() { unset -v "$1"; }
98
99f1() {
100 unset v
101 echo "[$1,(unset)] v: ${v-(unset)}"
102}
103v=global
104v=tempenv f1 'global,tempenv'
105
106f1() {
107 unlocal v
108 echo "[$1,(unlocal)] v: ${v-(unset)}"
109}
110v=global
111v=tempenv f1 'global,tempenv'
112
113## STDOUT:
114# always-cell-unset, bash-unset
115# local-unset = cell-unset
116# dynamic-unset = cell-unset
117[global,tempenv,(unset)] v: global
118[global,tempenv,(unlocal)] v: global
119## END
120
121## OK zsh/ash/dash/mksh STDOUT:
122# always-value-unset, mksh-unset
123# local-unset = value-unset
124# dynamic-unset = value-unset
125[global,tempenv,(unset)] v: (unset)
126[global,tempenv,(unlocal)] v: (unset)
127## END
128
129#### [bash_unset] function call with tempenv vs tempenv-eval
130unlocal() { unset -v "$1"; }
131
132f5() {
133 echo "[$1] v: ${v-(unset)}"
134 local v
135 echo "[$1,local] v: ${v-(unset)}"
136 ( unset v
137 echo "[$1,local+unset] v: ${v-(unset)}" )
138 ( unlocal v
139 echo "[$1,local+unlocal] v: ${v-(unset)}" )
140}
141v=global
142f5 'global'
143v=tempenv f5 'global,tempenv'
144v=tempenv eval 'f5 "global,tempenv,(eval)"'
145
146## STDOUT:
147# bash-unset (bash-5.1)
148[global] v: global
149[global,local] v: (unset)
150[global,local+unset] v: (unset)
151[global,local+unlocal] v: global
152[global,tempenv] v: tempenv
153[global,tempenv,local] v: tempenv
154[global,tempenv,local+unset] v: (unset)
155[global,tempenv,local+unlocal] v: global
156[global,tempenv,(eval)] v: tempenv
157[global,tempenv,(eval),local] v: tempenv
158[global,tempenv,(eval),local+unset] v: (unset)
159[global,tempenv,(eval),local+unlocal] v: tempenv
160## END
161
162## BUG bash STDOUT:
163# bash-unset (bash-4.3..5.0 bug)
164[global] v: global
165[global,local] v: (unset)
166[global,local+unset] v: (unset)
167[global,local+unlocal] v: global
168[global,tempenv] v: tempenv
169[global,tempenv,local] v: tempenv
170[global,tempenv,local+unset] v: global
171[global,tempenv,local+unlocal] v: global
172[global,tempenv,(eval)] v: tempenv
173[global,tempenv,(eval),local] v: tempenv
174[global,tempenv,(eval),local+unset] v: (unset)
175[global,tempenv,(eval),local+unlocal] v: tempenv
176## END
177
178## OK ash STDOUT:
179# always-value-unset x init.unset
180[global] v: global
181[global,local] v: (unset)
182[global,local+unset] v: (unset)
183[global,local+unlocal] v: (unset)
184[global,tempenv] v: tempenv
185[global,tempenv,local] v: tempenv
186[global,tempenv,local+unset] v: (unset)
187[global,tempenv,local+unlocal] v: (unset)
188[global,tempenv,(eval)] v: tempenv
189[global,tempenv,(eval),local] v: (unset)
190[global,tempenv,(eval),local+unset] v: (unset)
191[global,tempenv,(eval),local+unlocal] v: (unset)
192## END
193
194## OK zsh STDOUT:
195# always-value-unset x init.empty
196[global] v: global
197[global,local] v:
198[global,local+unset] v: (unset)
199[global,local+unlocal] v: (unset)
200[global,tempenv] v: tempenv
201[global,tempenv,local] v:
202[global,tempenv,local+unset] v: (unset)
203[global,tempenv,local+unlocal] v: (unset)
204[global,tempenv,(eval)] v: tempenv
205[global,tempenv,(eval),local] v:
206[global,tempenv,(eval),local+unset] v: (unset)
207[global,tempenv,(eval),local+unlocal] v: (unset)
208## END
209
210## OK dash STDOUT:
211# always-value-unset x init.inherit
212[global] v: global
213[global,local] v: global
214[global,local+unset] v: (unset)
215[global,local+unlocal] v: (unset)
216[global,tempenv] v: tempenv
217[global,tempenv,local] v: tempenv
218[global,tempenv,local+unset] v: (unset)
219[global,tempenv,local+unlocal] v: (unset)
220[global,tempenv,(eval)] v: tempenv
221[global,tempenv,(eval),local] v: tempenv
222[global,tempenv,(eval),local+unset] v: (unset)
223[global,tempenv,(eval),local+unlocal] v: (unset)
224## END
225
226## OK osh/yash/mksh STDOUT:
227# always-cell-unset x init.unset
228[global] v: global
229[global,local] v: (unset)
230[global,local+unset] v: global
231[global,local+unlocal] v: global
232[global,tempenv] v: tempenv
233[global,tempenv,local] v: (unset)
234[global,tempenv,local+unset] v: tempenv
235[global,tempenv,local+unlocal] v: tempenv
236[global,tempenv,(eval)] v: tempenv
237[global,tempenv,(eval),local] v: (unset)
238[global,tempenv,(eval),local+unset] v: tempenv
239[global,tempenv,(eval),local+unlocal] v: tempenv
240## END
241
242
243#### [bash_unset] localvar-inherit from tempenv
244f1() {
245 local v
246 echo "[$1,(local)] v: ${v-(unset)}"
247}
248f2() {
249 f1 "$1,(func)"
250}
251f3() {
252 local v=local
253 f1 "$1,local,(func)"
254}
255v=global
256
257f1 'global'
258v=tempenv f1 'global,tempenv'
259(export v=global; f1 'xglobal')
260
261f2 'global'
262v=tempenv f2 'global,tempenv'
263(export v=global; f2 'xglobal')
264
265f3 'global'
266
267## STDOUT:
268# init.bash
269# init.unset for local
270# init.inherit for tempenv
271[global,(local)] v: (unset)
272[global,tempenv,(local)] v: tempenv
273[xglobal,(local)] v: (unset)
274[global,(func),(local)] v: (unset)
275[global,tempenv,(func),(local)] v: tempenv
276[xglobal,(func),(local)] v: (unset)
277[global,local,(func),(local)] v: (unset)
278## END
279
280## OK osh/mksh/yash STDOUT:
281# init.unset
282[global,(local)] v: (unset)
283[global,tempenv,(local)] v: (unset)
284[xglobal,(local)] v: (unset)
285[global,(func),(local)] v: (unset)
286[global,tempenv,(func),(local)] v: (unset)
287[xglobal,(func),(local)] v: (unset)
288[global,local,(func),(local)] v: (unset)
289## END
290
291## OK ash STDOUT:
292# init.unset x tempenv-in-localctx
293[global,(local)] v: (unset)
294[global,tempenv,(local)] v: tempenv
295[xglobal,(local)] v: (unset)
296[global,(func),(local)] v: (unset)
297[global,tempenv,(func),(local)] v: (unset)
298[xglobal,(func),(local)] v: (unset)
299[global,local,(func),(local)] v: (unset)
300## END
301
302## OK zsh STDOUT:
303# init.empty
304[global,(local)] v:
305[global,tempenv,(local)] v:
306[xglobal,(local)] v:
307[global,(func),(local)] v:
308[global,tempenv,(func),(local)] v:
309[xglobal,(func),(local)] v:
310[global,local,(func),(local)] v:
311## END
312
313## OK dash STDOUT:
314# init.inherit
315[global,(local)] v: global
316[global,tempenv,(local)] v: tempenv
317[xglobal,(local)] v: global
318[global,(func),(local)] v: global
319[global,tempenv,(func),(local)] v: tempenv
320[xglobal,(func),(local)] v: global
321[global,local,(func),(local)] v: local
322## END
323
324
325#### [bash_unset] nested context by tempenv-eval
326f1() {
327 local v=local1
328 echo "[$1,local1] v: ${v-(unset)}"
329 v=tempenv2 eval '
330 echo "[$1,local1,tempenv2,(eval)] v: ${v-(unset)}"
331 local v=local2
332 echo "[$1,local1,tempenv2,(eval),local2] v: ${v-(unset)}"
333 '
334 echo "[$1,local1] v: ${v-(unset)} (after)"
335}
336v=global
337v=tempenv1 f1 global,tempenv1
338
339## STDOUT:
340# localvar-nest yes
341[global,tempenv1,local1] v: local1
342[global,tempenv1,local1,tempenv2,(eval)] v: tempenv2
343[global,tempenv1,local1,tempenv2,(eval),local2] v: local2
344[global,tempenv1,local1] v: local1 (after)
345## END
346
347## OK mksh/ash/dash/yash STDOUT:
348# localvar-nest no
349[global,tempenv1,local1] v: local1
350[global,tempenv1,local1,tempenv2,(eval)] v: tempenv2
351[global,tempenv1,local1,tempenv2,(eval),local2] v: local2
352[global,tempenv1,local1] v: local2 (after)
353## END
354
355#### [bash_unset] local-unset / dynamic-unset for localvar on nested-context
356unlocal() { unset -v "$1"; }
357
358f2() {
359 local v=local1
360 v=tempenv2 eval '
361 local v=local2
362 (unset v ; echo "[$1,local1,tempenv2,(eval),local2,(unset)] v: ${v-(unset)}")
363 (unlocal v; echo "[$1,local1,tempenv2,(eval),local2,(unlocal)] v: ${v-(unset)}")
364 '
365}
366v=global
367v=tempenv1 f2 global,tempenv1
368
369## STDOUT:
370# bash-unset (bash-5.1)
371[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
372[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
373## END
374
375## BUG bash STDOUT:
376# bash-unset (bash-4.3..5.0 bug)
377[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: local1
378[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
379## END
380
381## OK zsh/ash/dash STDOUT:
382# always-value-unset
383[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
384[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: (unset)
385## END
386
387## OK osh STDOUT:
388# always-cell-unset x localvar-tempenv-share
389[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: local1
390[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
391## END
392
393## OK mksh/yash STDOUT:
394# always-cell-unset (remove all localvar/tempenv)
395[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: tempenv1
396[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: tempenv1
397## END
398
399#### [bash_unset] dynamic-unset for nested localvars
400unlocal() { unset -v "$1"; }
401
402f3() {
403 local v=local1
404 v=tempenv2 eval '
405 local v=local2
406 v=tempenv3 eval "
407 local v=local3
408 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)}\"
409 unlocal v
410 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 1)\"
411 unlocal v
412 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 2)\"
413 unlocal v
414 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 3)\"
415 unlocal v
416 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 4)\"
417 "
418 '
419}
420v=global
421v=tempenv1 f3 global,tempenv1
422
423## STDOUT:
424# cell-unset x localvar-tempenv-share x tempenv-in-localctx
425[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
426[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local2 (unlocal 1)
427[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local1 (unlocal 2)
428[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 3)
429[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
430## END
431
432## OK zsh/ash/dash STDOUT:
433# value-unset
434[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
435[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 1)
436[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
437[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
438[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
439## END
440
441## OK osh STDOUT:
442# cell-unset x localvar-tempenv-share
443[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
444[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local2 (unlocal 1)
445[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local1 (unlocal 2)
446[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 3)
447[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 4)
448## END
449
450## OK yash STDOUT:
451# cell-unset (remove all localvar)
452[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
453[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
454[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 2)
455[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
456[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
457## END
458
459## OK mksh STDOUT:
460# cell-unset (remove all localvar/tempenv) x tempenv-value-unset
461[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
462[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
463[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
464[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
465[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
466## END
467
468
469#### [bash_unset] dynamic-unset for nested tempenvs
470unlocal() { unset -v "$1"; }
471
472f4_unlocal() {
473 v=tempenv2 eval '
474 v=tempenv3 eval "
475 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
476 unlocal v
477 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 1)\"
478 unlocal v
479 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 2)\"
480 unlocal v
481 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 3)\"
482 unlocal v
483 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 4)\"
484 "
485 '
486}
487v=global
488v=tempenv1 f4_unlocal global,tempenv1
489
490## STDOUT:
491[global,tempenv1,tempenv2,tempenv3] v: tempenv3
492[global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unlocal 1)
493[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 2)
494[global,tempenv1,tempenv2,tempenv3] v: global (unlocal 3)
495[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
496## END
497
498## OK zsh/ash/dash/mksh STDOUT:
499# value-unset, mksh-unset
500[global,tempenv1,tempenv2,tempenv3] v: tempenv3
501[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
502[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
503[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
504[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
505## END
506
507## OK osh STDOUT:
508# cell-unset
509[global,tempenv1,tempenv2,tempenv3] v: tempenv3
510[global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unlocal 1)
511[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 2)
512[global,tempenv1,tempenv2,tempenv3] v: global (unlocal 3)
513[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
514## END
515
516## OK yash STDOUT:
517# remove all tempenv3
518[global,tempenv1,tempenv2,tempenv3] v: tempenv3
519[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
520[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
521[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
522[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
523## END
524
525#### [bash_unset] local-unset for nested tempenvs
526f4_unset() {
527 v=tempenv2 eval '
528 v=tempenv3 eval "
529 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
530 unset v
531 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 1)\"
532 unset v
533 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 2)\"
534 unset v
535 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 3)\"
536 unset v
537 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 4)\"
538 "
539 '
540}
541v=global
542v=tempenv1 f4_unset global,tempenv1
543
544## STDOUT:
545[global,tempenv1,tempenv2,tempenv3] v: tempenv3
546[global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unset 1)
547[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 2)
548[global,tempenv1,tempenv2,tempenv3] v: global (unset 3)
549[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
550## END
551
552## OK zsh/ash/dash/mksh/yash STDOUT:
553# value-unset, mksh-unset, tempenv-value-unset?
554[global,tempenv1,tempenv2,tempenv3] v: tempenv3
555[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
556[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
557[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
558[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
559## END
560
561## OK osh STDOUT:
562# cell-unset
563[global,tempenv1,tempenv2,tempenv3] v: tempenv3
564[global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unset 1)
565[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 2)
566[global,tempenv1,tempenv2,tempenv3] v: global (unset 3)
567[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
568## END
569
570## BUG yash STDOUT:
571# value-unset? inconsistent with other test cases
572[global,tempenv1,tempenv2,tempenv3] v: tempenv3
573[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
574[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
575[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
576[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
577## END
578
579#### [compat_array] ${arr} is ${arr[0]}
580case ${SH##*/} in (dash|ash) exit 1;; esac # dash/ash does not have arrays
581case ${SH##*/} in (osh) shopt -s compat_array;; esac
582case ${SH##*/} in (zsh) setopt KSH_ARRAYS;; esac
583arr=(foo bar baz)
584argv.py "$arr" "${arr}"
585## stdout: ['foo', 'foo']
586
587## N-I dash/ash status: 1
588## N-I dash/ash stdout-json: ""
589
590## OK yash stdout: ['foo', 'bar', 'baz', 'foo', 'bar', 'baz']
591
592#### [compat_array] scalar write to arrays
593case ${SH##*/} in
594(dash|ash) exit 1;; # dash/ash does not have arrays
595(osh) shopt -s compat_array;;
596(zsh) setopt KSH_ARRAYS;;
597esac
598
599a=(1 0 0)
600: $(( a++ ))
601argv.py "${a[@]}"
602## stdout: ['2', '0', '0']
603
604## N-I dash/ash status: 1
605## N-I dash/ash stdout-json: ""
606
607## OK yash STDOUT:
608# yash does not support scalar access. Instead, it replaces the array
609# with a scalar.
610['1']
611## END
612
613#### [compat_array] scalar write to associative arrays
614case ${SH##*/} in
615(dash|ash|yash|mksh) exit 1;; # dash/ash/yash/mksh does not have associative arrays
616(osh) shopt -s compat_array;;
617(zsh) setopt KSH_ARRAYS;;
618esac
619
620declare -A d=()
621d['0']=1
622d['foo']=hello
623d['bar']=world
624((d++))
625argv.py ${d['0']} ${d['foo']} ${d['bar']}
626## stdout: ['2', 'hello', 'world']
627
628## N-I dash/ash/yash/mksh status: 1
629## N-I dash/ash/yash/mksh stdout-json: ""
630
631## N-I zsh stdout: ['1', 'hello', 'world']
632
633#### [compat_array] ${alpha@a}
634declare -A alpha=(['1']=2)
635echo type=${alpha@a}
636shopt -s compat_array
637echo type=${alpha@a}
638## STDOUT:
639type=A
640type=A
641## END
642## N-I mksh/zsh status: 1
643## N-I dash/ash/yash status: 2
644## N-I dash/ash/yash/mksh/zsh stdout-json: ""