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 S001. Use GitHub "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally