1 ## compare_shells: bash zsh mksh ash dash yash
2 ## oils_failures_allowed: 0
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 ## OK bash/zsh 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 ## 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 ## OK bash 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 # Note that bash-4.3 to bash 5.0 behave differently
58 # [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: local1
59 # [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
60
61 ## OK-2 zsh/ash/dash STDOUT:
62 # always-value-unset
63 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
64 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: (unset)
65 ## END
66
67 ## STDOUT:
68 # always-cell-unset (remove all localvar/tempenv)
69 [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: tempenv1
70 [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: tempenv1
71 ## END
72
73 #### [bash_unset] dynamic-unset for nested localvars
74 unlocal() { unset -v "$1"; }
75
76 f3() {
77 local v=local1
78 v=tempenv2 eval '
79 local v=local2
80 v=tempenv3 eval "
81 local v=local3
82 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)}\"
83 unlocal v
84 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 1)\"
85 unlocal v
86 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 2)\"
87 unlocal v
88 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 3)\"
89 unlocal v
90 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 4)\"
91 "
92 '
93 }
94 v=global
95 v=tempenv1 f3 global,tempenv1
96
97 ## OK bash STDOUT:
98 # cell-unset x localvar-tempenv-share x tempenv-in-localctx
99 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
100 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local2 (unlocal 1)
101 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local1 (unlocal 2)
102 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 3)
103 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
104 ## END
105
106 ## OK-2 zsh/ash/dash STDOUT:
107 # value-unset
108 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
109 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 1)
110 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
111 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
112 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
113 ## END
114
115 ## STDOUT:
116 # cell-unset (remove all localvar)
117 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
118 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
119 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 2)
120 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
121 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
122 ## END
123
124 ## OK-3 mksh STDOUT:
125 # cell-unset (remove all localvar/tempenv) x tempenv-value-unset
126 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
127 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
128 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
129 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
130 [global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
131 ## END
132
133
134 #### [bash_unset] dynamic-unset for nested tempenvs
135 unlocal() { unset -v "$1"; }
136
137 f4_unlocal() {
138 v=tempenv2 eval '
139 v=tempenv3 eval "
140 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
141 unlocal v
142 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 1)\"
143 unlocal v
144 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 2)\"
145 unlocal v
146 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 3)\"
147 unlocal v
148 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 4)\"
149 "
150 '
151 }
152 v=global
153 v=tempenv1 f4_unlocal global,tempenv1
154
155 ## OK bash STDOUT:
156 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
157 [global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unlocal 1)
158 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 2)
159 [global,tempenv1,tempenv2,tempenv3] v: global (unlocal 3)
160 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
161 ## END
162
163 ## STDOUT:
164 # value-unset, mksh-unset
165 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
166 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
167 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
168 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
169 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
170 ## END
171
172 ## OK-3 osh STDOUT:
173 # cell-unset
174 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
175 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 1)
176 [global,tempenv1,tempenv2,tempenv3] v: global (unlocal 2)
177 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
178 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
179 ## END
180
181 ## OK-2 yash STDOUT:
182 # remove all tempenv3
183 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
184 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
185 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
186 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
187 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
188 ## END
189
190 #### [bash_unset] local-unset for nested tempenvs
191 f4_unset() {
192 v=tempenv2 eval '
193 v=tempenv3 eval "
194 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
195 unset v
196 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 1)\"
197 unset v
198 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 2)\"
199 unset v
200 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 3)\"
201 unset v
202 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 4)\"
203 "
204 '
205 }
206 v=global
207 v=tempenv1 f4_unset global,tempenv1
208
209 ## OK bash STDOUT:
210 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
211 [global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unset 1)
212 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 2)
213 [global,tempenv1,tempenv2,tempenv3] v: global (unset 3)
214 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
215 ## END
216
217 ## STDOUT:
218 # value-unset, mksh-unset, tempenv-value-unset?
219 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
220 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
221 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
222 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
223 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
224 ## END
225
226 ## OK-2 osh STDOUT:
227 # cell-unset
228 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
229 [global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 1)
230 [global,tempenv1,tempenv2,tempenv3] v: global (unset 2)
231 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
232 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
233 ## END
234
235 ## BUG yash STDOUT:
236 # value-unset? inconsistent with other test cases
237 [global,tempenv1,tempenv2,tempenv3] v: tempenv3
238 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
239 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
240 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
241 [global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
242 ## END
243