# Math

Sometimes, you just need to add a few numbers when you're working on a task. Nu offers a set of basic math operations that you can use. Math expressions are available wherever you can call a command.

# Add, Subtract, Multiply, Divide

> 1 + 3
4

In Nu, you can do the usual add, subtract, multiply and divide with the operators +, -, *, and / respectively. Operator precedence is respected, so 1 + 2 * 3 will be treated as 1 + (2 * 3). Which leads us to another concept: parentheses.

# Parentheses

You can use parentheses to group math expression in math mode. This allows you to write (1 + 2) * 3 if you want the addition to have higher precedence.

# in and not-in

You can check if a value is in a set of values or not using the in and not-in operators.

> 1 in [1 2 3]
true
> 1 not-in [1 2 3]
false

# =~ and !~

You can check to see if a string is inside of another string, or not inside of another string, using =~ and !~.

> "foobar" =~ "foo"
true
> "foobar" !~ "baz"
true

# Comparisons

The following comparisons are also available:

  • < - less than
  • <= - less than or equal to
  • > - greater than
  • >= - greater than or equal to
  • == - equal to
  • != - not equal to

# Compound operators

Nushell also supports && and || to join two operations that return boolean values, using 'and' and 'or' respectively. For example: ls | where name in ["one" "two" "three"] && size > 10kb

# Order of operations

Math operations are evaluated in the follow order (from highest precedence to lowest):

  • Parentheses (())
  • Multiply (*) and Divide (/)
  • Add (+) and Subtract (-)
> 3 * (1 + 2)
9

# Short-hand math mode

A variation of math mode that Nushell supports is called "short-hand" math mode. This is because it gives you a way of accessing columns using a simple short-hand.

You may have already used this functionality before. If, for example, we wanted to only see rows from ls where the entry is at least ten kilobytes, we can write:

> ls | where size > 10kb

The where size > 10kb is a command with two parts: the command name where and the short-hand math expression size > 10kb. We say short-hand because size here is the shortened version of writing $it.size. If we look at the fully expanded form, we would see:

> ls | where {|$it| $it.size > 10kb }

Rather than having to type all this out every time a command needs to work with column data, we use this short-hand mode to access column data.

For the expansion to work, the column name must appear on the left-hand side of the operation. Above, size appears on the left-hand side of the comparison, which allows the expression to expand into the full math mode block.