A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/koalaman/shellcheck/wiki/SC2221 below:

SC2221 · koalaman/shellcheck Wiki · GitHub

This pattern always overrides a later one.
case "$1" in
  -?) echo "Usage: $0 [-n]";;
  -n) echo "Hello World";;
   *) exit 1;;
esac
case "$1" in
  -\?) echo "Usage: $0 [-n]";;
# '-?') echo "Usage: $0 [-n]";;  # Also valid
  -n) echo "Hello World";;
   *) exit 1;;
esac

You have specified multiple patterns in a case statement, where one will always override the other. The pattern being overridden is indicated with a SC2222 warning.

In the example, -? actually matches a dash followed by any character, such as -n. This means that the later -n branch will never trigger. In this case, the correct solution is to escape the -\? so that it doesn't match -n.

Another common reason for this is accidentally duplicating a branch. In this case, fix or delete the duplicate branch.

None. One could argue that having -*|--*) echo "Invalid flag"; is a readability issue, even though the second pattern follows from the first. In this case, you can either rearrange the pattern from most to least specific, i.e. --*|-*) or ignore the error.

When ignoring this error, remember that ShellCheck directives have to go in front of the case statement, and not in front of the branch:

# shellcheck disable=SC2221,SC2222
case "$1" in
  -n) ...;;
  # no directive here
  -*|--*) echo "Unknown flag" ;;
esac

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4