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 |
### Tilde expansion within for loop |
31 |
HOME=/home/bob |
32 |
for name in ~/src ~/git; do |
33 |
echo $name |
34 |
done |
35 |
# stdout-json: "/home/bob/src\n/home/bob/git\n" |
36 |
|
37 |
### Brace Expansion within Array |
38 |
for i in -{a,b} {c,d}-; do |
39 |
echo $i |
40 |
done |
41 |
# stdout-json: "-a\n-b\nc-\nd-\n" |
42 |
# N-I dash stdout-json: "-{a,b}\n{c,d}-\n" |
43 |
|
44 |
### using loop var outside loop |
45 |
func() { |
46 |
for i in a b c; do |
47 |
echo $i |
48 |
done |
49 |
echo $i |
50 |
} |
51 |
func |
52 |
# stdout-json: "a\nb\nc\nc\n" |
53 |
|
54 |
### continue |
55 |
for i in a b c; do |
56 |
echo $i |
57 |
continue |
58 |
echo $i |
59 |
done |
60 |
# stdout-json: "a\nb\nc\n" |
61 |
|
62 |
### break |
63 |
for i in a b c; do |
64 |
echo $i |
65 |
break |
66 |
done |
67 |
# stdout: a |
68 |
|
69 |
### while in while condition |
70 |
# This is a consequence of the grammar |
71 |
while while true; do echo cond; break; done |
72 |
do |
73 |
echo body |
74 |
break |
75 |
done |
76 |
# stdout-json: "cond\nbody\n" |
77 |
|
78 |
### while in pipe |
79 |
i=0 |
80 |
find tests/ | while read $path; do |
81 |
i=$((i+1)) |
82 |
#echo $i |
83 |
done |
84 |
# This Because while loop was in a subshell |
85 |
echo $i |
86 |
# stdout: 0 |
87 |
|
88 |
### while in pipe with subshell |
89 |
i=0 |
90 |
find bin/ -type f | ( while read path; do |
91 |
i=$((i+1)) |
92 |
#echo $i |
93 |
done |
94 |
echo $i ) |
95 |
# stdout: 1 |
96 |
|
97 |
### until loop |
98 |
# This is just the opposite of while? while ! cond? |
99 |
until false; do |
100 |
echo hi |
101 |
break |
102 |
done |
103 |
# stdout: hi |