Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 2 revisions

Use || instead of -o between test commands.

And variations, like "Use && instead of and".

Problematic code:

if [ "$1" = "-v" ] -o [ -n "$VERBOSE" ]
then
  echo "Verbose log"
fi

Correct code:

if [ "$1" = "-v" ] || [ -n "$VERBOSE" ]
then
  echo "Verbose log"
fi

Rationale:

You have a [ .. ] or [[ .. ]] test expression followed by -o/-a (or by Python-style or/and).

-o and -a work inside [ .. ], but they do not work between them. The Python operators or and and are never recognized in Bash.

To join two separate test expressions, instead use || for "logical OR", or && for "logical AND".

Exceptions:

None

Related resources:

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally