SC3062 – ShellCheck Wiki

See this page on GitHub

Sitemap


In POSIX sh, unary -o to check options is undefined.

Problematic code:

if [ -o braceexpand ]
then
 echo "Brace expansion available and enabled."
fi

Correct code:

$- will be set to a list of shell options:

case $- of
  *B*) echo "Brace expansion available and enabled."
esac 

However, not all options are available through $-. If you need to check those, ignore this suggestion with a directive:

# shellcheck disable=SC3062
if [ -n "$BASH_VERSION" ] && [ -o pipefail ]
then
  echo "This is bash and pipefail is enabled."
fi

Rationale:

[ -o option ] is a bash/ksh extension, while $- is standard POSIX. Do note that letters outside the POSIX set are not guaranteed to be compatible, such as B above.

Exceptions:

As described.


ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.