1 |
|
2 |
#### Bad var sub |
3 |
echo $% |
4 |
## stdout: $% |
5 |
|
6 |
#### Bad braced var sub -- not allowed |
7 |
echo ${%} |
8 |
## status: 2 |
9 |
## OK bash/mksh status: 1 |
10 |
|
11 |
#### Bad var sub caught at parse time |
12 |
if test -f /; then |
13 |
echo ${%} |
14 |
else |
15 |
echo ok |
16 |
fi |
17 |
## status: 2 |
18 |
## BUG dash/bash/mksh status: 0 |
19 |
|
20 |
#### Incomplete while |
21 |
echo hi; while |
22 |
echo status=$? |
23 |
## status: 2 |
24 |
## stdout-json: "" |
25 |
## OK mksh status: 1 |
26 |
|
27 |
#### Incomplete for |
28 |
echo hi; for |
29 |
echo status=$? |
30 |
## status: 2 |
31 |
## stdout-json: "" |
32 |
## OK mksh status: 1 |
33 |
|
34 |
#### Incomplete if |
35 |
echo hi; if |
36 |
echo status=$? |
37 |
## status: 2 |
38 |
## stdout-json: "" |
39 |
## OK mksh status: 1 |
40 |
|
41 |
#### do unexpected |
42 |
do echo hi |
43 |
## status: 2 |
44 |
## stdout-json: "" |
45 |
## OK mksh status: 1 |
46 |
|
47 |
#### } is a parse error |
48 |
} |
49 |
echo should not get here |
50 |
## stdout-json: "" |
51 |
## status: 2 |
52 |
## OK mksh status: 1 |
53 |
|
54 |
#### { is its own word, needs a space |
55 |
# bash and mksh give parse time error because of } |
56 |
# dash gives 127 as runtime error |
57 |
{ls; } |
58 |
echo "status=$?" |
59 |
## stdout-json: "" |
60 |
## status: 2 |
61 |
## OK mksh status: 1 |
62 |
|
63 |
#### } on the second line |
64 |
set -o errexit |
65 |
{ls; |
66 |
} |
67 |
## status: 127 |
68 |
|
69 |
#### Invalid for loop variable name |
70 |
for i.j in a b c; do |
71 |
echo hi |
72 |
done |
73 |
echo done |
74 |
## stdout-json: "" |
75 |
## status: 2 |
76 |
## OK mksh status: 1 |
77 |
## OK bash status: 0 |
78 |
## BUG bash stdout: done |
79 |
|
80 |
#### bad var name globally isn't parsed like an assignment |
81 |
# bash and dash disagree on exit code. |
82 |
FOO-BAR=foo |
83 |
## status: 127 |
84 |
|
85 |
#### bad var name in export |
86 |
# bash and dash disagree on exit code. |
87 |
export FOO-BAR=foo |
88 |
## status: 1 |
89 |
## OK dash status: 2 |
90 |
|
91 |
#### bad var name in local |
92 |
# bash and dash disagree on exit code. |
93 |
f() { |
94 |
local FOO-BAR=foo |
95 |
} |
96 |
f |
97 |
## status: 1 |
98 |
## OK dash status: 2 |
99 |
|
100 |
#### misplaced parentheses are not a subshell |
101 |
echo a(b) |
102 |
## status: 2 |
103 |
## OK mksh status: 1 |
104 |
|
105 |
#### incomplete command sub |
106 |
$(x |
107 |
## status: 2 |
108 |
## OK mksh status: 1 |
109 |
|
110 |
#### incomplete backticks |
111 |
`x |
112 |
## status: 2 |
113 |
## OK mksh status: 1 |
114 |
|
115 |
#### misplaced ;; |
116 |
echo 1 ;; echo 2 |
117 |
## stdout-json: "" |
118 |
## status: 2 |
119 |
## OK mksh status: 1 |
120 |
|
121 |
#### empty clause in [[ |
122 |
# regression test for commit 451ca9e2b437e0326fc8155783d970a6f32729d8 |
123 |
[[ || true ]] |
124 |
## status: 2 |
125 |
## N-I dash status: 0 |
126 |
## OK mksh status: 1 |
127 |
|
128 |
#### interactive parse error (regression) |
129 |
flags='' |
130 |
case $SH in |
131 |
*bash|*osh) |
132 |
flags='--rcfile /dev/null' |
133 |
;; |
134 |
esac |
135 |
$SH $flags -i -c 'var=)' |
136 |
|
137 |
## status: 2 |
138 |
## OK bash/mksh status: 1 |
139 |
|
140 |
#### array literal inside array is a parse error |
141 |
a=( inside=() ) |
142 |
echo len=${#a[@]} |
143 |
## status: 2 |
144 |
## stdout-json: "" |
145 |
## OK mksh status: 1 |
146 |
## BUG bash status: 0 |
147 |
## BUG bash stdout: len=0 |
148 |
|
149 |
#### array literal inside loop is a parse error |
150 |
f() { |
151 |
for x in a=(); do |
152 |
echo $x |
153 |
done |
154 |
echo done |
155 |
} |
156 |
## status: 2 |
157 |
## stdout-json: "" |
158 |
## OK mksh status: 1 |
159 |
|
160 |
#### array literal in case |
161 |
f() { |
162 |
case a=() in |
163 |
foo) |
164 |
echo hi |
165 |
;; |
166 |
esac |
167 |
} |
168 |
## status: 2 |
169 |
## stdout-json: "" |
170 |
## OK mksh status: 1 |
171 |
|
172 |
#### %foo=() is parse error (regression) |
173 |
|
174 |
# Lit_VarLike and then (, but NOT at the beginning of a word. |
175 |
|
176 |
f() { |
177 |
%foo=() |
178 |
} |
179 |
## status: 2 |
180 |
## stdout-json: "" |
181 |
## OK mksh status: 1 |
182 |
|
183 |
#### leading =word is not allowed regardless of shopt -s parse_equals |
184 |
=word |
185 |
## OK osh status: 2 |
186 |
## status: 127 |
187 |
|
188 |
#### echo =word is allowed |
189 |
echo =word |
190 |
## STDOUT: |
191 |
=word |
192 |
## END |