1 ## compare_shells: bash-4.4 zsh mksh ash dash yash
2 ## oils_failures_allowed: 5
3
4 # Some tests moved here for spec/ble-features
5 # We could move others too
6
7 #### [bash_unset] nested context by tempenv-eval
8 f1() {
9 local v=local1
10 echo "[$1,local1] v: ${v-(unset)}"
11 v=tempenv2 eval '
12 echo "[$1,local1,tempenv2,(eval)] v: ${v-(unset)}"
13 local v=local2
14 echo "[$1,local1,tempenv2,(eval),local2] v: ${v-(unset)}"
15 '
16 echo "[$1,local1] v: ${v-(unset)} (after)"
17 }
18 v=global
19 v=tempenv1 f1 global,tempenv1
20
21 ## STDOUT:
22 # localvar-nest yes
23 [global,tempenv1,local1] v: local1
24 [global,tempenv1,local1,tempenv2,(eval)] v: tempenv2
25 [global,tempenv1,local1,tempenv2,(eval),local2] v: local2
26 [global,tempenv1,local1] v: local1 (after)
27 ## END
28
29 ## OK mksh/ash/dash/yash STDOUT:
30 # localvar-nest no
31 [global,tempenv1,local1] v: local1
32 [global,tempenv1,local1,tempenv2,(eval)] v: tempenv2
33 [global,tempenv1,local1,tempenv2,(eval),local2] v: local2
34 [global,tempenv1,local1] v: local2 (after)
35 ## END
36
37 #### [bash_unset] local-unset / dynamic-unset for localvar on nested-context
38 unlocal() { unset -v "$1"; }
39
40 f2() {
41 local v=local1
42 v=tempenv2 eval '
43 local v=local2
44 (unset v ; echo "[$1,local1,tempenv2,(eval),local2,(unset)] v: ${v-(unset)}")
45 (unlocal v; echo "[$1,local1,tempenv2,(eval),local2,(unlocal)] v: ${v-(unset)}")
46 '
47 }
48 v=global
49 v=tempenv1 f2 global,tempenv1
50
51 ## STDOUT:
52 # bash-unset (bash-5.1)
53 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
54 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
55 ## END
56
57 ## BUG bash STDOUT:
58 # bash-unset (bash-4.3..5.0 bug)
59 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: local1
60 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
61 ## END
62
63 ## OK zsh/ash/dash STDOUT:
64 # always-value-unset
65 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
66 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: (unset)
67 ## END
68
69 ## OK osh STDOUT:
70 # always-cell-unset x localvar-tempenv-share
71 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: local1
72 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
73 ## END
74
75 ## OK mksh/yash STDOUT:
76 # always-cell-unset (remove all localvar/tempenv)
77 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: tempenv1
78 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: tempenv1
79 ## END
80
81 #### [bash_unset] dynamic-unset for nested localvars
82 unlocal() { unset -v "$1"; }
83
84 f3() {
85 local v=local1
86 v=tempenv2 eval '
87 local v=local2
88 v=tempenv3 eval "
89 local v=local3
90 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)}\"
91 unlocal v
92 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 1)\"
93 unlocal v
94 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 2)\"
95 unlocal v
96 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 3)\"
97 unlocal v
98 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 4)\"
99 "
100 '
101 }
102 v=global
103 v=tempenv1 f3 global,tempenv1
104
105 ## STDOUT:
106 # cell-unset x localvar-tempenv-share x tempenv-in-localctx
107 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
108 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local2 (unlocal 1)
109 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local1 (unlocal 2)
110 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 3)
111 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
112 ## END
113
114 ## OK zsh/ash/dash STDOUT:
115 # value-unset
116 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
117 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 1)
118 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
119 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
120 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
121 ## END
122
123 ## OK osh STDOUT:
124 # cell-unset x localvar-tempenv-share
125 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
126 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local2 (unlocal 1)
127 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local1 (unlocal 2)
128 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 3)
129 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 4)
130 ## END
131
132 ## OK yash STDOUT:
133 # cell-unset (remove all localvar)
134 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
135 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
136 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 2)
137 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
138 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
139 ## END
140
141 ## OK mksh STDOUT:
142 # cell-unset (remove all localvar/tempenv) x tempenv-value-unset
143 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
144 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
145 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
146 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
147 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
148 ## END
149
150
151 #### [bash_unset] dynamic-unset for nested tempenvs
152 unlocal() { unset -v "$1"; }
153
154 f4_unlocal() {
155 v=tempenv2 eval '
156 v=tempenv3 eval "
157 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
158 unlocal v
159 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 1)\"
160 unlocal v
161 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 2)\"
162 unlocal v
163 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 3)\"
164 unlocal v
165 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 4)\"
166 "
167 '
168 }
169 v=global
170 v=tempenv1 f4_unlocal global,tempenv1
171
172 ## STDOUT:
173 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
174 [global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unlocal 1)
175 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 2)
176 [global,tempenv1,tempenv2,tempenv3] v: global (unlocal 3)
177 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
178 ## END
179
180 ## OK zsh/ash/dash/mksh STDOUT:
181 # value-unset, mksh-unset
182 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
183 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
184 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
185 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
186 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
187 ## END
188
189 ## OK osh STDOUT:
190 # cell-unset
191 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
192 [global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unlocal 1)
193 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 2)
194 [global,tempenv1,tempenv2,tempenv3] v: global (unlocal 3)
195 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
196 ## END
197
198 ## OK yash STDOUT:
199 # remove all tempenv3
200 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
201 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
202 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
203 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
204 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
205 ## END
206
207 #### [bash_unset] local-unset for nested tempenvs
208 f4_unset() {
209 v=tempenv2 eval '
210 v=tempenv3 eval "
211 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
212 unset v
213 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 1)\"
214 unset v
215 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 2)\"
216 unset v
217 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 3)\"
218 unset v
219 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 4)\"
220 "
221 '
222 }
223 v=global
224 v=tempenv1 f4_unset global,tempenv1
225
226 ## STDOUT:
227 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
228 [global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unset 1)
229 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 2)
230 [global,tempenv1,tempenv2,tempenv3] v: global (unset 3)
231 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
232 ## END
233
234 ## OK zsh/ash/dash/mksh STDOUT:
235 # value-unset, mksh-unset, tempenv-value-unset?
236 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
237 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
238 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
239 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
240 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
241 ## END
242
243 ## OK osh STDOUT:
244 # cell-unset
245 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
246 [global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unset 1)
247 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 2)
248 [global,tempenv1,tempenv2,tempenv3] v: global (unset 3)
249 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
250 ## END
251
252 ## BUG yash STDOUT:
253 # value-unset? inconsistent with other test cases
254 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
255 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
256 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
257 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
258 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
259 ## END
260