--- bash-4.2/parse.y 2014-05-29 14:46:09.545543384 +0200 +++ bash-4.2/parse.y 2014-05-29 14:48:40.758626213 +0200 @@ -3858,6 +3858,8 @@ xparse_dolparen (base, string, indp, fla sflags |= SEVAL_NOLONGJMP; save_parser_state (&ps); save_input_line_state (&ls); + /* avoid echoing every substitution again */ + echo_input_at_read = 0; /*(*/ parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/ --- bash-4.2/subst.c 2014-05-29 16:04:35.802784549 +0200 +++ bash-4.2/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