--- /dev/null
+--- bash-4.3/parse.y 2014-05-29 14:46:09.545543384 +0200
++++ bash-4.3/parse.y 2014-05-29 14:48:40.758626213 +0200
+@@ -3858,6 +3858,8 @@ xparse_dolparen (base, string, indp, fla
+ save_parser_state (&ps);
+ save_input_line_state (&ls);
+ orig_eof_token = shell_eof_token;
++ /* avoid echoing every substitution again */
++ echo_input_at_read = 0;
+
+ /*(*/
+ parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/
+--- bash-4.3/subst.c 2014-05-29 16:04:35.802784549 +0200
++++ bash-4.3/subst.c 2014-05-29 16:08:25.021942676 +0200
+@@ -7103,6 +7103,7 @@ param_expand (string, sindex, quoted, ex
+ WORD_LIST *list;
+ WORD_DESC *tdesc, *ret;
+ int tflag;
++ int old_echo_input;
+
+ zindex = *sindex;
+ c = string[++zindex];
+@@ -7401,6 +7402,9 @@ arithsub:
+ }
+
+ comsub:
++ old_echo_input = echo_input_at_read;
++ /* avoid echoing every substitution again */
++ echo_input_at_read = 0;
+ if (pflags & PF_NOCOMSUB)
+ /* we need zindex+1 because string[zindex] == RPAREN */
+ temp1 = substring (string, *sindex, zindex+1);
+@@ -7413,6 +7417,7 @@ comsub:
+ }
+ FREE (temp);
+ temp = temp1;
++ echo_input_at_read = old_echo_input;
+ break;
+
+ /* Do POSIX.2d9-style arithmetic substitution. This will probably go