1 |
#!/usr/bin/env bash |
2 |
|
3 |
#### Incomplete Function |
4 |
## code: foo() |
5 |
## status: 2 |
6 |
## BUG mksh status: 0 |
7 |
|
8 |
#### Incomplete Function 2 |
9 |
## code: foo() { |
10 |
## status: 2 |
11 |
## OK mksh status: 1 |
12 |
|
13 |
#### Bad function |
14 |
## code: foo(ls) |
15 |
## status: 2 |
16 |
## OK mksh status: 1 |
17 |
|
18 |
#### Unbraced function body. |
19 |
# dash allows this, but bash does not. The POSIX grammar might not allow |
20 |
# this? Because a function body needs a compound command. |
21 |
# function_body : compound_command |
22 |
# | compound_command redirect_list /* Apply rule 9 */ |
23 |
## code: one_line() ls; one_line; |
24 |
## status: 0 |
25 |
## OK bash/osh status: 2 |
26 |
|
27 |
#### Function with spaces, to see if ( and ) are separate tokens. |
28 |
# NOTE: Newline after ( is not OK. |
29 |
func ( ) { echo in-func; }; func |
30 |
## stdout: in-func |
31 |
|
32 |
#### subshell function |
33 |
# bash allows this. |
34 |
i=0 |
35 |
j=0 |
36 |
inc() { i=$((i+5)); } |
37 |
inc_subshell() ( j=$((j+5)); ) |
38 |
inc |
39 |
inc_subshell |
40 |
echo $i $j |
41 |
## stdout: 5 0 |
42 |
|
43 |
#### Hard case, function with } token in it |
44 |
rbrace() { echo }; }; rbrace |
45 |
## stdout: } |
46 |
|
47 |
#### . in function name |
48 |
# bash accepts; dash doesn't |
49 |
func-name.ext ( ) { echo func-name.ext; } |
50 |
func-name.ext |
51 |
## stdout: func-name.ext |
52 |
## OK dash status: 2 |
53 |
## OK dash stdout-json: "" |
54 |
|
55 |
#### = in function name |
56 |
# WOW, bash is so lenient. foo=bar is a command, I suppose. I think I'm doing |
57 |
# to disallow this one. |
58 |
func-name=ext ( ) { echo func-name=ext; } |
59 |
func-name=ext |
60 |
## stdout: func-name=ext |
61 |
## OK dash status: 2 |
62 |
## OK dash stdout-json: "" |
63 |
## OK mksh status: 1 |
64 |
## OK mksh stdout-json: "" |
65 |
|
66 |
#### Function name with $ |
67 |
# bash allows this; dash doesn't. |
68 |
foo$bar() { ls ; } |
69 |
## status: 2 |
70 |
## OK bash/mksh status: 1 |
71 |
|
72 |
#### Function name with ! |
73 |
# bash allows this; dash doesn't. |
74 |
foo!bar() { ls ; } |
75 |
## status: 0 |
76 |
## OK dash status: 2 |
77 |
|
78 |
#### Function name with - |
79 |
# bash allows this; dash doesn't. |
80 |
foo-bar() { ls ; } |
81 |
## status: 0 |
82 |
## OK dash status: 2 |
83 |
|
84 |
#### Break after ) is OK. |
85 |
# newline is always a token in "normal" state. |
86 |
echo hi; func ( ) |
87 |
{ echo in-func; } |
88 |
func |
89 |
## stdout-json: "hi\nin-func\n" |
90 |
|
91 |
#### Nested definition |
92 |
# A function definition is a command, so it can be nested |
93 |
func() { |
94 |
nested_func() { echo nested; } |
95 |
nested_func |
96 |
} |
97 |
func |
98 |
## stdout: nested |
99 |
|