diff --git a/SC2218.md b/SC2218.md new file mode 100644 index 0000000..efb39e9 --- /dev/null +++ b/SC2218.md @@ -0,0 +1,45 @@ +## This function is only defined later. Move the definition up. + +### Problematic code: + +```sh +#!/bin/sh +myfunction + +myfunction() { + echo "Hello World" +} +``` + +### Correct code: + +```sh +#!/bin/sh +myfunction() { + echo "Hello World" +} +myfunction +``` + +### Rationale: + +You are calling a function that you are defining later in the file. The function definition must come first. + +Function definitions are much like variable assignments, and define a name at the point the definition is "executed". This is why they must happen before their first use. + +This is especially apparent when defining functions conditionally: + +``` +case "$(uname -s)" in + Linux) hi() { echo "Hello from Linux"; } ;; + Darwin) hi() { echo "Hello from macOS"; } ;; + *) hi() { echo "Hello from something else"; } ;; +esac + +hi +``` + + +### Exceptions: + +None. \ No newline at end of file