diff -d -urpN busybox.7/shell/hush.c busybox.8/shell/hush.c
--- busybox.7/shell/hush.c	2009-08-12 14:53:21.000000000 +0200
+++ busybox.8/shell/hush.c	2009-08-12 19:47:04.000000000 +0200
@@ -6038,6 +6038,8 @@ static struct pipe *parse_stream(char **
 			dest.o_assignment = NOT_ASSIGNMENT;
 		}
 
+		/* Note: nommu_addchr(&ctx.as_string, ch) is already done */
+
 		switch (ch) {
 		case '#':
 			if (dest.length == 0) {
@@ -6061,12 +6063,17 @@ static struct pipe *parse_stream(char **
 			ch = i_getch(input);
 			if (ch != '\n') {
 				o_addchr(&dest, '\\');
-				nommu_addchr(&ctx.as_string, '\\');
+				/*nommu_addchr(&ctx.as_string, '\\'); - already done */
 				o_addchr(&dest, ch);
 				nommu_addchr(&ctx.as_string, ch);
 				/* Example: echo Hello \2>file
 				 * we need to know that word 2 is quoted */
 				dest.o_quoted = 1;
+			} else {
+#if !BB_MMU
+				/* It's "\<newline>". Remove trailing '\' from ctx.as_string */
+				ctx.as_string.data[--ctx.as_string.length] = '\0';
+#endif
 			}
 			break;
 		case '$':
diff -d -urpN busybox.7/shell/hush_test/hush-misc/nommu1.right busybox.8/shell/hush_test/hush-misc/nommu1.right
--- busybox.7/shell/hush_test/hush-misc/nommu1.right	1970-01-01 01:00:00.000000000 +0100
+++ busybox.8/shell/hush_test/hush-misc/nommu1.right	2009-08-12 19:47:04.000000000 +0200
@@ -0,0 +1,7 @@
+Ok
+Ok
+Ok
+Ok
+Ok
+Ok
+Done
diff -d -urpN busybox.7/shell/hush_test/hush-misc/nommu1.tests busybox.8/shell/hush_test/hush-misc/nommu1.tests
--- busybox.7/shell/hush_test/hush-misc/nommu1.tests	1970-01-01 01:00:00.000000000 +0100
+++ busybox.8/shell/hush_test/hush-misc/nommu1.tests	2009-08-12 19:47:04.000000000 +0200
@@ -0,0 +1,12 @@
+(echo \
+Ok)
+( (echo \
+Ok) )
+( ( (echo \
+Ok) ) )
+
+(echo \Ok)
+( (echo \Ok) )
+( ( (echo \Ok) ) )
+
+echo Done
diff -d -urpN busybox.7/shell/hush_test/run-all busybox.8/shell/hush_test/run-all
--- busybox.7/shell/hush_test/run-all	2009-08-12 14:53:21.000000000 +0200
+++ busybox.8/shell/hush_test/run-all	2009-08-12 19:47:04.000000000 +0200
@@ -38,16 +38,16 @@ do_test()
 	tret=0
 	cd "$1" || { echo "cannot cd $1!"; exit 1; }
 	for x in run-*; do
-	test -f "$x" || continue
-	case "$x" in
-		"$0"|run-minimal|run-gprof) ;;
-		*.orig|*~) ;;
-		#*) echo $x ; sh $x ;;
-		*)
-		sh "$x" >"../$1-$x.fail" 2>&1 && \
-		{ echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail";
-		;;
-	esac
+		test -f "$x" || continue
+		case "$x" in
+			"$0"|run-minimal|run-gprof) ;;
+			*.orig|*~) ;;
+			#*) echo $x ; sh $x ;;
+			*)
+			sh "$x" >"../$1-$x.fail" 2>&1 && \
+			{ echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail";
+			;;
+		esac
 	done
 	# Many bash run-XXX scripts just do this,
 	# no point in duplication it all over the place
