Arithmetic Expressions

The let command performs arithmetic. Bash is restricted to integer arithmetic. The shell provides a way to substitute arithmetic values (for use as command arguments or in variables); base conversion is also possible:

$(( expr ))

Use the value of the enclosed arithmetic expression.

B#n

Interpret integer n in numeric base B. For example, 8#100 specifies the octal equivalent of decimal 64.

Operators

The shell uses arithmetic operators from the C programming language, in decreasing order of precedence.

Operator

Description

++ --

Auto-increment and auto-decrement, both prefix and postfix

+ -

Unary plus and minus

! ~

Logical negation and binary inversion (one’s complement)

**

Exponentiation[a]

* / %

Multiplication, division, modulus (remainder)

+ -

Addition, subtraction

<< >>

Bitwise left shift, bitwise right shift

< <= > >=

Less than, less than or equal to, greater than, greater than or equal to

== !=

Equality, inequality (both evaluated left to right)

&

Bitwise AND

^

Bitwise exclusive OR

|

Bitwise OR

&&

Logical AND (short circuit)

||

Logical OR (short circuit)

?:

Inline conditional evaluation

= += -=

 

*= /= %=

 

<<= >>=

Assignment

&= ^= |=

 

,

Sequential expression evaluation

[a] The ** operator is right-associative. Prior to version 3.1, it was left-associative.

Examples

let "count=0" "i = i + 1"       Assign values to i and count
let "num % 2"                   Exit successfully if num is even
(( percent >= 0 && \
   percent <= 100 ))            Test the range of a value ...

Get bash Pocket Reference now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.