https://lists.gnu.org/archive/html/bug-bash/2025-07/msg00014.html --- parse.y Thu Jun 12 12:36:06 2025 --- parse.y Sun Jul 6 16:46:00 2025 *************** *** 3009,3023 **** void ! execute_variable_command (const char *command, const char *vname) { char *last_lastarg; sh_parser_state_t ps; ! save_parser_state (&ps); last_lastarg = save_lastarg (); parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); ! restore_parser_state (&ps); bind_lastarg (last_lastarg); FREE (last_lastarg); --- 3009,3025 ---- void ! execute_variable_command (const char *command, const char *vname, int flags) { char *last_lastarg; sh_parser_state_t ps; ! if (flags) ! save_parser_state (&ps); last_lastarg = save_lastarg (); parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); ! if (flags) ! restore_parser_state (&ps); bind_lastarg (last_lastarg); FREE (last_lastarg); --- eval.c Fri Mar 7 18:50:03 2025 --- eval.c Sun Jul 6 16:49:18 2025 *************** *** 284,288 **** /* Caller ensures that A has a non-zero number of elements */ int ! execute_array_command (ARRAY *a, void *v) { char *tag; --- 284,288 ---- /* Caller ensures that A has a non-zero number of elements */ int ! execute_array_command (ARRAY *a, void *v, int flags) { char *tag; *************** *** 296,300 **** { if (argv[i] && argv[i][0]) ! execute_variable_command (argv[i], tag); } strvec_dispose (argv); --- 296,300 ---- { if (argv[i] && argv[i][0]) ! execute_variable_command (argv[i], tag, flags); } strvec_dispose (argv); *************** *** 319,323 **** { if ((pcmds = array_cell (pcv)) && array_num_elements (pcmds) > 0) ! execute_array_command (pcmds, "PROMPT_COMMAND"); return; } --- 319,323 ---- { if ((pcmds = array_cell (pcv)) && array_num_elements (pcmds) > 0) ! execute_array_command (pcmds, "PROMPT_COMMAND", 0); return; } *************** *** 328,332 **** command_to_execute = value_cell (pcv); if (command_to_execute && *command_to_execute) ! execute_variable_command (command_to_execute, "PROMPT_COMMAND"); } --- 328,332 ---- command_to_execute = value_cell (pcv); if (command_to_execute && *command_to_execute) ! execute_variable_command (command_to_execute, "PROMPT_COMMAND", 0); } --- input.h Fri Mar 10 16:22:48 2023 --- input.h Sun Jul 6 16:45:42 2025 *************** *** 100,104 **** extern int find_reserved_word (const char *); extern void gather_here_documents (void); ! extern void execute_variable_command (const char *, const char *); extern int *save_token_state (void); --- 100,104 ---- extern int find_reserved_word (const char *); extern void gather_here_documents (void); ! extern void execute_variable_command (const char *, const char *, int); extern int *save_token_state (void); --- array.h Wed Dec 28 14:00:47 2022 --- array.h Sun Jul 6 16:47:27 2025 *************** *** 178,182 **** /* In eval.c, but uses ARRAY * */ ! extern int execute_array_command (ARRAY *, void *); #endif /* _ARRAY_H_ */ --- 178,182 ---- /* In eval.c, but uses ARRAY * */ ! extern int execute_array_command (ARRAY *, void *, int); #endif /* _ARRAY_H_ */ --- y.tab.c Mon Jun 30 09:56:25 2025 --- y.tab.c Sun Jul 6 17:38:06 2025 *************** *** 5368,5382 **** void ! execute_variable_command (const char *command, const char *vname) { char *last_lastarg; sh_parser_state_t ps; ! save_parser_state (&ps); last_lastarg = save_lastarg (); parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); ! restore_parser_state (&ps); bind_lastarg (last_lastarg); FREE (last_lastarg); --- 5368,5384 ---- void ! execute_variable_command (const char *command, const char *vname, int flags) { char *last_lastarg; sh_parser_state_t ps; ! if (flags) ! save_parser_state (&ps); last_lastarg = save_lastarg (); parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); ! if (flags) ! restore_parser_state (&ps); bind_lastarg (last_lastarg); FREE (last_lastarg);