10
~$ echo $'\'test'
'test

man bash says:

Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.

Why does it work in the echo-command then?

2 Answers 2

16

Single quotes '...' are different to dollar single quotes $'...'. The former doesn't support any backslashing, while the latter uses the ANSI C specification.

14

choroba's answer is totally correct, here the details from man bash:

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. Backslash escape sequences, if present, are decoded as follows:
              \a     alert (bell)
              \b     backspace
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \'     single quote
              \"     double quote
              \?     question mark
              \nnn   the eight-bit character whose value is  the  octal  value
                     nnn (one to three digits)
              \xHH   the  eight-bit  character  whose value is the hexadecimal
                     value HH (one or two hex digits)
              \uHHHH the Unicode (ISO/IEC 10646) character whose value is  the
                     hexadecimal value HHHH (one to four hex digits)
              \UHHHHHHHH
                     the  Unicode (ISO/IEC 10646) character whose value is the
                     hexadecimal value HHHHHHHH (one to eight hex digits)
              \cx    a control-x character

That's why!

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .