Skip to content

Latest commit

 

History

History
57 lines (44 loc) · 1.45 KB

SC1123.md

File metadata and controls

57 lines (44 loc) · 1.45 KB

Pattern: Invalid shellcheck directive for non-command keyword

Issue: -

Description

You appear to have put a directive before a non-command keyword, such as elif, else, do, ;; or similar.

ShellCheck comment directives apply to the next shell command, rather than to the next line of text. This means that you can put a directive in front of a while loop, if statement or function definition, and it will apply to that entire structure.

However, it also means that you cannot apply the directive to non-commands like an individual elif or else block since these are not commands by themselves, and rather just parts of an if compound command.

Please move the directive in front of the nearest applicable command that contains the code you want to apply it to, such as before the if.

Example of incorrect code:

if [ "$prod" = "true" ]
then
  echo "Prod mode"
# shellcheck disable=2154
elif [ "$debug" = "true" ]
then
  echo "Debug mode"
fi

Example of correct code:

# Applies to entire `if...fi` command
# shellcheck disable=2154
if [ "$prod" = "true" ]
then
  echo "Prod mode"
elif [ "$debug" = "true" ]
then
  echo "Debug mode"
fi

or

if [ "$prod" = "true" ]
then
  echo "Prod mode"
elif  # Applies only to this [ .. ] command
      # shellcheck disable=2154
      [ "$debug" = "true" ]
then
  echo "Debug mode"
fi

Further Reading