[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

The shell allows arithmetic expressions to be evaluated, as one of
the shell expansions or by the `let`

builtin.

Evaluation is done in long integers with no check for overflow, though division by 0 is trapped and flagged as an error. The operators and their precedence and associativity are the same as in the C language. The following list of operators is grouped into levels of equal-precedence operators. The levels are listed in order of decreasing precedence.

`id`++`id`--- variable post-increment and post-decrement
`++`

`id`--`id`- variable pre-increment and pre-decrement
`- +`

- unary minus and plus
`! ~`

- logical and bitwise negation
`**`

- exponentiation
`* / %`

- multiplication, division, remainder
`+ -`

- addition, subtraction
`<< >>`

- left and right bitwise shifts
`<= >= < >`

- comparison
`== !=`

- equality and inequality
`&`

- bitwise AND
`^`

- bitwise exclusive OR
`|`

- bitwise OR
`&&`

- logical AND
`||`

- logical OR
`expr ? expr : expr`

- conditional evaluation
`= *= /= %= += -= <<= >>= &= ^= |=`

- assignment
`expr1 , expr2`

- comma

Shell variables are allowed as operands; parameter expansion is performed before the expression is evaluated. Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced. A shell variable need not have its integer attribute turned on to be used in an expression.

Constants with a leading 0 are interpreted as octal numbers.
A leading ``0x'` or ``0X'` denotes hexadecimal. Otherwise,
numbers take the form [`base``#`

]`n`, where `base`
is a decimal number between 2 and 64 representing the arithmetic
base, and `n` is a number in that base. If `base``#`

is
omitted, then base 10 is used.
The digits greater than 9 are represented by the lowercase letters,
the uppercase letters, ``@'`, and ``_'`, in that order.
If `base` is less than or equal to 36, lowercase and uppercase
letters may be used interchangably to represent numbers between 10
and 35.

Operators are evaluated in order of precedence. Sub-expressions in parentheses are evaluated first and may override the precedence rules above.

[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

This document was generated on