How does one output bold text in Bash? – Dev

The best answers to the question “How does one output bold text in Bash?” in the category Dev.


I’m writing a Bash script that prints some text to the screen:

echo "Some Text"

Can I format the text? I would like to make it bold.


In order to apply a style on your string, you can use a command like:

echo -e '\033[1mYOUR_STRING\033[0m'


  • echo -e – The -e option means that escaped (backslashed) strings will be interpreted
  • \033 – escaped sequence represents beginning/ending of the style
  • lowercase m – indicates the end of the sequence
  • 1 – Bold attribute (see below for more)
  • [0m – resets all attributes, colors, formatting, etc.

The possible integers are:

  • 0 – Normal Style
  • 1 – Bold
  • 2 – Dim
  • 3 – Italic
  • 4 – Underlined
  • 5 – Blinking
  • 7 – Reverse
  • 8 – Invisible


The most compatible way of doing this is using tput to discover the right sequences to send to the terminal:

bold=$(tput bold)
normal=$(tput sgr0)

then you can use the variables $bold and $normal to format things:

echo "this is ${bold}bold${normal} but this isn't"


this is bold but this isn’t


In theory like so:

$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line

# Using tput
tput bold 
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL

$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line. 

But in practice it may be interpreted as “high intensity” color instead.



I assume bash is running on a vt100-compatible terminal in which the user did not explicitly turn off the support for formatting.

First, turn on support for special characters in echo, using -e option. Later, use ansi escape sequence ESC[1m, like:

echo -e "\033[1mSome Text"

More on ansi escape sequences for example here: