1 |
#!/bin/bash |
2 |
|
3 |
### implicit for loop |
4 |
# This is like "for i in $@". |
5 |
func() { |
6 |
for i; do |
7 |
echo $i |
8 |
done |
9 |
} |
10 |
func 1 2 3 |
11 |
# stdout-json: "1\n2\n3\n" |
12 |
|
13 |
### empty for loop (has "in") |
14 |
set -- 1 2 3 |
15 |
for i in ; do |
16 |
echo $i |
17 |
done |
18 |
# stdout-json: "" |
19 |
# BUG mksh stdout-json: "1\n2\n3\n" |
20 |
|
21 |
### for loop with invalid identifier |
22 |
# should be compile time error, but runtime error is OK too |
23 |
for - in a b c; do |
24 |
echo hi |
25 |
done |
26 |
# stdout-json: "" |
27 |
# status: 2 |
28 |
# OK bash/mksh status: 1 |
29 |
|
30 |
### using loop var outside loop |
31 |
func() { |
32 |
for i in a b c; do |
33 |
echo $i |
34 |
done |
35 |
echo $i |
36 |
} |
37 |
func |
38 |
# stdout-json: "a\nb\nc\nc\n" |
39 |
|
40 |
### continue |
41 |
for i in a b c; do |
42 |
echo $i |
43 |
continue |
44 |
echo $i |
45 |
done |
46 |
# stdout-json: "a\nb\nc\n" |
47 |
|
48 |
### break |
49 |
for i in a b c; do |
50 |
echo $i |
51 |
break |
52 |
done |
53 |
# stdout: a |
54 |
|
55 |
### while in while condition |
56 |
# This is a consequence of the grammar |
57 |
while while true; do echo cond; break; done |
58 |
do |
59 |
echo body |
60 |
break |
61 |
done |
62 |
# stdout-json: "cond\nbody\n" |
63 |
|
64 |
### while in pipe |
65 |
i=0 |
66 |
find tests/ | while read $path; do |
67 |
i=$((i+1)) |
68 |
#echo $i |
69 |
done |
70 |
# This Because while loop was in a subshell |
71 |
echo $i |
72 |
# stdout: 0 |
73 |
|
74 |
### while in pipe with subshell |
75 |
i=0 |
76 |
find bin/ -type f | ( while read path; do |
77 |
i=$((i+1)) |
78 |
#echo $i |
79 |
done |
80 |
echo $i ) |
81 |
# stdout: 1 |
82 |
|
83 |
### until loop |
84 |
# This is just the opposite of while? while ! cond? |
85 |
until false; do |
86 |
echo hi |
87 |
break |
88 |
done |
89 |
# stdout: hi |