From bash manual

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

A double-quoted string preceded by a dollar sign (‘$’) 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.

I wonder when the kinds of expansions happen?

I guess they must happen after parsing. If that is correct, when do they happen with respect to shell expansions such as brace expansion, parameter expansion, and filename expansion?



$'...' works just like any other quoting, except it just gives alternate ways of presenting some characters.

These both print {foo,bar}:

echo $'\x7b'foo,bar}
echo "{"foo,bar}

...while this triggers brace expansion and prints foo bar:

echo {foo,bar}

Given foo=abc, these print $foo:

echo $'\x24'foo
echo "$"foo

...while this expands the variable, and prints abc:

echo $foo

If there's a file called abc.txt, these print abc.txt:

echo "a"*.txt
echo $'\x61'*.txt

I can only assume the same is true for $"..".

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.