OILS / spec / builtin-meta-assign.test.sh View on Github | oils.pub

376 lines, 193 significant
1## oils_failures_allowed: 0
2## compare_shells: dash bash mksh zsh ash
3
4#### builtin declare a=(x y) is allowed
5case $SH in dash|zsh|mksh|ash) exit ;; esac
6
7$SH -c 'declare a=(x y); declare -p a'
8if test $? -ne 0; then
9 echo 'fail'
10fi
11
12$SH -c 'builtin declare a=(x y); declare -p a'
13if test $? -ne 0; then
14 echo 'fail'
15fi
16
17$SH -c 'builtin declare -a a=(x y); declare -p a'
18if test $? -ne 0; then
19 echo 'fail'
20fi
21
22## BUG bash STDOUT:
23declare -a a=([0]="x" [1]="y")
24fail
25fail
26## END
27
28## STDOUT:
29declare -a a=(x y)
30declare -a a=(x y)
31declare -a a=(x y)
32## END
33
34## N-I dash/zsh/mksh/ash STDOUT:
35## END
36
37
38#### command export,readonly
39case $SH in zsh) exit ;; esac
40
41# dash doesn't have declare typeset
42
43command export c=export
44echo c=$c
45
46command readonly c=readonly
47echo c=$c
48
49echo --
50
51command command export cc=export
52echo cc=$cc
53
54command command readonly cc=readonly
55echo cc=$cc
56
57## STDOUT:
58c=export
59c=readonly
60--
61cc=export
62cc=readonly
63## END
64## N-I zsh STDOUT:
65## END
66
67#### command local
68
69f() {
70 command local s=local
71 echo s=$s
72}
73
74f
75
76## STDOUT:
77s=local
78## END
79
80## BUG dash/ash STDOUT:
81s=
82## END
83
84## N-I mksh/zsh STDOUT:
85s=
86## END
87
88#### export, builtin export
89
90x='a b'
91
92export y=$x
93echo $y
94
95builtin export z=$x
96echo $z
97
98## STDOUT:
99a b
100a b
101## END
102
103## BUG bash/mksh STDOUT:
104a b
105a
106## END
107
108## N-I dash STDOUT:
109a
110
111## END
112
113## N-I ash STDOUT:
114a b
115
116## END
117
118#### \builtin declare - ble.sh relies on it
119case $SH in dash|mksh|ash) exit ;; esac
120
121x='a b'
122
123builtin declare c=$x
124echo $c
125
126\builtin declare d=$x
127echo $d
128
129'builtin' declare e=$x
130echo $e
131
132b=builtin
133$b declare f=$x
134echo $f
135
136b=b
137${b}uiltin declare g=$x
138echo $g
139
140## STDOUT:
141a b
142a b
143a b
144a b
145a b
146## END
147
148## BUG bash STDOUT:
149a
150a
151a
152a
153a
154## END
155
156## N-I dash/ash/mksh STDOUT:
157## END
158
159#### \command readonly - similar issue
160case $SH in zsh) exit ;; esac
161
162# \command readonly is equivalent to \builtin declare
163# except dash implements it
164
165x='a b'
166
167readonly b=$x
168echo $b
169
170command readonly c=$x
171echo $c
172
173\command readonly d=$x
174echo $d
175
176'command' readonly e=$x
177echo $e
178
179# The issue here is that we have a heuristic in EvalWordSequence2:
180# fs len(part_vals) == 1
181
182## STDOUT:
183a b
184a b
185a b
186a b
187## END
188
189## BUG bash STDOUT:
190a b
191a
192a
193a
194## END
195
196# note: later versions of dash are fixed
197## BUG dash STDOUT:
198a
199a
200a
201a
202## END
203
204## N-I zsh STDOUT:
205## END
206
207#### Dynamic $c readonly - bash and dash change behavior, mksh bug
208case $SH in zsh) exit ;; esac
209
210x='a b'
211
212z=command
213$z readonly c=$x
214echo $c
215
216z=c
217${z}ommand readonly d=$x
218echo $d
219
220## STDOUT:
221a b
222a b
223## END
224
225## BUG bash/dash STDOUT:
226a
227a
228## END
229
230## BUG mksh status: 2
231## BUG mksh STDOUT:
232a
233## END
234
235## N-I zsh STDOUT:
236## END
237
238
239#### static builtin command ASSIGN, command builtin ASSIGN
240case $SH in dash|ash|zsh) exit ;; esac
241
242# dash doesn't have declare typeset
243
244builtin command export bc=export
245echo bc=$bc
246
247builtin command readonly bc=readonly
248echo bc=$bc
249
250echo --
251
252command builtin export cb=export
253echo cb=$cb
254
255command builtin readonly cb=readonly
256echo cb=$cb
257
258## STDOUT:
259bc=export
260bc=readonly
261--
262cb=export
263cb=readonly
264## END
265## N-I dash/ash/zsh STDOUT:
266## END
267
268#### dynamic builtin command ASSIGN, command builtin ASSIGN
269case $SH in dash|ash|zsh) exit ;; esac
270
271b=builtin
272c=command
273e=export
274r=readonly
275
276$b $c export bc=export
277echo bc=$bc
278
279$b $c readonly bc=readonly
280echo bc=$bc
281
282echo --
283
284$c $b export cb=export
285echo cb=$cb
286
287$c $b readonly cb=readonly
288echo cb=$cb
289
290echo --
291
292$b $c $e bce=export
293echo bce=$bce
294
295$b $c $r bcr=readonly
296echo bcr=$bcr
297
298echo --
299
300$c $b $e cbe=export
301echo cbe=$cbe
302
303$c $b $r cbr=readonly
304echo cbr=$cbr
305
306## STDOUT:
307bc=export
308bc=readonly
309--
310cb=export
311cb=readonly
312--
313bce=export
314bcr=readonly
315--
316cbe=export
317cbr=readonly
318## END
319## N-I dash/ash/zsh STDOUT:
320## END
321
322#### builtin typeset, export,readonly
323case $SH in dash|ash) exit ;; esac
324
325builtin typeset s=typeset
326echo s=$s
327
328builtin export s=export
329echo s=$s
330
331builtin readonly s=readonly
332echo s=$s
333
334echo --
335
336builtin builtin typeset s2=typeset
337echo s2=$s2
338
339builtin builtin export s2=export
340echo s2=$s2
341
342builtin builtin readonly s2=readonly
343echo s2=$s2
344
345## STDOUT:
346s=typeset
347s=export
348s=readonly
349--
350s2=typeset
351s2=export
352s2=readonly
353## END
354## N-I dash/ash STDOUT:
355## END
356
357#### builtin declare,local
358case $SH in dash|ash|mksh) exit ;; esac
359
360builtin declare s=declare
361echo s=$s
362
363f() {
364 builtin local s=local
365 echo s=$s
366}
367
368f
369
370## STDOUT:
371s=declare
372s=local
373## END
374## N-I dash/ash/mksh STDOUT:
375## END
376