ash: bash-compatible $'...' shouldn't expand in double quotes

Bash doesn't expand its $'...' construct in double quotes:

   $ echo "$'a\tb'"
   $'a\tb'

Change BusyBox ash to do the same.  This also fixes a problem with
here documents where BusyBox ash gave an incorrect result for:

   $ cat <<EOF
   > '$'
   > EOF
   '$'

Reported-by: Timo Teras <timo.teras@iki.fi>
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2016-04-03 22:43:14 +01:00 committed by Denys Vlasenko
parent 2b91958dff
commit 84ba50c32f
5 changed files with 7 additions and 1 deletions

View File

@ -11500,7 +11500,7 @@ parsesub: {
|| (c != '(' && c != '{' && !is_name(c) && !is_special(c))
) {
#if ENABLE_ASH_BASH_COMPAT
if (c == '\'')
if (syntax != DQSYNTAX && c == '\'')
bash_dollar_squote = 1;
else
#endif

View File

@ -0,0 +1 @@
'$'

View File

@ -0,0 +1,3 @@
cat <<EOF
'$'
EOF

View File

@ -1,4 +1,5 @@
a b
$'a\tb'
a
b c
def

View File

@ -1,4 +1,5 @@
echo $'a\tb'
echo "$'a\tb'"
echo $'a\nb' $'c\nd''ef'
echo $'a\'b' $'c\"d' $'e\\f'
echo $'a\63b' $'c\063b' $'e\0633f'