# Operators

table-operators lists the operators in the Nix expression language, in order of precedence (from strongest to weakest binding).

## Operators

Name | Syntax | Associativity | Description | Precedence
Select | `e` `.` `attrpath` [ `or` `def` ] | none | Select attribute denoted by the attribute path `attrpath` from set `e`. (An attribute path is a dot-separated list of attribute names.) If the attribute doesn’t exist, return `def` if provided, otherwise abort evaluation. | 1
Application | `e1` `e2` | left | Call function `e1` with argument `e2`. | 2
Arithmetic Negation | `-` `e` | none | Arithmetic negation. | 3
Has Attribute | `e` `?` `attrpath` | none | Test whether set `e` contains the attribute denoted by `attrpath`; return `true` or `false`. | 4
List Concatenation | `e1` `++` `e2` | right | List concatenation. | 5
Multiplication | `e1` `*` `e2`, | left | Arithmetic multiplication. | 6
Division | `e1` `/` `e2` | left | Arithmetic division. | 6
Addition | `e1` `+` `e2` | left | Arithmetic addition. | 7
Subtraction | `e1` `-` `e2` | left | Arithmetic subtraction. | 7
String Concatenation | `string1` `+` `string2` | left | String concatenation. | 7
Not | `!` `e` | none | Boolean negation. | 8
Update | `e1` `//` `e2` | right | Return a set consisting of the attributes in `e1` and `e2` (with the latter taking precedence over the former in case of equally named attributes). | 9
Less Than | `e1` `<` `e2`, | none | Arithmetic comparison. | 10
Less Than or Equal To | `e1` `<=` `e2` | none | Arithmetic comparison. | 10
Greater Than | `e1` `>` `e2` | none | Arithmetic comparison. | 10
Greater Than or Equal To | `e1` `>=` `e2` | none | Arithmetic comparison. | 10
Equality | `e1` `==` `e2` | none | Equality. | 11
Inequality | `e1` `!=` `e2` | none | Inequality. | 11
Logical AND | `e1` `&&` `e2` | left | Logical AND. | 12
Logical OR | `e1` `||` `e2` | left | Logical OR. | 13
Logical Implication | `e1` `->` `e2` | none | Logical implication (equivalent to `!`e1` || `e2``). | 14