diff --git a/shell/ash_test/ash-quoting/space_in_varexp1.right b/shell/ash_test/ash-quoting/space_in_varexp1.right new file mode 100644 index 000000000..a617a91c3 --- /dev/null +++ b/shell/ash_test/ash-quoting/space_in_varexp1.right @@ -0,0 +1,2 @@ +1:'b c' +2:'b c' diff --git a/shell/ash_test/ash-quoting/space_in_varexp1.tests b/shell/ash_test/ash-quoting/space_in_varexp1.tests new file mode 100755 index 000000000..1589587d1 --- /dev/null +++ b/shell/ash_test/ash-quoting/space_in_varexp1.tests @@ -0,0 +1,6 @@ +a=b +a=${a:+$a }c +echo "1:'$a'" +a=b +a="${a:+$a }c" +echo "2:'$a'" diff --git a/shell/hush.c b/shell/hush.c index cdaa67a3b..dbc4aecab 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -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). */ diff --git a/shell/hush_test/hush-quoting/space_in_varexp1.right b/shell/hush_test/hush-quoting/space_in_varexp1.right new file mode 100644 index 000000000..a617a91c3 --- /dev/null +++ b/shell/hush_test/hush-quoting/space_in_varexp1.right @@ -0,0 +1,2 @@ +1:'b c' +2:'b c' diff --git a/shell/hush_test/hush-quoting/space_in_varexp1.tests b/shell/hush_test/hush-quoting/space_in_varexp1.tests new file mode 100755 index 000000000..1589587d1 --- /dev/null +++ b/shell/hush_test/hush-quoting/space_in_varexp1.tests @@ -0,0 +1,6 @@ +a=b +a=${a:+$a }c +echo "1:'$a'" +a=b +a="${a:+$a }c" +echo "2:'$a'"