How does one output bold text in Bash?
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.
Solution 1:
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"
gives
this is bold but this isn't
Solution 2:
In order to apply a style on your string, you can use a command like:
echo -e '\033[1mYOUR_STRING\033[0m'
Explanation:
-
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
Solution 3:
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: ascii-table.com/ansi-escape-sequences-vt-100.php
Solution 4:
In theory like so:
# BOLD
$ 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
# UNDERLINE
$ 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.
(source: http://unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html)