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 |
|