3 SC2195
koalaman edited this page 2016-12-29 14:58:18 -08:00

This pattern will never match the case statement's word. Double check them.

Problematic code:

case "$var " in      # Trailing space
  value) echo "Match"
esac

Correct code:

case "${var}" in     # No trailing space
  value) echo "Match"
esac

Rationale:

ShellCheck has detected that one of the patterns in a case statement will never match.

Often, this is due to mistakes in the case statement word that results in unintended literal characters. In the problematic code, there's a trailing space that will prevent the match from ever succeeding.

For more examples of when this could happen, see SC2193 for the equivalent warning for [[ .. ]] statements.

Note that ShellCheck warns about individual patterns in a branch, and will flag *.png in this example even though the branch is not dead:

case "${img}.jpg" in
  *.png | *.jpg) echo "It's an image"
esac

Exceptions:

None. If you encounter a bug and wish to ignore this warning, make sure the directive goes in front of the case and not the individual branch.