| 1 | #!/bin/bash |
| 2 | # |
| 3 | # Corner cases for assignment that we're not handling now. |
| 4 | |
| 5 | #### typeset a[3]=4 |
| 6 | typeset a[3]=4 a[5]=6 |
| 7 | echo status=$? |
| 8 | argv.py "${!a[@]}" "${a[@]}" |
| 9 | ## STDOUT: |
| 10 | status=0 |
| 11 | ['3', '5', '4', '6'] |
| 12 | ## END |
| 13 | |
| 14 | #### typeset -a a[1]=a a[3]=c |
| 15 | # declare works the same way in bash, but not mksh. |
| 16 | # spaces are NOT allowed here. |
| 17 | typeset -a a[1*1]=x a[1+2]=z |
| 18 | argv.py "${a[@]}" |
| 19 | ## stdout: ['x', 'z'] |
| 20 | |
| 21 | #### local a[3]=4 |
| 22 | f() { |
| 23 | local a[3]=4 a[5]=6 |
| 24 | echo status=$? |
| 25 | argv.py "${!a[@]}" "${a[@]}" |
| 26 | } |
| 27 | f |
| 28 | ## STDOUT: |
| 29 | status=0 |
| 30 | ['3', '5', '4', '6'] |
| 31 | ## END |
| 32 | |
| 33 | #### readonly a[7]=8 |
| 34 | readonly b[7]=8 |
| 35 | echo status=$? |
| 36 | argv.py "${!b[@]}" "${b[@]}" |
| 37 | ## STDOUT: |
| 38 | status=0 |
| 39 | ['7', '8'] |
| 40 | ## END |
| 41 | |
| 42 | # bash doesn't like this variable name! |
| 43 | ## N-I bash STDOUT: |
| 44 | status=1 |
| 45 | [] |
| 46 | ## END |
| 47 | |
| 48 | #### export a[7]=8 |
| 49 | export a[7]=8 |
| 50 | echo status=$? |
| 51 | argv.py "${!a[@]}" "${a[@]}" |
| 52 | printenv.py a |
| 53 | ## STDOUT: |
| 54 | status=1 |
| 55 | [] |
| 56 | None |
| 57 | ## END |
| 58 | ## OK osh STDOUT: |
| 59 | status=2 |
| 60 | [] |
| 61 | None |
| 62 | ## END |
| 63 | ## BUG mksh STDOUT: |
| 64 | status=0 |
| 65 | ['7', '8'] |
| 66 | None |
| 67 | ## END |
| 68 | |
| 69 | #### 'builtin' prefix is allowed on assignments |
| 70 | builtin export e='E' |
| 71 | echo e=$e |
| 72 | ## STDOUT: |
| 73 | e=E |
| 74 | ## END |
| 75 | ## N-I dash STDOUT: |
| 76 | e= |
| 77 | ## END |
| 78 | |
| 79 | #### 'command' prefix is allowed on assignments |
| 80 | readonly r1='R1' # zsh has this |
| 81 | command readonly r2='R2' # but not this |
| 82 | echo r1=$r1 |
| 83 | echo r2=$r2 |
| 84 | ## STDOUT: |
| 85 | r1=R1 |
| 86 | r2=R2 |
| 87 | ## END |
| 88 | ## N-I zsh STDOUT: |
| 89 | r1=R1 |
| 90 | r2= |
| 91 | ## END |
| 92 | |
| 93 | #### 'builtin' prefix and array is a parse error |
| 94 | builtin typeset a=(1 2 3) |
| 95 | echo len=${#a[@]} |
| 96 | ## stdout-json: "" |
| 97 | ## status: 2 |
| 98 | ## OK mksh status: 1 |
| 99 | |
| 100 | #### 'command' prefix and array is a parse error |
| 101 | command typeset a=(1 2 3) |
| 102 | echo len=${#a[@]} |
| 103 | ## stdout-json: "" |
| 104 | ## status: 2 |
| 105 | ## OK mksh status: 1 |
| 106 |