---
page_title: Expressions Landing Page - Configuration Language
---

# Expressions Landing Page

To improve navigation, we've split the old Expressions page into several smaller
pages.

<a id="types-and-values"></a> <a id="advanced-type-details"></a> <a id="type-conversion"></a> <a id="literal-expressions"></a> <a id="indices-and-attributes"></a>

## Types and Values, Literal Expressions, Indices and Attributes

Terraform's types are `string`, `number`, `bool`, `list`, `tuple`, `map`,
`object`, and `null`.

This information has moved to
[Types and Values](/language/expressions/types).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="references-to-named-values"></a> <a id="local-named-values"></a> <a id="named-values-and-dependencies"></a> <a id="references-to-resource-attributes"></a> <a id="local-named-values-1"></a> <a id="values-not-yet-known"></a>

## References to Named Values (Resource Attributes, Variables, etc.)

You can refer to certain values by name, like `var.some_variable` or
`aws_instance.example.ami`.

This information has moved to
[References to Values](/language/expressions/references).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="arithmetic-operators"></a> <a id="equality-operators"></a> <a id="comparison-operators"></a> <a id="logical-operators"></a>

## Arithmetic and Logical Operators

Operators are expressions that transform other expressions, like adding two
numbers (`+`) or comparing two values to get a bool (`==`, `>=`, etc.).

This information has moved to
[Operators](/language/expressions/operators).

<div style={{height: '30vh', margin: 0, padding: 0}} />

## Conditional Expressions

The `condition ? true_val : false_val` expression chooses between two
expressions based on a bool condition.

This information has moved to
[Conditional Expressions](/language/expressions/conditionals).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="expanding-function-arguments"></a> <a id="available-functions"></a>

## Function Calls

Terraform's functions can be called like `function_name(arg1, arg2)`.

This information has moved to
[Function Calls](/language/expressions/function-calls).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="for-expressions"></a>

## `for` Expressions

Expressions like `[for s in var.list : upper(s)]` can transform a complex type
value into another complex type value.

This information has moved to
[For Expressions](/language/expressions/for).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="splat-expressions"></a> <a id="legacy-attribute-only-splat-expressions"></a>

## Splat Expressions

Expressions like `var.list[*].id` can extract simpler collections from complex
collections.

This information has moved to
[Splat Expressions](/language/expressions/splat).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="dynamic-blocks"></a> <a id="best-practices-for-dynamic-blocks"></a>

## `dynamic` Blocks

The special `dynamic` block type serves the same purpose as a `for` expression,
except it creates multiple repeatable nested blocks instead of a complex value.

This information has moved to
[Dynamic Blocks](/language/expressions/dynamic-blocks).

<div style={{height: '30vh', margin: 0, padding: 0}} />

<a id="string-literals"></a> <a id="string-templates"></a> <a id="interpolation"></a> <a id="directives"></a>

## String Literals and String Templates

Strings can be `"double-quoted"` or

```hcl
<<EOT
heredocs
EOT
```

Strings can also include escape sequences like `\n`, interpolation sequences
(`${ ... }`), and template sequences (`%{ ... }`).

This information has moved to
[Strings and Templates](/language/expressions/strings).

<div style={{height: '30vh', margin: 0, padding: 0}} />
