Skip to content
Vidar Holen edited this page Jun 28, 2018 · 1 revision

Use $((..)) for arithmetics, e.g. i=$((i + 2))

Problematic code:

i=3
i=i + 2

Correct code:

i=3
i=$((i + 2))

Rationale:

Unlike most languages, variable assignments in shell scripts are space sensitive and (almost) always assign strings.

To evaluate a mathematical expressions, use $((..)) as in the correct code:

i=$((i + 2))   # Spaces are fine inside $((...))

In the problematic code, i=i + 2 will give an error +: command not found because the expression is interpreted similar to something like LC_ALL=C wc -c instead of numerical addition:

 Prefix assignment    Command  Argument
 LC_ALL=C             wc       -c
 i=i                  +        2

Exceptions:

If you wanted to assign a literal string, quote it:

game_score="0 - 2"

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