]> git.ipfire.org Git - thirdparty/bash.git/blame - CHANGES-4.4
bash-4.4-rc2 release
[thirdparty/bash.git] / CHANGES-4.4
CommitLineData
95554387
CR
1This document details the changes between this version, bash-4.4-rc2, and
2the previous version, bash-4.4-beta2.
3
41. Changes to Bash
5
6a. Fixed an out-of-bounds read in the redirection operator completion code.
7
8b. Fixed execution context so `until continue' doesn't disable execution for
9 subsequent commands.
10
11c. Fixed trap handling code so traps don't inherit a command's temporary
12 environment.
13
14d. Fixed a bug that resulted in incorrect line numbers when a function is defined
15 as part of another function's execution.
16
17e. Fixed a bug in the expansion of ${a[@]} in contexts where word splitting is not
18 performed and $IFS is not the default.
19
20f. Fixed a bug that caused ''"$@" to not expand to an empty argument when there are
21 no positional parameters.
22
23g. Fixed a bug that caused a shell compiled without job control to use the incorrect
24 exit status for builtin commands preceded by a command executed from the file
25 system that causes the shell to call waitpid().
26
27h. Improved word completion for quoted strings containing unterminated command
28 substitutions with embedded double quotes.
29
302. Changes to Readline
31
32a. Fixed a bug that caused mode strings to be displayed incorrectly if the prompt was
33 shorter than the mode string.
34
353. New Features in Bash
36
37a. Using ${a[@]} or ${a[*]} with an array without any assigned elements when
38 the nounset option is enabled no longer throws an unbound variable error.
39
404. New Features in Readline
41
42a. New application-callable function: rl_pending_signal(): returns the signal
43 number of any signal readline has caught but not yet handled.
44
45b. New application-settable variable: rl_persistent_signal_handlers: if set to a
46 non-zero value, readline will enable the readline-6.2 signal handler behavior
47 in callback mode: handlers are installed when rl_callback_handler_install is
48 called and removed removed when a complete line has been read.
49
50------------------------------------------------------------------------------
51This document details the changes between this version, bash-4.4-beta2, and
52the previous version, bash-4.4-rc1.
53
541. Changes to Bash
55
56a. Fixed a memory leak when processing ${!var[@]}.
57
58b. Fixed a bug that caused subshells to free trap strings associated with
59 inherited signals.
60
61c. Inheriting BASHOPTS from the environment now works to force actions
62 associated with enabling an option, instead of just marking the option
63 as enabled.
64
65d. Fixed a bug that allowed assignments to BASH_CMDS when the shell was in
66 restricted mode.
67
68e. Fixed a bug caused by an accidental omission of part of the original patch
69 for EXECIGNORE.
70
71e. Prompt expansion now quotes the results of the \s, \h, and \H expansions.
72
73f. Fixed a bug that caused parsing errors in command substitutions with
74 consecutive case statements separated by newlines.
75
76g. Updated logic used to decide whether bash is running inside an emacs
77 terminal emulator to work with future emacs versions.
78
79h. Fixed two extended pattern matching bugs caused by premature short-
80 circuiting.
81
82i. Fixed a memory leak in the code that removes duplicate history entries.
83
84j. There are a number of bug fixes to coproc, mapfile, declare, unset,
85 and assignment statements that prevent nameref variables from creating
86 and unsetting variables with invalid names.
87
88k. Fixed a bug that caused variables to be inadvertently marked as both an
89 associative and an indexed array.
90
91l. Fixed a bug that caused `bash -c' to not run a trap specified in the
92 command string.
93
94j. There are a number of bug fixes to coproc, mapfile, declare, and assignment
95 statements that prevent nameref variables from overwriting or modifying
96 attributes of readonly variables.
97
98k. Fixed a bug that caused command substitution to attempt to set the
99 terminal's process group incorrectly.
100
101l. Fixed a bug that could cause prompt string expansion to display error
102 messages when the `nounset' shell option is set.
103
104m. Fixed a bug that caused "$@" to not expand to an empty string under the
105 circumstances when Posix says it should ("${@-${@-$@}}").
106
107n. Fixed several bugs caused by referencing nameref variables whose values
108 are names of unset variables (or names that are valid for referencing
109 but not assignment), including creating variables in the temporary
110 environment.
111
112o. Function tracing and error tracing are disabled if --debugger is supplied
113 at startup but the shell can't find the debugger start file.
114
115p. Fixed a bug when IFS is used as the control variable in a for statement.
116
117q. Fixed a bug with SIGINT received by a command substitution in an interactive
118 shell.
119
120r. The checks for nameref variable self-references are more thorough.
121
122s. Fixed several bugs with multi-line aliases.
123
124t. Fixed `test' to handle the four-argument case where $1 == '(' and
125 $4 == ')'.
126
127u. Fixed a bug in the expansion of $* in the cases where word splitting is
128 not performed.
129
130v. Fixed a bug in execution of case statements where IFS includes the
131 pattern matching characters.
132
1332. Changes to Readline
134
135a. When refreshing the line as the result of a key sequence, Readline attempts
136 to redraw only the last line of a multiline prompt.
137
138b. Fixed an issue that caused completion of git commands to display
139 incorrectly when using colored-completion-prefix.
140
141c. Fixed several redisplay bugs having to do with multibyte characters and
142 invisible characters in prompt strings.
143
1443. New Features in Bash
145
146a. Value conversions (arithmetic expansions, case modification, etc.) now
147 happen when assigning elements of an array using compound assignment.
148
149b. There is a new option settable in config-top.h that makes multiple
150 directory arguments to `cd' a fatal error.
151
152c. Bash now uses mktemp() when creating internal temporary files; it produces
153 a warning at build time on many Linux systems.
154
1554. New Features in Readline
156
157a. The default binding for ^W in vi mode now uses word boundaries specified
158 by Posix (vi-unix-word-rubout is bindable command name).
159
160b. rl_clear_visible_line: new application-callable function; clears all
161 screen lines occupied by the current visible readline line.
162
163c. rl_tty_set_echoing: application-callable function that controls whether
164 or not readline thinks it is echoing terminal output.
165
166d. Handle >| and strings of digits preceding and following redirection
167 specifications as single tokens when tokenizing the line for history
168 expansion.
169
170e. Fixed a bug with displaying completions when the prefix display length
171 is greater than the length of the completions to be displayed.
172
173f. The :p history modifier now applies to the entire line, so any expansion
174 specifying :p causes the line to be printed instead of expanded.
175
176------------------------------------------------------------------------------
690150f9
CR
177This document details the changes between this version, bash-4.4-rc1, and
178the previous version, bash-4.4-beta.
179
1801. Changes to Bash
181
182a. Fixed several problems with bash completion not special-casing bash syntax
183 constructs.
184
185b. Fixed a bug that caused the mapfile builtin to not create array variables
186 when a variable of the same name appears in the temporary environment.
187
188c. Fixed a bug that caused prompt expansion to loop when PS1 contained a
189 syntax error.
190
191d. Fixed a bug that caused the ${array[@]@A} expansion to split the results even
192 when double-quoted.
193
194e. There is a new implementation of the code that saves the last CHILD_MAX
195 exited background pids so their status can be queried later.
196
197f. Bash-4.4 can now be configured and built on very old versions of Solaris 2.
198
199g. Fixed problems with --help support for several builtins.
200
201h. Fixed values added to BASH_SOURCE and BASH_LINENO for functions inherited from
202 the environment.
203
204i. Fixed a bug that caused background processes run from non-interactive shells
205 with job control enabled to place the terminal in the wrong process group
206 under certain circumstances.
207
208j. Fixed a bug that caused `fc' to return an incorrect exit status when
209 executing commands from the history list.
210
211k. Fixed a bug that caused the shell to exit when a process substitution received
212 a SIGINT when run in certain terminal emulators.
213
214l. EXECIGNORE now honors the setting of `extglob' when attempting to match
215 executable names.
216
217m. Fixed a bug where `return' used the wrong exit status when executed in a
218 DEBUG trap.
219
220n. Fixed a bug that caused a command containing a here-document and an escaped
221 newline to be stored in the history list incorrectly.
222
223o. Fixed a bug that caused set -e to be honored in cases of builtins invoking
224 other builtins when it should be ignored.
225
226p. Fixed a bug that caused `readonly' and `export' to create local array
227 variables when used within shell functions.
228
229q. Fixed a bug that allowed subshells begun to execute process substitutions to
230 have access to the command's temporary environment.
231
232r. Fixed a bug that could cause the shell to dump core when receiving a SIGCHLD
233 for which a trap has been set while running in posix mode.
234
235s. Fixed a bug that caused bash to not restore BASH_ARGC, BASH_ARGV, BASH_SOURCE,
236 BASH_LINENO, and FUNCNAME if the shell received a SIGINT while reading
237 commands from a file while executing `.'.
238
239t. Fixed a bug that caused the `-o history' option to have no effect when
240 supplied on the command line when starting a new shell.
241
242u. Fixed a bug that caused history expansions occurring in command substitutions
243 to not be performed.
244
245v. Fixed a bug that caused `eval' run in a non-interactive shell to disable
246 history expansion for the remainder of the shell script, even if the script
247 had previously enabled it.
248
249w. Fixed a bug that caused "$@" to not expand to multiple words when IFS is set
250 to the empty string.
251
252x. Fixed a bug that caused process and command substitution to inherit output
253 buffered in the stdio library but not written.
254
255y. Fixed a bug that caused a terminating signal received during `echo' to run
256 an exit trap in a signal handler context.
257
258z. Fixed a bug that caused a builtin command containing a process substitution to
259 return the wrong exit status.
260
261aa. Fixed a bug that caused `()' subshells with piped input to incorrectly redirect
262 the standard input of some of the commands in the subshell from /dev/null.
263
264bb. The history builtin now uses more descriptive error messages for missing or
265 invalid timestamps.
266
2672. Changes to Readline
268
269a. The history file writing functions only attempt to create and use a backup
270 history file if the history file exists and is a regular file.
271
272b. Fixed an out-of-bounds read in readline's internal tilde expansion interface.
273
274c. Fixed several redisplay bugs with prompt strings containing multibyte
275 and non-visible characters whose physical length is longer than the screen
276 width.
277
278d. Fixed a redisplay bug with prompt strings containing invisible characters
279 whose physical length exceeds the screen width and using incremental search.
280
281e. Readline prints more descriptive error messages when it encounters errors
282 while reading an inputrc file.
283
284f. Fixed a bug in the character insertion code that attempts to optimize
285 typeahead when it reads a character that is not bound to self-insert and
286 resets the key sequence state.
287
2883. New Features in Bash
289
290a. BASH_COMPAT and FUNCNEST can be inherited and set from the shell's initial
291 environment.
292
293b. inherit_errexit: a new `shopt' option that, when set, causes command
294 substitutions to inherit the -e option. By default, those subshells disable
295 -e. It's enabled as part of turning on posix mode.
296
297c. New prompt string: PS0. Expanded and displayed by interactive shells after
298 reading a complete command but before executing it.
299
300d. Interactive shells now behave as if SIGTSTP/SIGTTIN/SIGTTOU are set to SIG_DFL
301 when the shell is started, so they are set to SIG_DFL in child processes.
302
303e. Posix-mode shells now allow double quotes to quote the history expansion
304 character.
305
306f. OLDPWD can be inherited from the environment if it names a directory.
307
308g. Shells running as root no longer inherit PS4 from the environment, closing a
309 security hole involving PS4 expansion performing command substitution.
310
311h. If executing an implicit `cd' when the `autocd' option is set, bash will now
312 invoke a function named `cd' if one exists before executing the `cd' builtin.
313
3144. New Features in Readline
315
316a. If an incremental search string has its last character removed with DEL, the
317 resulting empty search string no longer matches the previous line.
318
319b. If readline reads a history file that begins with `#' (or the value of
320 the history comment character) and has enabled history timestamps, the history
321 entries are assumed to be delimited by timestamps. This allows multi-line
322 history entries.
323
324c. Readline now throws an error if it parses a key binding without a terminating
325 `:' or whitespace.
326
327------------------------------------------------------------------------------
328This document details the changes between this version, bash-4.4-beta, and
329the previous version, bash-4.4-alpha.
330
3311. Changes to Bash
332
333a. Fixed two bugs that caused out-of-bounds reads when skipping over assignment
334 statements while finding the word on which to perform programmable
335 completion.
336
337b. Fixed a memory leak in programmable completion.
338
339c. Fixed a bug that could cause the shell to crash when interrupting the
340 wait builtin.
341
342d. Fixed a bug that caused ${!vvv@} to be interpreted as introducing the new
343 `@' operator.
344
345e. Fixed a bug that caused the && and || operators to be incorrectly optimized.
346
347f. The shell now undoes redirections before exiting the shell when the `-e'
348 option is enabled, and a shell function fails.
349
350g. History expansion now skips over the history expansion character in command
351 and process substitution.
352
353h. Fixed a bug that caused stray '\001' characters to be added to the output
354 of `declare -p'.
355
356i. Fixed a memory leak when processing declare commands that perform compound
357 array assignments.
358
359j. Fixed a bug that could cause the shell to crash when reading input from a
360 file and the limit on open file descriptors is high.
361
362k. Fixed a bug that caused the ERR and RETURN traps to be unset if they were
363 set in a shell function but unset previously.
364
365l. Fixed a bug that caused several signals to be ignored if `exec' failed in
366 an interactive shell.
367
368m. A posix-mode non-interactive shell now considers a parameter expansion error
369 to be a fatal error.
370
371n. The `time' command now prints timing statistics for failed commands when
372 the -e option is enabled.
373
374o. Fixed a bug that caused the shell to crash when attempting to indirectly
375 expand a shell variable with an invalid name.
376
377p. Fixed a bug that caused the shell to crash when running a trap containing
378 a process substitution.
379
380q. Bash now prints the keyword `function' before a function with the same name
381 as a reserved word when using `declare -f' to avoid parse errors when
382 reusing the output as input.
383
384r. Fixed a bug that caused the shell to crash when using declare -g to attempt
385 to redefine an existing global indexed array variable as an associative
386 array.
387
388s. Fixed a memory leak that occurred when interrupting brace expansions
389 generating a sequence.
390
391t. Fixed a bug that resulted in alias expansion in redirections.
392
393u. The `declare -a' and `declare -A' commands now print fewer warnings when
394 attempting to create and initialize an array at the same time, but
395 relying on word expansions to construct the compound assignment.
396
397v. The `help' builtin now behaves better in locales where each wide
398 character occupies more than one display column.
399
400w. The `read' builtin no longer has a possible race condition when a timeout
401 occurs.
402
403x. Fixed several expansion problems encountered when IFS="'".
404
405y. Fixed a problem with the expansion of $'\c?'.
406
407z. Bash no longer splits the expansion of here-strings, as the documentation
408 has always said.
409
410aa. Bash now puts `s' in the value of $- if the shell is reading from standard
411 input, as Posix requires.
412
413bb. Fixed a bug that caused the shell to crash if invoked with a NULL
414 environment.
415
416cc. The shell now only trusts an inherited value for $PWD if it begins with a
417 `/'.
418
419dd. Fixed a memory leak when creating local array variables and assigning to
420 them using compound assignment with the `declare' builtin.
421
422ee. Fixed a bug that could cause the shell to crash when processing nested here
423 documents inside a command substitution.
424
425ff. Array keys and values are now displayed using $'...' quoting where
426 appropriate.
427
428gg. Fixed a bug that could cause the shell to crash if the replacement string
429 in pattern substitution was NULL.
430
431hh. Fixed a bug that could cause the shell to crash if a command substitution
432 contained a non-fatal syntax error.
433
434ii. Fixed a bug that could cause the shell to crash if variable indirection
435 resulted in a NULL variable.
436
437jj. Fixed a bug that could cause the shell to crash if a long string contained
438 multiple unterminated parameter expansion constructs.
439
440kk. Improved the code that acts on SIGINT received while waiting for a child
441 process only if the child exits due to SIGINT.
442
443ll. $BASH_SUBSHELL now has more consistent values in asynchronous simple
444 commands.
445
4462. Changes to Readline
447
448a. Colored completion prefixes are now displayed using a different color, less
449 likely to collide with files.
450
451b. Fixed a bug that caused vi-mode character search to misbehave when
452 running in callback mode.
453
454c. Fixed a bug that caused output to be delayed when input is coming from a
455 macro in vi-mode.
456
457d. Fixed a bug that caused the vi-mode `.' command to misbehave when redoing
458 a multi-key key sequence via a macro.
459
460e. Fixed a bug that caused problems with applications that supply their own
461 input function when performing completion.
462
463f. When read returns -1/EIO when attempting to read a key, return an error
464 instead of line termination back to the caller.
465
466g. Updated tty auditing feature based on patch from Red Hat.
467
468h. Fixed a bug that could cause the history library to crash on overflows
469 introduced by malicious editing of timestamps in the history file.
470
4713. New Features in Bash
472
473a. `make install' now installs the example loadable builtins and a set of
474 bash headers to use when developing new loadable builtins.
475
476b. `enable -f' now attempts to call functions named BUILTIN_builtin_load when
477 loading BUILTIN, and BUILTIN_builtin_unload when deleting it. This allows
478 loadable builtins to run initialization and cleanup code.
479
480c. There is a new BASH_LOADABLES_PATH variable containing a list of directories
481 where the `enable -f' command looks for shared objects containing loadable
482 builtins.
483
484d. The `complete_fullquote' option to `shopt' changes filename completion to
485 quote all shell metacharacters in filenames and directory names.
486
487e. The `kill' builtin now has a `-L' option, equivalent to `-l', for
488 compatibility with Linux standalone versions of kill.
489
4904. New Features in Readline
491------------------------------------------------------------------------------
05d9462c
CR
492This document details the changes between this version, bash-4.4-alpha, and
493the previous version, bash-4.3-release.
494
4951. Changes to Bash
496
497a. A bug that caused pipelines to be corrupted while running the DEBUG trap
498 was fixed.
499
500b. A bug that accidentally omitted the `-R' unary operator from `test' was
501 fixed.
502
503c. A bug that could cause the shell to not restore the terminal's process
504 group on shell exit was fixed.
505
506d. Several changes were made to programmable completion to accommodate
507 assumptions made by the bash-completion package.
508
509e. Bash no longer inhibits C-style escape processing ($'...') while performing
510 pattern substitution word expansions.
511
512f. Fixed a bug that caused `return' executed from a trap handler to use the
513 wrong return status when one was not supplied as an argument.
514
515g. In Posix mode, defining a function with the same name as a special
516 builtin is now an error, fatal only when the shell is not interactive.
517
518h. Fixed a bug that caused compound array assignments to discard unset or null
519 variables used as subscripts, thereby making it appear as if the index was
520 not present.
521
522i. Fixed a bug that caused extended glob patterns to incorrectly match
523 filenames with a leading `.'.
524
525j. Fixed a bug involving sign extension when reallocating the input line
526 after a history expansion, causing segmentation faults.
527
528k. Bash now does a better job at identifying syntax errors during word
529 completion and tailoring completion appropriately.
530
531l. Bash now uses the current locale's decimal point in comamnd timing output.
532
533m. Fixed a bug that caused segmentation faults while reading here documents if
534 PS2 contains a command substitution.
535
536n. There are several changes to how $@ is expanded when unquoted but in a
537 context where word splitting is not performed (e.g., on the rhs of an
538 assignment or in a conditional command).
539
540o. Bash now quotes command hash table entries that contain shell metacharacters
541 when displaying hash table contents.
542
543p. Fixed a potential file descriptor leak when dup2() fails while performing a
544 redirection.
545
546q. Fixed a bug that caused directory names evaluated during word completion to
547 be dequoted twice.
548
549r. Fixed several bugs which could result in indirect variable expansion and
550 namerefs creating variables with invalid names or referencing variables
551 set to the empty string.
552
553s. Fixed a bug that caused bash to not expand $0 in word expansions where it
554 should.
555
556t. Fixed a bug that caused bash to perform process substitution if <(
557 appeared inside an arithmetic context.
558
559u. Fixed a bug in extglob pattern parsing that caused slashes in the pattern
560 to be confused as directory names.
561
562v. Fixed several bugs with treatment of invisible variables (variables with
563 attributes that are unset because they have never been assigned values).
564
565w. Fixed a bug that caused the `read' builtin to not clean up readline's
566 state when using the -e and -t options together and the read timed out.
567
568x. Fixed a bug that caused the shell to exit with the wrong (but non-zero)
569 value if a command was not found or was not executable.
570
571y. Fixed a bug that caused the `time' reserved word to not be recognized as
572 such in all contexts where it should have been.
573
574z. Fixed a bug that caused the shell to close process subsitution file
575 descriptors when executing a script without the `#!' leading line.
576
577aa. Fixed a typo that caused the `compat42' shell option to set the wrong
578 compatibility level.
579
580bb. The shell now handles process substitution commands with embedded
581 parentheses the same way as it does when parsing command substitution.
582
583cc. Fixed a bug that caused nested pipelines and the `lastpipe' shell option
584 to produce core dumps.
585
586dd. Fixed a bug that caused patterns containing `*' to match pathnames in cases
587 where slashes must be matched explicitly.
588
589ee. Fixed a problem with patterns containing `:' in colon-separated variables
590 lik GLOBIGNORE.
591
592ff. Fixed a bug that caused indirect variable expansion using indexed arrays to
593 always use index 0.
594
595gg. Fixed a parsing problem that caused quoted newlines immediately following a
596 command substitution to be mishandled in certain cases.
597
598hh. Fixed a potential buffer overflow on systems without locale_charset or the
599 bash replacement.
600
601ii. Fixed a bug that caused background processes to modify the terminal's
602 process group under certain circumstances.
603
604jj. Asynchronous commands now always set $? to 0 and are not affected by
605 whether or not the command's exit status is being inverted.
606
607kk. Fixed a problem that caused a line ending with an escaped newline and
608 containingh a prior `eval' to be incorrectly parsed.
609
610ll. Fixed an issue with programmable completion and `!' in extglob patterns
611 used as arguments to `compgen -X'.
612
613mm. Word completion now treats the two-character token `>|' as requiring
614 filename expansion.
615
616nn. Bash no longer expands tildes in $PATH elements while in Posix mode.
617
618oo. Fixed a bug that caused bash to not clean up readline's state, including
619 the terminal settings, if it received a fatal signal while in a readline()
620 call (including `read -e' and `read -s').
621
622pp. Fixed bug that caused importing shell functions from the environment to
623 execute additional commands following the function.
624
625qq. Fixed a bug that caused the parser to return a lookahead character pushed
626 back by a previous call, even when on another line.
627
628rr. Fixed a bug that caused many here-documents or many nested case statements
629 to overflow an internal stack.
630
631ss. Changed the way bash encodes exported functions for inclusion in the
632 environment to avoid name collisions with valid variable names and to
633 indicate that they are exported functions.
634
635tt. Fixed a bug that could result in an invalid memory access when processing
636 a here document delimited by end of file or end of string.
637
638uu. Fixed a bug that could cause an invalid memory access if a command was run
639 before initializing the job control framework.
640
641vv. When in Posix mode, bash prints shell function definitions as Posix
642 specifies them, without the leading `function' keyword.
643
644ww. The variable attribute display builtins no longer display variables with
645 invalid names that were imported from the environment.
646
647xx. Fixed a bug that could allow `break' or `continue' executed from shell
648 functions to affect loops running outside of the function.
649
650yy. Fixed a bug that could cause a restricted shell to attempt to import shell
651 functions from the environment.
652
653zz. The shell now allows double-quoted identifiers in arithmetic expressions.
654
655aaa. Fixed a bug that could allow scalar variables subscripted using [@] in
656 word expansions to be incorrectly quoted.
657
658bbb. The shell now makes sure to ignore SIGTSTP/SIGTTIN/SIGTTOU in child
659 processes if they were ignored at shell startup, even if job control is
660 in effect.
661
662ccc. Fixed a bug that could cause $* to be split on spaces when IFS is set to
663 the empty string.
664
665ddd. Posix says that expanding $* in a pattern context where the expansion is
666 double-quoted should not treat $* as if it were double quoted.
667
668eee. Bash now restores getopts' internal state between calls to getopts even if
669 a shell function declares a local copy of OPTIND.
670
671fff. Fixed a bug that could cause `history -r' or `history -n' to read identical
672 lines from the history file more than once.
673
674ggg. The commands executed by `bind -x' now redisplay at most the final line
675 of a multi-line prompt, and those commands may return 124 to indicate that
676 the entire prompt should be redrawn.
677
678hhh. Fixed a bug that could cause `mapfile' to create variables with invalid
679 names.
680
681iii. The shell only goes into debugging mode when --debugger is supplied if
682 the debugger initialization file is present.
683
684jjj. Fixed a bug that disallowed an assignment to (implicit) subscript 0 of an
685 existing array in a declare command that set the readonly attribute.
686
687kkk. Fixed a bug that inadvertently allowed assignments to FUNCNAME to disable
688 its special status.
689
690lll. Appending to an existing array variable using the compound assignment
691 syntax (var+=(aaa)) should not affect assignments to existing subscripts
692 appearing in the compound assignment.
693
694mmm. Fixed a bug that could cause the shell to crash when a variable with a
695 null value was passed in the temporary environment and the variable's
696 attributes are modified using `declare' while performing a redirection.
697
698nnn. Fixed a bug in printf so that a missing precision specifier after a `.'
699 is treated as 0.
700
701ooo. Fixed a bug that attempted to use the internal command timing to time
702 pipeline components if the pipeline elements are separated by newlines.
703
704ppp. Fixed a bug that caused `declare -al foo=(ONE TWO THREE)' to not lowercase
705 the values on assignment.
706
707qqq. Bash does a better job of determining whether or not files are executable
708 when running on Windows, since the X_OK flag to access(2) is not supported.
709
710rrr. Fixed a bug that caused some of the shell's internal traps (e.g., ERR) to
711 be interrupted (and leave incorrect state) by pending SIGINTs.
712
713sss. Fixed a bug in the bash interface to history expansion to avoid attempting
714 expansion if the history expansion character occurs in a command
715 substitution.
716
717ttt. Fixed a bug that caused the select command to crash if the REPLY variable
718 ends up empty (e.g., if it's made readonly)
719
720uuu. Bash handles backslash-quoting of multibyte characters better when quoting
721 output that is intended to be reused.
722
723vvv. System-specific changes for: Windows, Cygwin.
724
725www. Fixes for upper and lower-casing multibyte characters, some locales have
726 characters whose upper and lowercase versions have different numbers of
727 bytes.
728
729xxx. Fixed a bug that caused the ERR trap in a shell function to have the
690150f9 730 wrong value for $LINENO.
05d9462c
CR
731
732yyy. Fixed a bug that resulted in incorrect quoting of regexps for the =~
733 operator when an open brace appears without a close brace.
734
735zzz. Fixed a bug in the array unset operation that caused it to attempt to
736 parse embedded single and double quotes.
737
738aaaa. Fixed a bug that caused $* to not expand with the first character of
739 $IFS as a separator in a context where word splitting will not take
740 place.
741
742bbbb. Fixed two bugs that could cause the shell to dereference a null pointer
743 while attempting to print an error message from arithmetic expansion.
744
745cccc. Fixed a bug that resulted in short-circuited evaluation when reading
746 commands from a string ending in an unquoted backslash, or when sourcing
747 a file that ends with an unquoted backslash.
748
749dddd. Fixed a bug that resulted in the no-fork optimization not cleaning up
750 any FIFOs created by process substitution.
751
752eeee. If the -T option is not set, allow the source builtin and shell functions
753 to set a DEBUG trap that persists after the sourced file or function
754 returns, instead of restoring the old (unset) value unconditionally.
755
756ffff. Fixed a bug that caused redirections to not be undone on some syntax
757 errors, e.g., when parsing a command substitution.
758
759gggg. Bash only adds asynchronous commands to the table of background pids
760 whose status it remembers, to avoid it growing too large during scripts
b47ecd02
CR
761 that create and reap large numbers of child processes. This means that
762 `wait' no longer works on synchronous jobs, but $? can be used to get
763 the exit status in those cases.
05d9462c
CR
764
765hhhh. Bash now checks whether or not a shell script argument is a directory
766 before trying to open it; Posix says implementations may allow open(2)
767 on a directory.
768
769iiii. Fixed a bug that could cause the shell to set the terminal's process
770 group to a background process group when running as part of a pipeline.
771
772jjjj. Made a few changes to strings to avoid possible potential negative effects
773 caused by malicious translations.
774
775kkkk. Fixed a bug that caused the `unset' builtin to continue to treat its
776 arguments as functions after unsetting a function when invoked with no
777 options.
778
779llll. Fixed a bug that would not replace empty strings using pattern
780 substitution even if the pattern matched the empty string.
781
782mmmm. Fixed a bug with word completion that prevented some characters from
783 being backslash-quoted (backquote, dollar sign).
784
785nnnn. Fixed a bug that prevented a command from the history re-executed by the
786 `fc' builtin from setting verbose mode.
787
788oooo. Fixed a bug that caused the shell to not enable and disable function
789 tracing with changes to the `extdebug' shell option.
790
791pppp. Fixed a bug that caused assignments to nameref variables pointing to
792 unset variables with attributes but no values to create variables with
793 incorrect names.
794
795qqqq. Fixed a bug that caused `unset' on nameref variables (without -n) to
796 unset the wrong variable under certain circumstances.
797
798rrrr. Fixed a bug that caused close braces occurring in brace expansions within
799 command substitutions to incorrectly terminate parameter expansions.
800
801ssss. Fixed a bug that caused `command -p' to temporarily alter $PATH.
802
803tttt. Fixed a bug that caused interactive shells compiled without job control
804 to return incorrect status values for child processes when running a
805 single command that creates enough children to use the entire PID space.
806
807uuuu. `esac' should not be recognized as a reserved word when it appears as the
808 second or later pattern in a case statement pattern list.
809
b47ecd02
CR
810vvvv. Fixed a bug that caused the completion code to read past the end of the
811 readline line buffer while skipping assignment statements to find the
812 command name.
813
118fb670
CR
814wwww. Fixed a bug that caused case statements within loops contained in a
815 command substitution to be parsed incorrectly.
816
690150f9
CR
817xxxx. Fixed a bug that could cause SIGCHLD handling to be delayed after
818 running `wait' with no arguments and interrupting it with ^C without
819 a trap handler installed.
820
05d9462c
CR
8212. Changes to Readline
822
823a. A bug that caused vi-mode `.' to be unable to redo `c', `d', and `y'
824 commands with modifiers was fixed.
825
826b. Fixed a bug that caused callback mode to dump core when reading a
827 multiple-key sequence (e.g., arrow keys).
828
829c. Fixed a bug that caused the redisplay code to erase some of the line when
830 using horizontal scrolling with incremental search.
831
832d. Readline's input handler now performs signal processing if read(2) is
833 interrupted by SIGALRM or SIGVTALRM.
834
835e. Fixed a problem with revert-all-at-newline freeing freed memory.
836
837f. Clarified the documentation for the history_quotes_inhibit_expansion
838 variable to note that it inhibits scanning for the history comment
839 character and that it only affects double-quoted strings.
840
841g. Fixed an off-by-one error in the prompt printed when performing searches.
842
843h. Use pselect(2), if available, to wait for input before calling read(2), so
844 a SIGWINCH can interrupt it, since it doesn't interrupt read(2).
845
846i. Some memory leaks caused by signals interrupting filename completion have
847 been fixed.
848
849j. Reading EOF twice on a non-empty line causes EOF to be returned, rather
850 than the partial line. This can cause partial lines to be executed on
851 SIGHUP, for example.
852
853k. Fixed a bug concerning deleting multibyte characters from the search
854 string while performing an incremental search.
855
856l. Fixed a bug with tilde expanding directory names in filename completion.
857
858m. Fixed a bug that did not allow binding sequences beginning with a `\'.
859
860n. Fixed a redisplay bug involving incorrect line wrapping when the prompt
861 contains a multibyte character in the last screen column.
862
863o. Fixed a bug that caused history expansion to disregard characters that are
864 documented to delimit a history event specifier without requiring `:'.
865
866p. Fixed a bug that could cause reading past the end of a string when reading
867 the value when binding the set of isearch terminators.
868
690150f9 869q. Fixed a bug that caused readline commands that depend on knowing which
b47ecd02 870 key invoked them to misbehave when dispatching key sequences that are
690150f9 871 prefixes of other key bindings.
b47ecd02
CR
872
873r. Paren matching now works in vi insert mode.
874
05d9462c
CR
8753. New Features in Bash
876
877a. There is now a settable configuration #define that will cause the shell
878 to exit if the shell is running setuid without the -p option and setuid
879 to the real uid fails.
880
881b. Command and process substitutions now turn off the `-v' option when
882 executing, as other shells seem to do.
883
884c. The default value for the `checkhash' shell option may now be set at
885 compile time with a #define.
886
887d. The `mapfile' builtin now has a -d option to use an arbitrary character
888 as the record delimiter, and a -t option to strip the delimiter as
889 supplied with -d.
890
891e. The maximum number of nested recursive calls to `eval' is now settable in
892 config-top.h; the default is no limit.
893
894f. The `-p' option to declare and similar builtins will display attributes for
895 named variables even when those variables have not been assigned values
896 (which are technically unset).
897
898g. The maximum number of nested recursive calls to `source' is now settable
899 in config-top.h; the default is no limit.
900
901h. All builtin commands recognize the `--help' option and print a usage
902 summary.
903
904i. Bash does not allow function names containing `/' and `=' to be exported.
905
906j. The `ulimit' builtin has new -k (kqueues) and -P (pseudoterminals) options.
907
908k. The shell now allows `time ; othercommand' to time null commands.
909
910l. There is a new `--enable-function-import' configuration option to allow
911 importing shell functions from the environment; import is enabled by
912 default.
913
914m. `printf -v var ""' will now set `var' to the empty string, as if `var=""'
915 had been executed.
916
917n. GLOBIGNORE, the pattern substitution word expansion, and programmable
918 completion match filtering now honor the value of the `nocasematch' option.
919
920o. There is a new ${parameter@spec} family of operators to transform the
921 value of `parameter'.
922
923p. Bash no longer attempts to perform compound assignment if a variable on the
924 rhs of an assignment statement argument to `declare' has the form of a
925 compound assignment (e.g., w='(word)' ; declare foo=$w); compound
926 assignments are accepted if the variable was already declared as an array,
927 but with a warning.
928
929q. The declare builtin no longer displays array variables using the compound
930 assignment syntax with quotes; that will generate warnings when re-used as
931 input, and isn't necessary.
932
933r. Executing the rhs of && and || will no longer cause the shell to fork if
934 it's not necessary.
935
936s. The `local' builtin takes a new argument: `-', which will cause it to save
690150f9 937 the single-letter shell options and restore their previous values at
05d9462c
CR
938 function return.
939
940t. `complete' and `compgen' have a new `-o nosort' option, which forces
941 readline to not sort the completion matches.
942
943u. Bash now allows waiting for the most recent process substitution, since it
944 appears as $!.
945
946v. The `unset' builtin now unsets a scalar variable if it is subscripted with
947 a `0', analogous to the ${var[0]} expansion.
948
949w. `set -i' is no longer valid, as in other shells.
950
951x. BASH_SUBSHELL is now updated for process substitution and group commands
952 in pipelines, and is available with the same value when running any exit
953 trap.
954
955y. Bash now checks $INSIDE_EMACS as well as $EMACS when deciding whether or
956 not bash is being run in a GNU Emacs shell window.
957
958z. Bash now treats SIGINT received when running a non-builtin command in a
959 loop the way it has traditionally treated running a builtin command:
960 running any trap handler and breaking out of the loop.
961
962aa. New variable: EXECIGNORE; a colon-separate list of patterns that will
963 cause matching filenames to be ignored when searching for commands.
964
965bb. Aliases whose value ends in a shell metacharacter now expand in a way to
966 allow them to be `pasted' to the next token, which can potentially change
967 the meaning of a command (e.g., turning `&' into `&&').
968
9694. New Features in Readline
970
971a. The history truncation code now uses the same error recovery mechansim as
972 the history writing code, and restores the old version of the history file
973 on error. The error recovery mechanism handles symlinked history files.
974
975b. There is a new bindable variable, `enable-bracketed-paste', which enables
976 support for a terminal's bracketed paste mode.
977
978c. The editing mode indicators can now be strings and are user-settable
979 (new `emacs-mode-string', `vi-cmd-mode-string' and `vi-ins-mode-string'
980 variables). Mode strings can contain invisible character sequences.
981 Setting mode strings to null strings restores the defaults.
982
983d. Prompt expansion adds the mode string to the last line of a multi-line
984 prompt (one with embedded newlines).
985
986e. There is a new bindable variable, `colored-completion-prefix', which, if
987 set, causes the common prefix of a set of possible completions to be
988 displayed in color.
989
990f. There is a new bindable command `vi-yank-pop', a vi-mode version of emacs-
991 mode yank-pop.
992
993g. The redisplay code underwent several efficiency improvements for multibyte
994 locales.
995
996h. The insert-char function attempts to batch-insert all pending typeahead
997 that maps to self-insert, as long as it is coming from the terminal.
998
999i. rl_callback_sigcleanup: a new application function that can clean up and
1000 unset any state set by readline's callback mode. Intended to be used
1001 after a signal.