How to escape a single quote in single quote string in Bash?

LinuxBashEscaping

Linux Problem Overview


I want to display a string in Bash like this

I'm a student

Of course you can do it like this

echo "I'm a student"

But how to accomplish this while using single quote around the string ?

Linux Solutions


Solution 1 - Linux

echo 'I\'m a student'

does not work. But the following works:

echo $'I\'m a student'

From the man page of bash:

> A single quote may not occur between single quotes, even when preceded > by a backslash.
> ....
> Words of the form $'string' are treated specially. The word > expands to string, with backslash-escaped characters replaced as > specified by the ANSI C standard.

Solution 2 - Linux

The "ugly" solution mentioned by Glenn Jackman should actually be listed as a top level answer. It works well and is actually beautiful in some situations.

'I'"'"'m a student'

This ends the single quoted string after I then immediately starts a double quoted string containing a single quote and then starts another single quoted string. Bash then concatenates all contiguous strings into one.

Beautiful!

Solution 3 - Linux

The example below works because the escaped single quote \' is technically between two single-quoted arguments

echo 'I'\''m a student'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Question爱国者View Question on Stackoverflow
Solution 1 - LinuxcodaddictView Answer on Stackoverflow
Solution 2 - LinuxLuke GedeonView Answer on Stackoverflow
Solution 3 - LinuxNick JensenView Answer on Stackoverflow