1
2 #### [bash_unset] local-unset / dynamic-unset for localvar
3 unlocal() { unset -v "$1"; }
4
5 f1() {
6 local v=local
7 unset v
8 echo "[$1,local,(unset)] v: ${v-(unset)}"
9 }
10 v=global
11 f1 global
12
13 f1() {
14 local v=local
15 unlocal v
16 echo "[$1,local,(unlocal)] v: ${v-(unset)}"
17 }
18 v=global
19 f1 '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)
47 unlocal() { unset -v "$1"; }
48
49 f1() {
50 local v=local
51 unset v
52 echo "[$1,local,(unset)] v: ${v-(unset)}"
53 }
54 v=global
55 v=tempenv f1 'global,tempenv'
56
57 f1() {
58 local v=local
59 unlocal v
60 echo "[$1,local,(unlocal)] v: ${v-(unset)}"
61 }
62 v=global
63 v=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
97 unlocal() { unset -v "$1"; }
98
99 f1() {
100 unset v
101 echo "[$1,(unset)] v: ${v-(unset)}"
102 }
103 v=global
104 v=tempenv f1 'global,tempenv'
105
106 f1() {
107 unlocal v
108 echo "[$1,(unlocal)] v: ${v-(unset)}"
109 }
110 v=global
111 v=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
130 unlocal() { unset -v "$1"; }
131
132 f5() {
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 }
141 v=global
142 f5 'global'
143 v=tempenv f5 'global,tempenv'
144 v=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
244 f1() {
245 local v
246 echo "[$1,(local)] v: ${v-(unset)}"
247 }
248 f2() {
249 f1 "$1,(func)"
250 }
251 f3() {
252 local v=local
253 f1 "$1,local,(func)"
254 }
255 v=global
256
257 f1 'global'
258 v=tempenv f1 'global,tempenv'
259 (export v=global; f1 'xglobal')
260
261 f2 'global'
262 v=tempenv f2 'global,tempenv'
263 (export v=global; f2 'xglobal')
264
265 f3 '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
326 f1() {
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 }
336 v=global
337 v=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
356 unlocal() { unset -v "$1"; }
357
358 f2() {
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 }
366 v=global
367 v=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
400 unlocal() { unset -v "$1"; }
401
402 f3() {
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 }
420 v=global
421 v=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
470 unlocal() { unset -v "$1"; }
471
472 f4_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 }
487 v=global
488 v=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
526 f4_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 }
541 v=global
542 v=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]}
580 case ${SH##*/} in (dash|ash) exit 1;; esac # dash/ash does not have arrays
581 case ${SH##*/} in (osh) shopt -s compat_array;; esac
582 case ${SH##*/} in (zsh) setopt KSH_ARRAYS;; esac
583 arr=(foo bar baz)
584 argv.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
593 case ${SH##*/} in
594 (dash|ash) exit 1;; # dash/ash does not have arrays
595 (osh) shopt -s compat_array;;
596 (zsh) setopt KSH_ARRAYS;;
597 esac
598
599 a=(1 0 0)
600 : $(( a++ ))
601 argv.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
614 case ${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;;
618 esac
619
620 declare -A d=()
621 d['0']=1
622 d['foo']=hello
623 d['bar']=world
624 ((d++))
625 argv.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}
634 declare -A alpha=(['1']=2)
635 echo type=${alpha@a}
636 shopt -s compat_array
637 echo type=${alpha@a}
638 ## STDOUT:
639 type=A
640 type=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: ""