1 | #!/bin/bash |
2 | |
3 | ### Locals don't leak |
4 | f() { |
5 | local f_var=f_var |
6 | } |
7 | f |
8 | echo $f_var |
9 | # stdout: |
10 | |
11 | ### Globals leak |
12 | f() { |
13 | f_var=f_var |
14 | } |
15 | f |
16 | echo $f_var |
17 | # stdout: f_var |
18 | |
19 | ### Return statement |
20 | f() { |
21 | echo one |
22 | return 42 |
23 | echo two |
24 | } |
25 | f |
26 | # stdout: one |
27 | # status: 42 |
28 | |
29 | ### Return at top level is error |
30 | return |
31 | echo bad |
32 | # N-I dash/mksh status: 0 |
33 | # N-I bash status: 0 |
34 | # N-I bash stdout: bad |
35 | # status: 1 |
36 | # stdout-json: "" |
37 | |
38 | ### Dynamic Scope |
39 | f() { |
40 | echo $g_var |
41 | } |
42 | g() { |
43 | local g_var=g_var |
44 | f |
45 | } |
46 | g |
47 | # stdout: g_var |
48 | |
49 |