1 ## compare_shells: dash bash mksh zsh
2
3 # Some shell errors are unrecoverable! Like divide by zero (except in bash.
4 #
5 # Any others?
6
7
8 #### Unrecoverable: divide by zero in redirect word
9
10 $SH -c '
11 echo hi > file$(( 42 / 0 )) in
12 echo inside=$?
13 '
14 echo outside=$?
15
16 ## STDOUT:
17 outside=1
18 ## END
19
20 ## OK dash/ash STDOUT:
21 outside=2
22 ## END
23
24 # bash makes the command fail
25 ## OK bash STDOUT:
26 inside=1
27 outside=0
28 ## END:
29
30
31 #### Unrecoverable: divide by zero in conditional word
32
33 $SH -c '
34 if test foo$(( 42 / 0 )) = foo; then
35 echo true
36 else
37 echo false
38 fi
39 echo inside=$?
40 '
41 echo outside=$?
42
43 echo ---
44
45 $SH -c '
46 if test foo$(( 42 / 0 )) = foo; then
47 echo true
48 fi
49 echo inside=$?
50 '
51 echo outside=$?
52
53 ## STDOUT:
54 outside=1
55 ---
56 outside=1
57 ## END
58
59 ## OK dash/ash STDOUT:
60 outside=2
61 ---
62 outside=2
63 ## END
64
65 # bash makes the command fail
66 ## OK bash STDOUT:
67 inside=1
68 outside=0
69 ---
70 inside=1
71 outside=0
72 ## END:
73
74 # weird difference in zsh!
75
76 ## BUG zsh STDOUT:
77 outside=1
78 ---
79 outside=0
80 ## END
81
82
83 #### Unrecoverable: divide by zero in case
84
85 $SH -c '
86 case $(( 42 / 0 )) in
87 (*) echo hi ;;
88 esac
89 echo inside=$?
90 '
91 echo outside=$?
92
93 echo ---
94
95 $SH -c '
96 case foo in
97 ( $(( 42 / 0 )) )
98 echo hi
99 ;;
100 esac
101 echo inside=$?
102 '
103 echo outside=$?
104
105 ## STDOUT:
106 outside=1
107 ---
108 outside=1
109 ## END
110
111 ## OK dash/ash STDOUT:
112 outside=2
113 ---
114 outside=2
115 ## END
116
117 ## OK bash STDOUT:
118 inside=1
119 outside=0
120 ---
121 inside=1
122 outside=0
123 ## END:
124
125 ## BUG zsh STDOUT:
126 outside=0
127 ---
128 outside=0
129 ## END
130
131
132 #### Unrecoverable: ${undef?message}
133
134 $SH -c '
135 echo ${undef?message}
136 echo inside=$?
137 '
138 echo outside=$?
139
140 $SH -c '
141 case ${undef?message} in
142 (*) echo hi ;;
143 esac
144 echo inside=$?
145 '
146 echo outside=$?
147
148 ## STDOUT:
149 outside=1
150 outside=1
151 ## END
152 ## OK dash STDOUT:
153 outside=2
154 outside=2
155 ## END
156 ## OK bash STDOUT:
157 outside=127
158 outside=127
159 ## END
160
161 #### ${undef} with nounset
162
163 $SH -c '
164 set -o nounset
165 case ${undef} in
166 (*) echo hi ;;
167 esac
168 echo inside=$?
169 '
170 echo outside=$?
171
172 ## STDOUT:
173 outside=1
174 ## END
175
176 ## OK dash STDOUT:
177 outside=2
178 ## END
179
180 ## OK bash STDOUT:
181 outside=127
182 ## END
183
184 ## BUG zsh STDOUT:
185 outside=0
186 ## END
187