Thursday, 12 March 2026

Understanding ANSI-C Quoting in Bash ($'...')

Understanding ANSI-C Quoting in Bash ($'...')

When writing Bash scripts, you may sometimes need to insert special characters such as tabs, newlines, or other non-printable characters. Bash provides a special quoting mechanism called ANSI-C Quoting to make this easy.


What is ANSI-C Quoting in Bash?

In Bash, the syntax:

$'...'

is called ANSI-C Quoting.

It tells the shell to interpret backslash escape sequences (such as \t, \n, etc.) and convert them into their actual binary characters.

This feature follows the escape conventions defined in the ANSI C programming language, which is why it is called ANSI-C quoting.


Why Do We Use ANSI-C Quoting?

Normally, when you assign a string like this:

tab="\t"

Bash treats \t as literal text (a backslash followed by the letter t).

But when you use ANSI-C quoting:

tab=$'\t'

Bash interprets \t as an actual tab character.


Example: Creating a Tab Character

Below is a real shell example.

[root@oel01db Shell-Scripting]# tab=$'\t'
[root@oel01db Shell-Scripting]# echo $tab

[root@oel01db Shell-Scripting]# echo "hi${tab}world"
hi world
[root@oel01db Shell-Scripting]#

Step-by-Step Breakdown

1. Assigning the Tab Character

tab=$'\t'

Here, Bash interprets \t and stores the actual horizontal tab character inside the variable tab.


2. Printing the Tab Variable

echo $tab

Since a tab is an invisible whitespace character, it appears as if nothing was printed.
However, the command actually prints:

<tab><newline>

3. Using the Tab Inside a String

echo "hi${tab}world"

Here:

  • ${tab} expands to a real tab character

  • The tab creates visible spacing between hi and world.

Output:

hi world

Example: Creating a Newline

ANSI-C quoting is also useful for inserting newlines inside variables.

[root@oel01db Shell-Scripting]# line=$'\n'
[root@oel01db Shell-Scripting]# echo "Hello${line}World"
Hello
World
[root@oel01db Shell-Scripting]#

Here \n becomes a newline character, splitting the output into two lines.


Common ANSI-C Escape Sequences

Below are some frequently used escape sequences.

SequenceMeaning
\tHorizontal Tab
\nNewline
\rCarriage Return
\\Backslash
\'Single quote
\"Double quote
\aBell (alert sound)
\bBackspace

Practical Use Cases in Shell Scripts

ANSI-C quoting is extremely useful in real scripts.

1. Formatting Output

echo -e "Name\tAge\tCity"

But a more reliable approach:

printf "Name%sAge%sCity\n" $'\t' $'\t'

2. Creating Multi-Line Variables

message=$'Line1\nLine2\nLine3'
echo "$message"

Output:

Line1
Line2
Line3

3. Using Special Characters in Scripts

You can insert characters that are difficult to type directly, such as:

  • tabs

  • control characters

  • Unicode characters

Example:

heart=$'\u2665'
echo "I love Bash $heart"

Why $'\n' is Better Than echo -e

Many beginners use:

echo -e "Hello\nWorld"

However, echo -e is not consistent across all shells.

ANSI-C quoting is portable within Bash and more predictable.

A better approach:

newline=$'\n'
echo "Hello${newline}World"

Important Notes

1. This Feature is Bash-Specific

ANSI-C quoting works in:

  • Bash

  • Zsh

  • Ksh

But not in POSIX /bin/sh.


2. Works Only Inside $'...'

Escape sequences like \t or \n are interpreted only inside ANSI-C quotes.

Example:

echo '\n'

Output:

\n

But:

echo $'\n'

prints a real newline.


Conclusion

ANSI-C quoting ($'...') is a powerful Bash feature that allows scripts to easily include special characters such as tabs, newlines, and control characters.

Key takeaways:

  • $'...' enables escape sequence interpretation

  • It is ideal for formatting output

  • It is more reliable than echo -e

  • It helps insert characters that are hard to type directly

No comments:

Post a Comment

JFrog Artifactory - How to install

JFrog Artifactory OSS Installation Guide CentOS 9 + PostgreSQL 17 This guide provides a structured workflow to install JFrog Artifactory OSS...