hush: fix expansion of space in "a=${a:+$a }c" construct

function                                             old     new   delta
encode_then_append_var_plusminus                     554     552      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
master
Denys Vlasenko 2023-06-12 16:37:19 +02:00
parent 8f0e4c42c6
commit bab8828b0d
5 changed files with 17 additions and 1 deletions

View File

@ -0,0 +1,2 @@
1:'b c'
2:'b c'

View File

@ -0,0 +1,6 @@
a=b
a=${a:+$a }c
echo "1:'$a'"
a=b
a="${a:+$a }c"
echo "2:'$a'"

View File

@ -6398,7 +6398,7 @@ static NOINLINE int encode_then_append_var_plusminus(o_string *output, int n,
if (!dest.o_expflags) {
if (ch == EOF)
break;
if (!dquoted && strchr(G.ifs, ch)) {
if (!dquoted && !(output->o_expflags & EXP_FLAG_SINGLEWORD) && strchr(G.ifs, ch)) {
/* PREFIX${x:d${e}f ...} and we met space: expand "d${e}f" and start new word.
* do not assume we are at the start of the word (PREFIX above).
*/

View File

@ -0,0 +1,2 @@
1:'b c'
2:'b c'

View File

@ -0,0 +1,6 @@
a=b
a=${a:+$a }c
echo "1:'$a'"
a=b
a="${a:+$a }c"
echo "2:'$a'"