1 |
## compare_shells: bash mksh
|
2 |
## oils_failures_allowed: 2
|
3 |
|
4 |
# Arrays decay upon assignment (without splicing) and equality. This will not
|
5 |
# be true in Oil -- arrays will be first class.
|
6 |
|
7 |
|
8 |
set -- x y z
|
9 |
argv.py "[$@]"
|
10 |
var="[$@]"
|
11 |
argv.py "$var"
|
12 |
## STDOUT:
|
13 |
['[x', 'y', 'z]']
|
14 |
['[x y z]']
|
15 |
## END
|
16 |
|
17 |
|
18 |
IFS=x
|
19 |
set -- x y z
|
20 |
var="[$@]"
|
21 |
argv.py "$var"
|
22 |
## stdout: ['[x y z]']
|
23 |
|
24 |
|
25 |
declare -a a b
|
26 |
a=(x y z)
|
27 |
b="${a[@]}" # this collapses to a string
|
28 |
c=("${a[@]}") # this preserves the array
|
29 |
c[1]=YYY # mutate a copy -- doesn't affect the original
|
30 |
argv.py "${a[@]}"
|
31 |
argv.py "${b}"
|
32 |
argv.py "${c[@]}"
|
33 |
## STDOUT:
|
34 |
['x', 'y', 'z']
|
35 |
['x y z']
|
36 |
['x', 'YYY', 'z']
|
37 |
## END
|
38 |
|
39 |
|
40 |
shopt -s strict_array
|
41 |
|
42 |
a=(1 '2 3')
|
43 |
echo $a
|
44 |
## STDOUT:
|
45 |
1
|
46 |
## END
|
47 |
## OK osh status: 1
|
48 |
## OK osh stdout-json: ""
|
49 |
|
50 |
|
51 |
shopt -s strict_array
|
52 |
|
53 |
a=(1 '2 3')
|
54 |
echo ${a}
|
55 |
## STDOUT:
|
56 |
1
|
57 |
## END
|
58 |
## OK osh status: 1
|
59 |
## OK osh stdout-json: ""
|
60 |
|
61 |
|
62 |
a[5]=5
|
63 |
a[6]=6
|
64 |
echo "${a[@]}" ${#a[@]}
|
65 |
## stdout: 5 6 2
|
66 |
|
67 |
|
68 |
a=(1 2 3)
|
69 |
a[1]=5
|
70 |
a[40]=30 # out of order
|
71 |
a[10]=20
|
72 |
echo "${a[@]}" "${#a[@]}" # length is 1
|
73 |
## stdout: 1 5 3 20 30 5
|
74 |
|
75 |
|
76 |
a=('1 2' '3 4')
|
77 |
s='1 2 3 4' # length 2, length 4
|
78 |
echo ${#a[@]} ${#s}
|
79 |
[[ "${a[@]}" = "$s" ]] && echo EQUAL
|
80 |
## STDOUT:
|
81 |
2 7
|
82 |
EQUAL
|
83 |
## END
|
84 |
|
85 |
|
86 |
shopt -s strict_array
|
87 |
|
88 |
a=(1 10)
|
89 |
(( a++ )) # doesn't make sense
|
90 |
echo "${a[@]}"
|
91 |
## stdout: 2 10
|
92 |
## OK osh status: 1
|
93 |
## OK osh stdout-json: ""
|
94 |
|
95 |
|
96 |
a=('-x-' 'y-y' '-z-')
|
97 |
|
98 |
# This does the prefix stripping FIRST, and then it joins.
|
99 |
argv.py "${a[*]#-}"
|
100 |
## STDOUT:
|
101 |
['x- y-y z-']
|
102 |
## END
|
103 |
## N-I mksh status: 1
|
104 |
## N-I mksh stdout-json: ""
|
105 |
|
106 |
|
107 |
|
108 |
case $SH in mksh) exit ;; esac
|
109 |
|
110 |
z=()
|
111 |
declare -a | grep z=
|
112 |
|
113 |
z+=(b c)
|
114 |
declare -a | grep z=
|
115 |
|
116 |
# z[5]= finds the index, or puts it in SORTED order I think
|
117 |
z[5]=d
|
118 |
declare -a | grep z=
|
119 |
|
120 |
z[1]=ZZZ
|
121 |
declare -a | grep z=
|
122 |
|
123 |
# Adds after last index
|
124 |
z+=(f g)
|
125 |
declare -a | grep z=
|
126 |
|
127 |
# This is the equivalent of z[0]+=mystr
|
128 |
z+=-mystr
|
129 |
declare -a | grep z=
|
130 |
|
131 |
z[1]+=-append
|
132 |
declare -a | grep z=
|
133 |
|
134 |
argv.py keys "${!z[@]}" # 0 1 5 6 7
|
135 |
argv.py values "${z[@]}"
|
136 |
|
137 |
# can't do this conversion
|
138 |
declare -A z
|
139 |
declare -A | grep z=
|
140 |
|
141 |
echo status=$?
|
142 |
|
143 |
## STDOUT:
|
144 |
declare -a z=()
|
145 |
declare -a z=([0]="b" [1]="c")
|
146 |
declare -a z=([0]="b" [1]="c" [5]="d")
|
147 |
declare -a z=([0]="b" [1]="ZZZ" [5]="d")
|
148 |
declare -a z=([0]="b" [1]="ZZZ" [5]="d" [6]="f" [7]="g")
|
149 |
declare -a z=([0]="b-mystr" [1]="ZZZ" [5]="d" [6]="f" [7]="g")
|
150 |
declare -a z=([0]="b-mystr" [1]="ZZZ-append" [5]="d" [6]="f" [7]="g")
|
151 |
['keys', '0', '1', '5', '6', '7']
|
152 |
['values', 'b-mystr', 'ZZZ-append', 'd', 'f', 'g']
|
153 |
status=1
|
154 |
## END
|
155 |
|
156 |
## N-I mksh STDOUT:
|
157 |
## END
|
158 |
|
159 |
|
160 |
|
161 |
case $SH in mksh) exit ;; esac
|
162 |
|
163 |
declare -A A=([k]=v)
|
164 |
declare -A | grep A=
|
165 |
|
166 |
argv.py keys "${!A[@]}"
|
167 |
argv.py values "${A[@]}"
|
168 |
|
169 |
exit
|
170 |
|
171 |
# Huh this actually works, we don't support it
|
172 |
# Hm the order here is all messed up, in bash 5.2
|
173 |
A+=([k2]=v2 [0]=foo [9]=9 [9999]=9999)
|
174 |
declare -A | grep A=
|
175 |
|
176 |
A+=-append
|
177 |
declare -A | grep A=
|
178 |
|
179 |
argv.py keys "${!A[@]}"
|
180 |
argv.py values "${A[@]}"
|
181 |
|
182 |
## STDOUT:
|
183 |
declare -A A=([k]="v" )
|
184 |
['keys', 'k']
|
185 |
['values', 'v']
|
186 |
## END
|
187 |
|
188 |
## N-I mksh STDOUT:
|
189 |
## END
|