+This document details the changes between this version, bash-4.3-beta, and the
+previous version, bash-4.3-alpha.
+
+1. Changes to Bash
+
+a. Fixed a bug in the prompt directory name "trimming" code that caused
+ memory corruption and garbled the results.
+
+b. Fixed a bug that caused single quotes that resulted from $'...' quoting
+ in the replacement portion of a double-quoted ${word/pat/rep} expansion
+ to be treated as quote characters.
+
+c. Fixed a bug that caused assignment statements preceding a command word to
+ result in assignment statements following a declaration command to not be
+ expanded like assignment statements.
+
+d. Fixed a bug with variable search order in the presence of local variables
+ with the same name as variables in the temporary environment supplied to
+ a shell function.
+
+e. Fixed a bug that caused constructs like 1<(2) to be interpreted as process
+ substitutions even in an arithmetic context.
+
+f. Fixed several cases where `invisible' variables (variables with attributes
+ but no values, which are technically unset) were treated incorrectly.
+
+g. Fixed a bug that caused group commands in pipelines that were not the
+ last element to not run the EXIT trap.
+
+h. Fixed a bug that caused `unset -n' to not unset a nameref variable in
+ certain cases.
+
+i. Fixed the nameref circular reference checking to be less strict and only
+ disallow a nameref variable with the same value as its name at the global
+ scope.
+
+j. Fixed a bug that caused trap handlers to be executed recursively,
+ corrupting internal data structures.
+
+k. Fixed a bug that could result in bash not compiling if certain options were
+ not enabled.
+
+l. Fixed a bug that caused the arithmetic expansion code to attempt variable
+ assignments when operator precedence prohibited them.
+
+m. Word expansions like ${foo##bar} now understand indirect variable references.
+
+n. Fixed a bug that caused `declare -fp name' to not display a function
+ definition.
+
+o. Fixed a bug that caused asynchronous child processes to modify the stdin
+ file pointer when bash was using it to read a script, which modified the
+ parent's value as well.
+
+2. Changes to Readline
+
+a. Fixed a bug in vi mode that caused the arrow keys to set the saved last
+ vi-mode command to the wrong value.
+
+b. Fixed a bug that caused double-quoted strings to be scanned incorrectly
+ when being used as the value of a readline variable assignment.
+
+c. Fixed a bug with vi mode that prevented `.' from repeating a command
+ entered on a previous line (command).
+
+d. Fixed a bug that could cause completion to core dump if it was interrupted
+ by a signal.
+
+e. Readline now sends the meta-key enable string to the terminal if the
+ terminal has been successfully initialized.
+
+f. Readline now calls the signal hook after resizing the terminal when it
+ receives a SIGWINCH.
+
+g. Fixed a bug that could cause the history list code to perform an out-of-
+ bounds array reference if the history list is empty.
+
+3. New Features in Bash
+
+a. Shells started to run process substitutions now run any trap set on EXIT.
+
+b. There is now a configure-time option to enable the globasciiranges option
+ by default.
+
+c. The read builtin now checks its first variable argument for validity before
+ trying to read any input.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.3-alpha,
+and the previous version, bash-4.2-release.
+
+1. Changes to Bash
+
+a. Fixed several bugs concerning incomplete bracket expressions in filename
+ generation (globbing) patterns.
+
+b. Fixed a bug with single quotes and WORD in ${param op WORD} when running
+ in Posix mode.
+
+c. Fixed a bug that caused the pattern removal and pattern substitution word
+ expansions and case statement word expansion to not match the empty string.
+
+d. Fixed a bug that caused the tzset() function to not work after changing
+ the TZ enviroment variable.
+
+e. Fixed a bug that caused the RHS of an assignment statement to undergo
+ word splitting when it contained an unquoted $@.
+
+f. Fixed bugs that caused the shell to not react to a SIGINT sent while
+ waiting for a child process to exit.
+
+g. Bash doesn't try to run things in a signal handler context when it gets a
+ signal (SIGINT/SIGHUP/etc) while reading input using readline but still
+ be responsive to terminating signals.
+
+h. Fixed a bug that caused bash to go into an infinite loop if a filename
+ to be matched contained an invalid multibyte character.
+
+i. Fixed a bug that caused PS4 to end up being truncated if it is longer
+ than 128 bytes.
+
+j. Fixed a bug that caused brace expansion to not skip over double-quoted
+ command substitution.
+
+k. System-specific updates for: DJGPP, HP/UX, Mac OS X
+
+l. Fixed a bug in displaying commands that caused redirections to be associated
+ with the wrong part of the command.
+
+m. Fixed the coproc cleanup to unset the appropriate shell variables when a
+ coproc terminates.
+
+n. Fixed a bug that caused `fc' to dump core due to incorrect calculation of
+ the last history entry.
+
+o. Added workarounds for FreeBSD's implementation of faccessat/eaccess and
+ `test -x'.
+
+p. Fixed a bug that caused the shell to not match patterns containing
+ control-A.
+
+q. Fixed a bug that could result in doubled error messages when the `printf'
+ builtin got a write error.
+
+r. Fixed a bug that caused the shell to not correctly expand words containing
+ multiple consecutive quoted empty strings (""""""aa).
+
+s. Fixed a bug that caused the shell to not correctly parse multi-line
+ process substitutions containing comments and quoted strings.
+
+t. Fixed a problem with the bash malloc's internal idea of the top of the
+ memory heap that resulted in incorrect decisions to try to reduce the
+ break and give memory back to the kernel.
+
+u. There are changes to the expansions peformed on compound array assignments,
+ in an effort to make foo=( [ind1]=bar [ind2]=baz ) identical to
+ foo[ind1]=bar foo[ind2]=baz.
+
+v. Bash now reports an error if `read -a name' is used when `name' is an
+ existing associative array.
+
+w. Fixed a bug that allowed an attempted assignment to a readonly variable
+ in an arithmetic expression to not return failure.
+
+x. Fixed several bugs that caused completion functions to be invoked even when
+ the cursor was before the first word in the command.
+
+y. Fixed a bug that caused parsing a command substitution to overwrite the
+ parsing state associated with the complete input line.
+
+z. Fixed several bugs with the built-in snprintf replacement and field widths
+ and floating point.
+
+aa. Fixed a bug that caused incorrect offset calculations and input buffer
+ corruption when reading files longer than 2^31 bytes.
+
+bb. Fixed several bugs where bash performed arithmetic evaluation in contexts
+ where evaluation is suppressed.
+
+cc. Fixed a bug that caused bash to close FIFOs used for process substitution
+ too early when a shell function was executing, but protect against using
+ all file descriptors when the shell functions are invoked inside loops.
+
+dd. Added checks for printable (and non-printable) multibyte characters for
+ use in error messages.
+
+ee. Fixed a bug that caused ^O (operate-and-get-next) to not work correctly
+ at the end of the history list.
+
+ff. Fixed a bug that caused command-oriented history to incorrectly combine
+ here documents into one line.
+
+gg. Fixed a bug that caused importing SHELLOPTS from the environment into a
+ Posix-mode shell to print an error message and refuse to parse it.
+
+hh. Fixed a bug that caused the shell to delete an extra history entry when
+ using `history -s'.
+
+ii. Fixed a bug that caused floating-point exceptions and overflow errors
+ for the / and % arithmetic operators when using INTMAX_MIN and -1.
+
+jj. Fixed a bug that caused parsing errors when reading an arithmetic for
+ loop inside a command substitution.
+
+kk. Fixed a bug that caused a readonly function to be unset when unset was
+ called without the -f or -v option.
+
+ll. Fixed several bugs in the code that quotes characters special to regular
+ expressions when used in a quoted string on the RHS of the =~ operator
+ to the [[ command.
+
+mm. Fixed a bug that caused redirections to fail because the file descriptor
+ limit was set to a value less than 10.
+
+nn. Fixed a bug that caused the `read' builtin to execute code in a signal
+ handler context if read timed out.
+
+oo. Fixed a bug that caused extended globbing patterns to not match files
+ beginning with `.' correctly when a `.' was explicitly supplied in the
+ pattern.
+
+pp. Fixed a bug that caused key sequences longer than two characters to not
+ work when used with `bind -x'.
+
+qq. Fixed a bug that resulted in redefined functions having the wrong source
+ file names in BASH_SOURCE.
+
+rr. Fixed a bug that caused the read builtin to assign null strings to variables
+ when using `read -N', which caused core dumps when referenced
+
+ss. Fixed a bug that caused `bash -m script' to not enable job control while
+ running the script.
+
+tt. Fixed a bug that caused `printf -v var' to dump core when used with the
+ %b format code.
+
+uu. Fixed a bug that caused the shell to exit with the wrong status if -e was
+ active and the shell exited on a substitution error.
+
+vv. Fixed a bug that caused the shell to seg fault if an array variable with
+ the same name as an existing associative array was implicitly created by
+ an assignment (declare a[n]=b).
+
+ww. Fixed a bug that caused a redirection to misbehave if the number specified
+ for a file descriptor overflows an intmax_t.
+
+xx. Fixed several bugs with the handling of valid and invalid unicode character
+ values when used with the \u and \U escape sequences to printf and $'...'.
+
+yy. Fixed a bug that caused tildes to not be escaped in expanded filenames,
+ making them subject to later expansion.
+
+zz. When using the pattern substitution word expansion, bash now runs the
+ replacement string through quote removal, since it allows quotes in that
+ string to act as escape characters. This is not backwards compatible, so
+ it can be disabled by setting the bash compatibility mode to 4.2.
+
+aaa. Fixed the rest of the cases where the shell runs non-allowed code in a
+ signal handler context.
+
+bbb. Fixed a bug that caused spurious DEL characters (\177) to appear in
+ double-quoted expansion where the RHS is evaluated to the empty string.
+
+ccc. Fixed a bug that caused the use of the shell's internal random number
+ generator for temporary file names to perturb the random number
+ sequence.
+
+ddd. Fixed several bugs that caused `declare -g' to not set the right global
+ variables or to misbehave when declaring global indexed arrays.
+
+eee. Fixed a logic bug that caused extended globbing in a multibyte locale to
+ cause failures when using the pattern substititution word expansions.
+
+fff. Fixed a bug that caused the `lastpipe' option to corrupt the file
+ descriptor used to read the script.
+
+ggg. Fixed a bug that causes the shell to delete DEL characters in the
+ expanded value of variables used in the same quoted string as variables
+ that expand to nothing.
+
+hhh. Fixed a bug that caused the shell to assign the wrong value from an
+ assignment like (( x=7 )) when `x' was an existing array variable.
+
+iii. Fixed a bug that caused the shell to misbehave when generating sequences
+ and the boundary values overflow an intmax_t.
+
+jjj. Fixed a bug caused expansion errors if an expansion of "$@" appeared
+ next to another expansion (e.g.. "${@}${x}").
+
+kkk. Fixed a potential buffer overflow bug when performing /dev/fd expansion.
+
+lll. Fixed a bug that resulted in an extra semicolon being added to compound
+ assignments when they were added to the history list.
+
+mmm. Fixed a bug that caused mapfile to read one extra line from the input.
+
+nnn. Fixed a bug that caused the mail checking code to use uninitialized
+ values.
+
+ooo. Fixed a bug that prevented history timestamps from being saved if the
+ history comment character is unset.
+
+ppp. Fixed a bug that caused the case-modifying expansions to not work with
+ multibyte characters.
+
+qqq. Fixed a bug that caused the edit-and-execute bindable readline command
+ to see the wrong data if invoked in the middle of a multi-line quoted
+ string.
+
+rrr. Fixed a bug that resulted in the shell returning the wrong exit status
+ for a background command on systems that recycle PIDs very quickly.
+
+sss. Fixed a bug that caused asynchronous group commands to not run any EXIT
+ trap defined in the body of the command.
+
+ttt. Fixed a bug that caused `eval "... ; return"' to not clean up properly.
+
+uuu. Fixed a bug that caused the shell to dump core if `read' reads an escaped
+ IFS whitespace character.
+
+vvv. Fixed a bug that caused BASH_COMMAND to be set to an incorrect value when
+ executing a (...) subshell.
+
+www. Fixed a couple of pointer aliasing bugs with the token string in arithmetic
+ evaluation.
+
+xxx. Fixed a bug with parsing multi-line command substitutions when reading
+ the `do' keyword followed by whitespace.
+
+yyy. Fixed a bug that caused the shell to seg fault if the time given to the
+ printf %(...)T format overflowed the value accepted by localtime(3).
+
+zzz. Fixed a problem with displaying help topics in two columns when the
+ translated text contained multibyte characters.
+
+aaaa. Fixed a bug with the extended globbing pattern matcher where a `*' was
+ followed by a negated extended glob pattern.
+
+bbbb. Fixed a race condition with short-lived coproc creation and reaping that
+ caused the child process to be reaped before the various coproc shell
+ variables were initialized.
+
+cccc. Fixed a bug where turning off `errexit' in command substitution subshells
+ was not reflected in $SHELLOPTS.
+
+dddd. Partially fixed an inconsistency in how the shell treated shell
+ functions run from an EXIT trap.
+
+eeee. Fixed a bug in how the shell invalidated FIFOs used for process
+ substitution when executing a pipeline (once rather than in every child).
+
+ffff. Fixed a bug that occurred when expanding a special variable ($@, $*)
+ within double quotes and the expansion resulted in an empty string.
+
+gggg. Fixed bugs with executing a SIGCHLD trap handler to make sure that it's
+ executed once per exited child.
+
+hhhh. Fixed a bug that caused `declare' and `test' to find variables that
+ had been given attributes but not assigned values. Such variables are
+ not set.
+
+iiii. Fixed a bug that caused commands in process substitutions to not look in
+ the local temporary environment when performing word expansions.
+
+jjjj. Fixed several problems with globstar expansions (**/**) returning null
+ filenames and multiple instances of the same pathname.
+
+kkkk. Fixed an oversight that did not allow the exit status of `coproc' to
+ be inverted using `!'.
+
+llll. Fixed a bug that caused the -e option to be re-enabled using `set -e'
+ even when executing in a context where -e is ignored.
+
+mmmm. Fixed a (mostly theoretical) bug with input lines longer than SIZE_MAX.
+
+nnnn. Fixed a bug that could result in double evaluation of command
+ substitutions when they appear in failed redirections.
+
+oooo. Fixed a bug that could cause seg faults during `mapfile' callbacks if
+ the callback unsets the array variable mapfile is using.
+
+pppp. Fixed several problems with variable assignments using ${var:=value}
+ when the variable assignment is supposed to have side effects.
+
+qqqq. Fixed a bug that caused a failure of an assignment statement preceding a
+ builtin caused the next invocation of a special builtin to exit the shell.
+
+rrrr. Fixed several problems with IFS when it appears in the temporary environment
+ and is used in redirections.
+
+ssss. Fixed a problem that caused IFS changes using ${IFS:=value} to modify
+ how preceding expansions were split.
+
+tttt. Fixed a problem that caused subshells to not run an EXIT trap they set.
+
+uuuu. Fixed a problem that caused shells started in posix mode to attempt to
+ import shell functions with invalid names from the environment. We now
+ print a warning.
+
+vvvv. Worked around a kernel problem that caused SIGCHLD to interrupt open(2)
+ on a FIFO used for process substitution, even if the SIGCHLD handler was
+ installed with the SA_RESTART flag.
+
+wwww. Fixed a problem that resulted in inconsistent expansion of $* and ${a[*]}.
+
+xxxx. Fixed a problem that caused `read -t' to crash when interrupted by
+ SIGINT.
+
+yyyy. Fixed a problem that caused pattern removal to fail randomly because the
+ pattern matcher read beyond the end of a string.
+
+zzzz. Fixed a bug that caused core dumps when shell functions tried to create
+ local shadow copies of special variables like GROUPS.
+
+aaaaa. Fixed a bug that caused SIGTERM to be occasionally lost by children of
+ interactive shells when it arrived before the child process reset the
+ handler from SIG_DFL.
+
+bbbbb. Fixed a bug that caused redirections like <&n- to leave file descriptor
+ n closed if executed with a builtin command.
+
+ccccc. Fixed a bug that caused incorrect completion quoting when completing a
+ word containing a globbing character with `show-all-if-ambiguous' set.
+
+ddddd. Fixed a bug that caused printf's %q format specifier not to quote a
+ tilde even if it appeared in a location where it would be subject to
+ tilde expansion.
+
+2. Changes to Readline
+
+a. Fixed a bug that did not allow the `dd', `cc', or `yy' vi editing mode
+ commands to work on the entire line.
+
+b. Fixed a bug that caused redisplay problems with prompts longer than 128
+ characters and history searches.
+
+c. Fixed a bug that caused readline to try and run code to modify its idea
+ of the screen size in a signal handler context upon receiving a SIGWINCH.
+
+d. Fixed a bug that caused the `meta' key to be enabled beyond the duration
+ of an individual call top readline().
+
+e. Added a workaround for a wcwidth bug in Mac OS X that caused readline's
+ redisplay to mishandle zero-width combining characters.
+
+f. Fixed a bug that caused readline to `forget' part of a key sequence when
+ a multiple-key sequence caused it to break out of an incremental search.
+
+g. Fixed bugs that caused readline to execute code in a signal handler
+ context if interrupted while reading from the file system during completion.
+
+h. Fixed a bug that caused readline to `forget' part of a key sequence when
+ reading an unbound multi-character key sequence.
+
+i. Fixed a bug that caused Readline's signal handlers to be installed beyond
+ the bounds of a single call to readline().
+
+j. Fixed a bug that caused the `.' command to not redo the most recent `R'
+ command in vi mode.
+
+k. Fixed a bug that caused ignoring case in completion matches to result in
+ readline using the wrong match.
+
+l. Paren matching now works in vi insert mode.
+
+m. Fix menu-completion to make show-all-if-ambiguous and menu-complete-display-prefix
+ work together.
+
+n. Fixed a bug that didn't allow the `cc', `dd', or `yy' commands to be redone
+ in vi editing mode.
+
+o. Fixed a bug that caused the filename comparison code to not compare
+ multibyte characters correctly when using case-sensitive or case-mapping
+ comparisons.
+
+p. Fixed the input reading loop to call the input hook function only when there
+ is no terminal input available.
+
+q. Fixed a bug that caused binding a macro to a multi-character key sequence
+ where the sequence and macro value share a common prefix to not perform
+ the macro replacement.
+
+r. Fixed several redisplay errors with multibyte characters and prompts
+ containing invisible characters when using horizontal scrolling.
+
+s. Fixed a bug that caused redisplay errors when trying to overwrite
+ existing characters using multibyte characters.
+
+3. New Features in Bash
+
+a. The `helptopic' completion action now maps to all the help topics, not just
+ the shell builtins.
+
+b. The `help' builtin no longer does prefix substring matching, so `help read'
+ does not match `readonly'.
+
+c. The shell can be compiled to not display a message about processes that
+ terminate due to SIGTERM.
+
+d. Non-interactive shells now react to the setting of checkwinsize and set
+ LINES and COLUMNS after a foreground job exits.
+
+e. There is a new shell option, `globasciiranges', which, when set to on,
+ forces globbing range comparisons to use character ordering as if they
+ were run in the C locale.
+
+f. There is a new shell option, `direxpand', which makes filename completion
+ expand variables in directory names in the way bash-4.1 did.
+
+g. In Posix mode, the `command' builtin does not change whether or not a
+ builtin it shadows is treated as an assignment builtin.
+
+h. The `return' and `exit' builtins accept negative exit status arguments.
+
+i. The word completion code checks whether or not a filename containing a
+ shell variable expands to a directory name and appends `/' to the word
+ as appropriate. The same code expands shell variables in command names
+ when performing command completion.
+
+j. In Posix mode, it is now an error to attempt to define a shell function
+ with the same name as a Posix special builtin.
+
+k. When compiled for strict Posix conformance, history expansion is disabled
+ by default.
+
+l. The history expansion character (!) does not cause history expansion when
+ followed by the closing quote in a double-quoted string.
+
+m. `complete' and its siblings compgen/compopt now takes a new `-o noquote'
+ option to inhibit quoting of the completions.
+
+n. Setting HISTSIZE to a value less than zero causes the history list to be
+ unlimited (setting it 0 zero disables the history list).
+
+o. Setting HISTFILESIZE to a value less than zero causes the history file size
+ to be unlimited (setting it to 0 causes the history file to be truncated
+ to zero size).
+
+p. The `read' builtin now skips NUL bytes in the input.
+
+q. There is a new `bind -X' option to print all key sequences bound to Unix
+ commands.
+
+r. When in Posix mode, `read' is interruptible by a trapped signal. After
+ running the trap handler, read returns 128+signal and throws away any
+ partially-read input.
+
+s. The command completion code skips whitespace and assignment statements
+ before looking for the command name word to be completed.
+
+t. The build process has a new mechanism for constructing separate help files
+ that better reflects the current set of compilation options.
+
+u. The -nt and -ot options to test now work with files with nanosecond
+ timestamp resolution.
+
+v. The shell saves the command history in any shell for which history is
+ enabled and HISTFILE is set, not just interactive shells.
+
+w. The shell has `nameref' variables and new -n(/+n) options to declare and
+ unset to use them, and a `test -R' option to test for them.
+
+x. The shell now allows assigning, referencing, and unsetting elements of
+ indexed arrays using negative subscripts (a[-1]=2, echo ${a[-1]}) which
+ count back from the last element of the array.
+
+y. The {x}<word redirection feature now allows words like {array[ind]} and
+ can use variables with special meanings to the shell (e.g., BASH_XTRACEFD).
+
+z. There is a new CHILD_MAX special shell variable; its value controls the
+ number of exited child statues the shell remembers.
+
+aa. There is a new configuration option (--enable-direxpand-default) that
+ causes the `direxpand' shell option to be enabled by default.
+
+bb. Bash does not do anything special to ensure that the file descriptor
+ assigned to X in {x}<foo remains open after the block containing it
+ completes.
+
+cc. The `wait' builtin has a new `-n' option to wait for the next child to
+ change status.
+
+dd. The `printf' %(...)T format specifier now uses the current time if no
+ argument is supplied.
+
+ee. There is a new variable, BASH_COMPAT, that controls the current shell
+ compatibility level.
+
+ff. The `popd' builtin now treats additional arguments as errors.
+
+gg. The brace expansion code now treats a failed sequence expansion as a
+ simple string and will continue to expand brace terms in the remainder
+ of the word.
+
+4. New Features in Readline
+
+a. Readline is now more responsive to SIGHUP and other fatal signals when
+ reading input from the terminal or performing word completion but no
+ longer attempts to run any not-allowable functions from a signal handler
+ context.
+
+b. There are new bindable commands to search the history for the string of
+ characters between the beginning of the line and the point
+ (history-substring-search-forward, history-substring-search-backward)
+
+c. Readline allows quoted strings as the values of variables when setting
+ them with `set'. As a side effect, trailing spaces and tabs are ignored
+ when setting a string variable's value.
+
+d. The history library creates a backup of the history file when writing it
+ and restores the backup on a write error.
+
+e. New application-settable variable: rl_filename_stat_hook: a function called
+ with a filename before using it in a call to stat(2). Bash uses it to
+ expand shell variables so things like $HOME/Downloads have a slash
+ appended.
+
+f. New bindable function `print-last-kbd-macro', prints the most-recently-
+ defined keyboard macro in a reusable format.
+
+g. New user-settable variable `colored-stats', enables use of colored text
+ to denote file types when displaying possible completions (colored analog
+ of visible-stats).
+
+h. New user-settable variable `keyseq-timout', acts as an inter-character
+ timeout when reading input or incremental search strings.
+
+i. New application-callable function: rl_clear_history. Clears the history list
+ and frees all readline-associated private data.
+
+j. New user-settable variable, show-mode-in-prompt, adds a characters to the
+ beginning of the prompt indicating the current editing mode.
+
+k. New application-settable variable: rl_input_available_hook; function to be
+ called when readline detects there is data available on its input file
+ descriptor.
+
+l. Readline calls an application-set event hook (rl_signal_event_hook) after
+ it gets a signal while reading input (read returns -1/EINTR but readline
+ does not handle the signal immediately) to allow the application to handle
+ or otherwise note it. Not currently called for SIGHUP or SIGTERM.
+
+m. If the user-settable variable `history-size' is set to a value less than
+ 0, the history list size is unlimited.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.2-release,
+and the previous version, bash-4.2-rc2.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused some variables to be clobbered by a longjmp,
+ resulting in stack corruption.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.2-rc2,
+and the previous version, bash-4.2-rc1.
+
+1. Changes to Bash
+
+a. Changes to bash_directory_completion_hook so that it's assigned to the
+ readline rl_directory_rewrite_hook variable, which modifies the directory
+ name passed to opendir without modifying the directory name the user
+ typed.
+
+b. Fixed bug in select builtin that caused it to not terminate correctly if
+ the read timed out due to $TMOUT.
+
+c. Fixed a problem that resulted in non-repeatable sequences of random
+ numbers when RANDOM=0.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.2-rc1,
+and the previous version, bash-4.2-beta.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused some redirection errors to leak file descriptors.
+
+b. Fixed a bug that caused unary `+' and `-' arithmetic operators to have a
+ higher precedence than unary `!' and `~'.
+
+c. Fixed a bug that caused simple commands in a pipeline to affect the exit
+ status ($?) seen by subsequent pipeline commands.
+
+d. A number of cygwin-specific changes to avoid the use of text-mode files
+ and file access, and to make sure that \r is handled correctly.
+
+e. Fixed a bug that caused the read builtin to not return failure if an
+ attempt is made to assign to a readonly variable.
+
+f. Fixed a bug that caused some builtin usage messages to not be translated.
+
+g. Fixed a bug that caused the getopts builtin to not return failure if an
+ attempt is made to assign to a readonly variable. Now it returns 2.
+
+h. Fixed the cd and pwd builtins to return failure if PWD is readonly and
+ cannot be assigned to.
+
+i. Added code to check the return value of access(2) on Solaris systems,
+ since it returns success for executable tests (e.g., `test -x') when
+ run by root, even if the file permissions don't allow execution.
+
+2. Changes to Readline
+
+a. Fixed a bug that caused directory names in words to be completed to not
+ be dequoted correctly.
+
+3. New Features in Bash
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.2-beta,
+and the previous version, bash-4.2-alpha.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused the \W prompt string escape to not add a closing
+ NULL.
+
+b. Fixed a bug that caused partially-quoted words that were not subject to
+ word splitting to retained quoted NULLs.
+
+c. Added considerable efficiency speedups when pattern matching in multibyte
+ locales by skipping multibyte character functions where possible.
+
+d. Added considerable speedups to variable expansion when in multibyte locales.
+
+e. Fixed a bug that caused the expansion of $* when there are no positional
+ parameters to cause the shell to dump core when used in a pattern
+ matching context.
+
+f. Fixed a bug that caused variable expansions preceding regular builtins to
+ not change the shell environment during their execution.
+
+2. Changes to Readline
+
+a. Fixed a bug that made an explicit argument of 0 to yank-last-arg behave
+ as if it were a negative argument.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.2-alpha,
+and the previous version, bash-4.1-release.
+
+1. Changes to Bash
+
+a. Fixed a bug in the parser when processing alias expansions containing
+ quoted newlines.
+
+b. Fixed a memory leak in associative array expansion.
+
+c. Fixed a bug that caused quoted here-strings to be requoted when printed.
+
+d. Fixed a bug in arithmetic expansion that caused the index in an array
+ expansion to be evaluated twice under certain circumstances.
+
+e. Fixed several bugs with the expansion and display of variables that have
+ been given attributes but not values and are technically unset.
+
+f. Fixed a bug that caused core dumps when using filename completion that
+ expands to a filename containing a globbing character.
+
+g. Fixed a bug that caused assignment statements preceding a special builtin
+ when running in Posix mode to not persist after the builtin completed
+ when the special builtin was executed in a shell function without any
+ local variables.
+
+h. Fixed a bug that caused a command to remain in the hash table even after
+ `hash command' did not find anything if there was already an existing
+ hashed pathname.
+
+i. Fixed several bugs caused by executing unsafe functions from a signal
+ handler in the cases where a signal handler is executed immediately
+ rather than setting a flag for later execution.
+
+j. Fixed a bug that caused some internal flag variables to be set
+ incorrectly if `read -t' timed out.
+
+k. Fixed a Posix compatibility issue by making sure that a backslash escaping
+ a `}' within a double-quoted ${...} parameter expansion is removed as part
+ of the parameter expansion.
+
+l. Fixed a bug that caused execution of a trap to overwrite PIPESTATUS.
+
+m. Fixed a bug that caused here documents to not be displayed correctly
+ when attached to commands inside compound commands.
+
+n. Fixed a bug that caused the printf builtin to use the wrong precision
+ when using the `*' modifier.
+
+o. Fixed a bug that caused an arriving SIGCHLD to interrupt output functions
+ like those invoked by echo or printf.
+
+p. Changed to use a more robust mechanism than eaccess(2) when test is
+ checking filenames for execution permission.
+
+q. Fixed a bug that caused spurious semicolons to be added into the command
+ history in certain cases.
+
+r. Fixed a bug that caused the shell to free non-allocated memory when
+ unsetting element 0 of an associative array after it was assigned
+ implicitly.
+
+s. Fixed a bug that could cause the shell to dump core if using the `v'
+ vi editing command on a multi-line command.
+
+t. Fixed a bug that left FIFOs opened by process substitutions open long
+ enough to potentially cause file descriptor exhaustion when running a
+ shell function or shell builtin.
+
+u. Fixed a bug that caused the history expansion functions to not recognize
+ process substitution or extended glob patterns as single words.
+
+v. Fixed a bug that caused restricted shells to set a restricted command's
+ exit status incorrectly.
+
+w. Fixed a bug that caused bash to ignore the wrong set of filenames when
+ completing a command using the `complete-filename' readline command.
+
+x. Fixed a bug that caused a -PID argument following a -s sig or -n sig to
+ not be interpreted as a signal specification.
+
+y. Changed posix-mode behavior of a parse error in a `.' script or `eval'
+ command to exit the shell under Posix-specified conditions. Previous
+ versions printed a warning.
+
+z. Fixed a bug in \W prompt expansion that resulted in incorrect expansion
+ in the event of overlapping strings.
+
+aa. Fixed a bug that caused the := parameter expansion operator to return the
+ wrong value as the result of the expansion.
+
+bb. When in Posix mode, a single quote is not treated specially in a
+ double-quoted ${...} expansion, unless the expansion operator is
+ # or % or the non-Posix `//', `^', and `,'. In particular, it does
+ not define a new quoting context. This is from Posix interpretation 221.
+
+cc. Fixed a bug that inadvertently allowed program names containing slashes
+ to be entered into the command hash table.
+
+dd. Fixed a bug that caused the select builtin to incorrectly compute the
+ display width of the arguments in the presence of multibyte characters.
+
+ee. Fixed a bug that caused bash to not change the xtrace file descriptor if
+ BASH_XTRACEFD was found in the shell environment at startup.
+
+ff. Fixed a memory leak in the pattern removal parameter expansion.
+
+gg. Fixed a bug that caused SIGINT to fail to interrupt a nested loop if the
+ loop was in a pipeline.
+
+hh. Fixed a problem in $(...) parsing that caused the parser to add an extra
+ space to a here-document delimiter if the first word contained a `/'.
+
+ii. Fixed a bug that caused functions defined with the `function' reserved
+ word to require braces around the function body.
+
+jj. Fixed a bug that caused bash to dump core when a variable expansion being
+ used as an array subscript failed.
+
+kk. Fixed a bug that caused bash to dump core if the case-modification
+ expansions were used on a variable with a null value.
+
+ll. Fixed a bug that caused partially-quoted strings to be split incorrectly
+ if a variable with a null value was expanded within double quotes.
+
+mm. The pattern substitution word expansion has been sped up dramatically
+ when running in a locale with multibyte characters.
+
+nn. Fixed a bug that caused history -a to not write the correct lines to
+ the history file if all the new lines in the history list were added
+ since the last time the history file was read or written.
+
+oo. Fixed a bug that caused completion of a word with an unclosed `` command
+ substitution to set the prompt incorrectly.
+
+pp. Fixed a bug that caused extended globbing patterns in $HISTIGNORE or
+ $GLOBIGNORE to be incorrectly scanned.
+
+qq. Fixed a bug caused by closing file descriptors 3-20 on shell startup. The
+ shell now sets them to close-on-exec.
+
+rr. Fixed a bug that caused the exit status of `exec file' to be set incorrectly
+ if `file' was a directory.
+
+ss. Fixed a bug in the `.' builtin to make a non-interactive posix-mode shell
+ exit if the file argument to `.' is not found. Prefixing exec with
+ `command' makes the shell not exit. Posix requires this behavior.
+
+tt. Fixed a bug that caused `sh -c 'command exec; exit 1' to hang.
+
+uu. Fixed a bug in $(...) command substitution parsing that caused the shell
+ to treat backslash-newline incorrectly when parsing a comment.
+
+vv. Fixed bug that caused brace expansion sequence generation to misbehave
+ when supplied integers greater than 2**31 - 1.
+
+ww. Fixed a bug that caused failure to save file descriptors for redirections
+ to corrupt shell file descriptors.
+
+xx. Fixed a bug that caused bash-forward-shellword to not correctly handle
+ quoted strings.
+
+2. Changes to Readline
+
+a. Fixed a bug that caused the unconverted filename to be added to the list of
+ completions when the application specified filename conversion functions.
+
+b. Fixed a bug that caused the wrong filename to be passed to opendir when the
+ application has specified a filename dequoting function.
+
+c. Fixed a bug when repeating a character search in vi mode in the case where
+ there was no search to repeat.
+
+d. When show-all-if-ambiguous is set, the completion routines no longer insert
+ a common match prefix that is shorter than the text being completed.
+
+e. The full set of vi editing commands may now be used in callback mode.
+
+f. Fixed a bug that caused readline to not update its idea of the terminal
+ dimensions while running in `no-echo' mode.
+
+h. Fixed a bug that caused readline to dump core if an application called
+ rl_prep_terminal without setting rl_instream.
+
+i. Fixed a bug that caused meta-prefixed characters bound to incremental
+ search forward or backward to not be recognized if they were typed
+ subsequently.
+
+j. The incremental search code treats key sequences that map to the same
+ functions as (default) ^G, ^W, and ^Y as equivalent to those characters.
+
+k. Fixed a bug in menu-complete that caused it to misbehave with large
+ negative argument.
+
+l. Fixed a bug that caused vi-mode yank-last-arg to ring the bell when invoked
+ at the end of the line.
+
+3. New Features in Bash
+
+a. `exec -a foo' now sets $0 to `foo' in an executable shell script without a
+ leading #!.
+
+b. Subshells begun to execute command substitutions or run shell functions or
+ builtins in subshells do not reset trap strings until a new trap is
+ specified. This allows $(trap) to display the caller's traps and the
+ trap strings to persist until a new trap is set.
+
+c. `trap -p' will now show signals ignored at shell startup, though their
+ disposition still cannot be modified.
+
+d. $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.
+
+e. declare/typeset has a new `-g' option, which creates variables in the
+ global scope even when run in a shell function.
+
+f. test/[/[[ have a new -v variable unary operator, which returns success if
+ `variable' has been set.
+
+g. Posix parsing changes to allow `! time command' and multiple consecutive
+ instances of `!' (which toggle) and `time' (which have no cumulative
+ effect).
+
+h. Posix change to allow `time' as a command by itself to print the elapsed
+ user, system, and real times for the shell and its children.
+
+j. $((...)) is always parsed as an arithmetic expansion first, instead of as
+ a potential nested command substitution, as Posix requires.
+
+k. A new FUNCNEST variable to allow the user to control the maximum shell
+ function nesting (recursive execution) level.
+
+l. The mapfile builtin now supplies a third argument to the callback command:
+ the line about to be assigned to the supplied array index.
+
+m. The printf builtin has a new %(fmt)T specifier, which allows time values
+ to use strftime-like formatting.
+
+n. There is a new `compat41' shell option.
+
+o. The cd builtin has a new Posix-mandated `-e' option.
+
+p. Negative subscripts to indexed arrays, previously errors, now are treated
+ as offsets from the maximum assigned index + 1.
+
+q. Negative length specifications in the ${var:offset:length} expansion,
+ previously errors, are now treated as offsets from the end of the variable.
+
+r. Parsing change to allow `time -p --'.
+
+s. Posix-mode parsing change to not recognize `time' as a keyword if the
+ following token begins with a `-'. This means no more Posix-mode
+ `time -p'. Posix interpretation 267.
+
+t. There is a new `lastpipe' shell option that runs the last command of a
+ pipeline in the current shell context. The lastpipe option has no
+ effect if job control is enabled.
+
+u. History expansion no longer expands the `$!' variable expansion.
+
+v. Posix mode shells no longer exit if a variable assignment error occurs
+ with an assignment preceding a command that is not a special builtin.
+
+w. Non-interactive mode shells exit if -u is enabled and an attempt is made
+ to use an unset variable with the % or # expansions, the `//', `^', or
+ `,' expansions, or the parameter length expansion.
+
+x. Posix-mode shells use the argument passed to `.' as-is if a $PATH search
+ fails, effectively searching the current directory. Posix-2008 change.
+
+4. New Features in Readline
+
+a. The history library does not try to write the history filename in the
+ current directory if $HOME is unset. This closes a potential security
+ problem if the application does not specify a history filename.
+
+b. New bindable variable `completion-display-width' to set the number of
+ columns used when displaying completions.
+
+c. New bindable variable `completion-case-map' to cause case-insensitive
+ completion to treat `-' and `_' as identical.
+
+d. There are new bindable vi-mode command names to avoid readline's case-
+ insensitive matching not allowing them to be bound separately.
+
+e. New bindable variable `menu-complete-display-prefix' causes the menu
+ completion code to display the common prefix of the possible completions
+ before cycling through the list, instead of after.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.1-rc,
+and the previous version, bash-4.1-beta.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused printf to not return a partial value when it
+ encountered an error while converting an integer argument.
+
+b. Fixed a bug that caused setting one of the compatNN options to not
+ turn off the others.
+
+c. The (undocumented) --wordexp option is no longer included by default.
+
+d. Fixed a bug in conditional command execution that caused it to not
+ correctly ignore the exit status under certain circumstances.
+
+e. Added a configure-time check for correctly-working asprintf/snprintf.
+
+f. Fixed some problems with line number calculation and display when sourcing
+ a file in an interactive shell.
+
+g. Fixed a bug that caused the shell to crash when using `declare -A foo=bar'.
+
+h. Fixed a bug that caused an off-by-one error when calculating the directories
+ to display with the PROMPT_DIRTRIM option.
+
+2. Changes to Readline
+
+a. Fixed a bug that caused applications using the callback interface to not
+ react to SIGINT (or other signals) until another character arrived.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.1-beta,
+and the previous version, bash-4.1-alpha.
+
+1. Changes to Bash
+
+a. Fixed a bug in mapfile that caused the shell to crash if it was passed the
+ name of an associative array.
+
+b. Fixed a bug that caused the shell to incorrectly split case patterns if
+ they contained characters in $IFS.
+
+c. Fixed a bug that caused the shell to set $? to the wrong value when using
+ a construct ending with a variable assignment with set -x enabled and PS4
+ containing a command substitution.
+
+d. Fixed a bug that caused the shell to read commands incorrectly if an
+ expansion error occurred under certain conditions in a user-specified
+ subshell.
+
+e. Fixed a bug that caused the shell to set $? incorrectly if a parse error
+ occurred in an evaluation context ("eval", trap command, dot script, etc.)
+
+f. Fixed a bug that caused the shell to attempt command substitution
+ completion within a single-quoted string.
+
+g. Fixed a bug that caused the shell to insert an extra single quote during
+ word completion.
+
+h. Fixed a bug that caused the shell to crash if invoked with the environment
+ variable EMACS having a null value.
+
+i. Fixed a bug that caused bash to incorrectly report the presence of new
+ mail in a `maildir' environment.
+
+j. Fixed a bug that caused the shell to not recognize a here-document ending
+ delimiter inside a command substitution.
+
+k. Fixed a bug that caused the shell to crash when a a dynamic array variable
+ was assigned a scalar value.
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+a. The mapfile/readarray builtin no longer stores the commands it invokes via
+ callbacks in the history list.
+
+b. There is a new `compat40' shopt option.
+
+c. The < and > operators to [[ do string comparisons using the current locale
+ only if the compatibility level is greater than 40 (set to 41 by default).
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
This document details the changes between this version, bash-4.1-alpha,
and the previous version, bash-4.0-release.