---
tags:
  - shell
---

# Formatting output text in Bash

We can use the `-e` flag with `echo` to have greater control over the output of
text. `-e` allows us to use linebreaks, tabs and other formattings within a
string.

## Output text in columns

```bash
echo -e  "Name\t\tNumber"; echo -e "Thomas\t\t123";

Name		Number
Thomas		123
```

## Break text over several lines

```bash
echo -e "This text\nbreaks over\nthree lines"

This text
breaks over
three lines
```

## Colour outputs

![](static/terminal_colours.png)

```bash
echo -e "\033[31;40mColoured Text\033[0m"
```

The coloured section is prepended by `\033[` and ended with `[0m`. The
foreground colour is given first, and then the background colour.

We can also change the text style. We do this by adding an extra value after the
first square bracket:

```bash
echo -e "\033[4;31;40mColoured Text\033[0m"
```

This underlines the output.

We can create a script that simplifies the construction of colour-formatted
text, e.g

```bash
ulinered="\033[4;31;40m"
red="\033[31;40m"
none="\033[0m"

echo -e $ulinered"ERROR:"$none$red" Something went wrong."$none
```
