No seu caso, há uma sintaxe especial de cotação usada, a saber, $'...'
e $"..."
. Parece que essa sintaxe veio do shell Korn para Zsh e Bash, e agora está em POSIX (veja, por exemplo, a linha "expandir sequências" no link ).
Esta sintaxe não é mencionada nas respostas para Diferenças entre doublequotes "", singlequotes '' e backticks ´ ´ na linha de comando? .
Detalhes sobre esta sintaxe podem ser encontrados na manpage do bash (1):
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
\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
The expanded result is single-quoted, as if the dollar sign had not
been present.
A double-quoted string preceded by a dollar sign ($"string") will
cause the string to be translated according to the current locale. If
the current locale is C or POSIX, the dollar sign is ignored. If the
string is translated and replaced, the replacement is double-quoted.
Isso também significa que uma variável será expandida em $"..."
, mas não em $'...'
. Por favor, compare:
$ echo 'I am using\t$SHELL.\n'
I am using\t$SHELL.\n
$ echo $'I am using\t$SHELL.\n'
I am using $SHELL.
$ echo "I am using\t$SHELL.\n"
I am using\t/bin/bash.\n
$ echo $"I am using\t$SHELL.\n"
I am using\t/bin/bash.\n
No primeiro exemplo, nem a variável $SHELL
nem as escapes de barra invertida são expandidas. No segundo exemplo, os exemplos de barra invertida são expandidos, mas não a variável. O terceiro e o quarto exemplos dão resultados idênticos: somente a variável é expandida.
O formulário $'...'
pode ser útil para atribuir conteúdo com meta-caracteres como \t
ou \n
para variáveis. No entanto, não consegui encontrar uma aplicação para o formulário $"..."
.