Shell

Shell

Made by DeepSource

Function definition missing body SH-1064

Bug risk
Major

Problematic code:

foo() {
  echo "hello world"
}
foo()

Preferred code:

foo() {
  echo "hello world"
}
foo

Detected a statement that appears to be the start of a function definition, but is missing the function body. One common cause is that you are trying to call a function by appending parentheses, e.g. foo() like in C. Bash does not use or allow parentheses after a function name to call it. The function foo should be called using just foo like in the example above.

If you are declaring a function, make sure it looks like the correct code above, and that it does not try to declare any parameters (parameters are instead accessed with $1 and up). If you are trying to do something else, look up the syntax for what you are trying to do.

Exceptions:

POSIX allows the body of a function to be any compound command, e.g. foo() for i; do :; done. Since this usage is rare, ShellCheck intentionally requires the body to be { ..; } (or ( ..; )):

foo() {
  for i; do :; done
}

This additional structure requirement helps improve error messages and suggestions by not parsing down a path that users who are not familiar with it wouldn't expect.