Understanding Terraform Escape Sequences

In this blog post share with you another fascinating aspect of Terraform - escape sequences. I remember when I first learned about escape sequences, and the moment it all clicked was magical. So, let's get ready to dive in!

Just like in any language, escape sequences in Terraform are our way of communicating non-graphic characters or characters with special meanings. We often find them in string literals, surrounded by a backslash ().

Today, I will take you through various Terraform escape sequences, and we'll see them in action together.


Table of Content

  1. Newline (\n): Escape Sequences
  2. Tab (\t): Escape Sequences
  3. Double Quote ("): Escape Sequences
  4. Backslash (): Escape Sequences
  5. Dollar Sign ($): Escape Sequences
  6. Percent Sign (%): Escape Sequences
  7. Using Escape Sequences in Interpolations
  8. Escape Sequences in Heredoc Strings
  9. Conclusion

1. Newline (\n): Escape Sequences

Do you know the good old enter key that we often hit to break our paragraphs? \n does precisely that in our terraform output text. Here's an example:

1output "example" {
2  
3  # Add a line break between Line 1 and Line 2
4  
5  value = "Line1\nLine2"
6}

Output:

1# Line 1 and Line 2 are printed in separate line 
2
3Line1
4Line2 

2. Tab (\t): Escape Sequences

Remember when we were writing essays, and we needed a tab space? \t is our go-to escape sequence for that. Let's try it out:

1output "example" {
2  
3  # Putting tab between Column1 and tColumn2
4  value = "Column1\tColumn2"
5} 

Output:

1# There is tab in between tab1 and tab2
2Column1  Column2 

3. Double Quote ("): Escape Sequences

Want to include a double quote character inside a string that's also surrounded by double quotes? We've got an escape sequence for that!

1output "example" {
2  value = "This is an \"example\" string."
3} 

Output:

1# The word example is with double quoted 
2
3This is an "example" string. 

4. Backslash (\): Escape Sequences

And of course, if we need to include a literal backslash, we have the escape sequence \:

1# Insert black slash in a string 
2 
3output "example" {
4  value = "This is a \\ backslash."
5}

Output:

1# Here is the string containing the backslash 
2
3This is a \ backslash. 

5. Dollar Sign ($): Escape Sequences

The dollar sign $ is a bit special. It introduces the interpolation syntax in Terraform. So, when we need to have a literal dollar sign in our strings, we double it like so $$:

1# We need to $$ two times to escape the dollar sign
2
3output "example" {
4  value = "This item costs $$10."
5}

Output:

1# Here is the string with dollar sign after did the escape sequence on $
2
3This item costs $10.
4 

6. Percent Sign (%): Escape Sequences

And last but not least, the percent sign %. Terraform did not require us to escape it within strings. However, when using printf style formatting within strings, we may need to escape percent signs by doubling them (%%):

1# Here is a string with % sign printed in the string
2
3output "example" {
4  value = "This operation completed 100%% successfully."
5}
6 

Output:

1# Output of the string with % percent sign
2
3This operation completed 100% successfully. 

7. Using Escape Sequences in Interpolations

Interpolation is a crucial concept in Terraform. It involves inserting expressions within string literals to create dynamic outputs.

Let's consider an example where we have a user variable, and we want to interpolate it with a string, using a newline (\n) escape sequence for formatting:

1variable "user" {
2  default = "John Doe"
3}
4
5output "message" {
6  value = "Hello, ${var.user}\nWelcome to Terraform."
7}
8 

When you run this configuration, the output would be:

1Hello, John Doe
2Welcome to Terraform. 

As show in the above example the other escape sequences such as (Tab (\t), Double Quote ("), Dollar Sign ($), Percent Sign (%)) can also be used within string literal.


8. Escape Sequences in Heredoc Strings

Heredoc strings in Terraform allow you to create multi-line strings, which is particularly useful when scripting or whenever a string includes several lines. The good news is that heredoc strings in Terraform also support the escape sequences.

1# Adding \n escape character in Heredoc string 
2
3output "example" {
4  value = <<EOF
5  Line1\nLine2
6  EOF
7}
8 

But wait! The \n in the heredoc string won't work as an escape sequence, because the default behavior of heredoc strings is to interpret escape sequences literally.

To make escape sequences work in a heredoc string, you should use the <<-EOF indicator instead:

1output "example" {
2  value = <<-EOF
3  Line1\nLine2
4  EOF
5}
6 

Now, when you run this configuration, you'll get:

1Line1
2Line2

Conclusion

We've now journeyed through using escape sequences in Terraform as well as using those escape sequences in interpolations and heredoc strings.

As always, remember to practice using these in your own Terraform scripts to get the hang of it. Understanding these finer details can significantly enhance the clarity and readability of your Terraform code. Enjoy coding!


Posts in this Series