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

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


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.


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!


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

echo 'I'\''m a student'