+This document details the changes between this version, bash-4.0-rc1,
+and the previous version, bash-4.0-beta2.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused parsing errors when a $()-style command
+ substitution was follwed immediately by a quoted newline.
+
+b. Fixed a bug that caused extended shell globbing patterns beginning with
+ `*(' to not work when used with pattern substitution word expansions.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.0-beta2,
+and the previous version, bash-4.0-beta.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused failed word expansions to set $? but not
+ PIPESTATUS.
+
+b. Changed filename completion to quote the tilde in a filename with a
+ leading tilde that exists in the current directory.
+
+c. Fixed a bug that caused a file descriptor leak when performing
+ redirections attached to a compound command.
+
+d. Fixed a bug that caused expansions of $@ and $* to not exit the shell if
+ the -u option was enabled and there were no posititional parameters.
+
+e. Fixed a bug that resulted in bash not terminating immediately if a
+ terminating signal was received while performing output.
+
+f. Fixed a bug that caused the shell to crash after creating 256 process
+ substitutions during word completion.
+
+2. Changes to Readline
+
+a. Fixed a bug that caused redisplay errors when using prompts with invisible
+ characters and numeric arguments to a command in a multibyte locale.
+
+b. Fixed a bug that caused redisplay errors when using prompts with invisible
+ characters spanning more than two physical screen lines.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.0-beta,
+and the previous version, bash-4.0-beta.
+
+1. Changes to Bash
+
+a. Fixed a typo that caused a variable to be used before initialization
+ while parsing Posix-style command substitutions.
+
+b. Fixed a bug that caused stray ^? when the expansion of a parameter used
+ as part of a pattern removal expansion is empty, but part of a non-
+ empty string.
+
+c. Fixed a bug that could cause strings not converted to numbers by strtol
+ to be treated as if the conversion had been successful.
+
+d. The `return' builtin now accepts no options and requires a `--' before
+ a negative return value, as Posix requires.
+
+e. Fixed a bug that caused local variables to be created with the empty
+ string for a value rather than no value.
+
+f. Changed behavior so the shell now acts as if it received an interrupt
+ when a pipeline is killed by SIGINT while executing a list.
+
+g. Fixed a bug that caused `declare var' and `typeset var' to initialize
+ `var' to the empty string.
+
+h. Changed `bind' builtin to print a warning but proceed if invoked when
+ line editing is not active.
+
+i. Fixed a bug that caused the shell to exit when the `errexit' option is
+ set and a command in a pipeline returns a non-zero exit status.
+
+j. Fixed a bug that caused the shell to not run the exit trap in a command
+ run with `bash -c' under some circumstances.
+
+k. Fixed a bug that caused parser errors to occasionally not set $? when
+ running commands with `eval'.
+
+l. Fixed a bug that caused stray control characters when evaluating compound
+ array assignments containing $'\x7f' escapes.
+
+m. Fixed a bug that caused redirections involving file descriptor 10 as the
+ target to behave incorrectly.
+
+n. Fixed a bug that could cause memory to be freed multiple times when
+ assigning to COMP_WORDBREAKS.
+
+o. Fixed a bug that could cause NULL pointer dereferences when COMP_WORDBREAKS
+ was unset.
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+a. A value of 0 for the -t option to `read' now returns success if there is
+ input available to be read from the specified file descriptor.
+
+b. CDPATH and GLOBIGNORE are ignored when the shell is running in privileged
+ mode.
+
+c. New bindable readline functions shell-forward-word and shell-backward-word,
+ which move forward and backward words delimited by shell metacharacters
+ and honor shell quoting.
+
+d. New bindable readline functions shell-backward-kill-word and shell-kill-word
+ which kill words backward and forward, but use the same word boundaries
+ as shell-forward-word and shell-backward-word.
+
+4. New Features in Readline
+
+a. If the kernel supports it, readline displays special characters
+ corresponding to a keyboard-generated signal when the signal is received.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.0-alpha,
+and the previous version, bash-3.2-release.
+
+1. Changes to Bash
+
+a. Fixed several bugs in old-style `` command substitution parsing, including
+ comment parsing and quoted string handling.
+
+b. Fixed problems parsing arguments to the [[ command's =~ regular expression
+ matching operator: metacharacter and whitespace parsing.
+
+c. Fixed a bug that caused the shell to inappropriately reuse high-numbered
+ file descriptors it used internally.
+
+d. Fixed a bug in pattern replacement word expansions that caused a `/' as
+ the first character of an expanded pattern to be mistaken for a global
+ replacement specifier.
+
+e. Fixed several problems with the asprintf and snprintf replacement functions
+ that caused hangs and crashes.
+
+f. Fixed a bug in the calculation of the current and previous job that caused
+ it to refer to incorrect jobs.
+
+g. Fixed a bug in the check for the validity of a hashed command pathname that
+ caused unnecessary hash table deletions and additions.
+
+h. Fixed a bug that caused child processes to inherit the wrong value for $!.
+
+i. Fixed a bug that caused `.' to fail to read and execute commands from non-
+ regular files such as devices or named pipes.
+
+j. Fixed a bug in printf formatting for the %x and %X expansions that occurred
+ on some systems.
+
+k. Fixed a bug that caused the shell to crash when creating temporary files if
+ $TMPDIR named a non-writable directory.
+
+l. Fixed a bug that caused the shell to ignore $TMPDIR when creating temporary
+ files under some circumstances.
+
+m. Fixed a bug that caused named pipes created by process substitution to not
+ be cleaned up.
+
+n. Fixed a bug that caused HISTTIMEFORMAT to not be honored when it appeared
+ in the initial shell environment.
+
+o. Fixed several bugs in the expansion of $* and $@ (quoted and unquoted)
+ when IFS is null or contains non-whitespace characters; the same changes
+ apply to arrays subscripted with * or @.
+
+p. Fixed several problems with pattern substitution expansions on the
+ positional parameters and arrays subscripted with * or @ that occurred
+ when $IFS was set to the empty string.
+
+q. Made a change to the default locale initialization code that should
+ result in better behavior from the locale-aware library functions.
+
+r. Fixed a bug that caused compacting the jobs list to drop jobs.
+
+s. Fixed a bug that caused jumps back to the top-level processing loop from
+ a builtin command to leave the shell in an inconsistent state.
+
+t. Fixed a bug that caused characters that would be escaped internally to be
+ doubled when escaped with a backslash.
+
+u. Fixed the initialization of mailboxes to not cause maildirs to be read
+ (and stat(2) called for every message file) at shell startup.
+
+v. Fixed a bug that caused the shell to not display $PS2 when the read builtin
+ reads a line continued with a backslash.
+
+w. Fixed a bug that caused errors in word splitting when $IFS contained
+ characters used for internal quoting.
+
+x. Fixed bugs that caused problems with output from shell builtins not being
+ completely displayed on some systems.
+
+y. Fixed a bug that caused output to be lost when a redirection is acting on
+ the shell's output file descriptor.
+
+z. Fixed bugs caused by shell builtins not checking for all write errors.
+
+aa. Fixed a problem that caused the shell to dump core if expansions on the
+ pattern passed to the pattern removal word expansions resulted in expansion
+ errors.
+
+bb. Fixed a bug that caused bash to loop infinitely after creating and
+ waiting for 4096 jobs.
+
+cc. Fixed a bug that caused bash to lose the status of a background job under
+ certain circumstances.
+
+dd. Fixed a bug that caused bash to not look in the temporary environment
+ when performing variable lookup under certain circumstances.
+
+ee. Fixed a bug that caused bash to close file descriptors greater than 10
+ when they were used in redirections.
+
+ff. Fixed a problem that caused the shell to attempt to read from the standard
+ input when called as `bash -i script'.
+
+gg. Fixed a memory leak and variable initialization problems when the -v option
+ was supplied to `printf' that could cause incorrect results.
+
+hh. Fixed a bug that caused the `read' builtin to count bytes when the -n option
+ was supplied, rather than (possibly multibyte) characters.
+
+ii. Fixed a bug when displaying a function due to not converting the function
+ to an external form.
+
+jj. Changed job control initialization to ensure that the shell has a tty
+ as its controlling terminal before enabling job control.
+
+kk. Fixed a bug with the `test' builtin that caused it to misinterpret
+ arguments beginning with `-' but containing more than one character.
+
+ll. Fixed bug that could cause the shell to dump core in certain cases where
+ a command sets the SIGINT disposition to the default.
+
+mm. Fixed a bug in the pattern replacement (affecting both word expansion
+ and the `fc' builtin) that occurred when the pattern and replacement
+ strings were empty.
+
+nn. Fixed a bug that caused an arithmetic evaluation error to disable all
+ further evaluation.
+
+oo. Fixed a bug in pathname expansion that caused it to interpret backslashes
+ in the pathname as quoting characters.
+
+pp. Fixed a bug in the replacement getcwd() implementation that could cause
+ memory to be overwritten.
+
+qq. When in Posix mode, the `ulimit' builtin now uses a block size of 512 for
+ the `-c' and `-f' options.
+
+rr. Brace expansion now allows process substitutions to pass through unchanged.
+
+ss. Fixed a problem in the command name completion code to avoid quoting
+ escaped special characters twice when the command name begins with a tilde.
+
+tt. Fixed a problem in the printf builtin that resulted in single-byte
+ output for the "'" escape, even when using multibyte characters.
+
+uu. Fixed a bug that caused the failure exit status to be lost when redirections
+ attached to a compound command failed.
+
+vv. Fixed a bug that caused the internal random number generator to not be
+ re-seeded correctly when creating a subshell.
+
+ww. Fixed a bug that could cause the bash replacement getcwd to overwrite
+ memory.
+
+xx. Fixed a bug that caused the shell to not receive SIGINT if it was sent
+ while the shell was waiting for a command substitution to terminate, and
+ make sure the exit status is correct when it does.
+
+yy. Fixed a bug that resulted in the second and subsequent children spawned
+ by a shell begun to run a command substitution being placed into the
+ wrong process group.
+
+zz. Fixed a bug that caused the results of successful tilde expansion to be
+ subject to pathname expansion and word splitting.
+
+aaa. Fixed a bug that could cause the shell to hang if it encountered an
+ error that caused it to jump back to the top processing loop during a
+ command substitution or `eval' command.
+
+bbb. Fixed a bug that caused the `read' builtin to use the tty's attributes
+ instead of those of the file descriptor passed with the -u option when
+ processing the -n and -d options.
+
+ccc. Fixed a bug that caused incorrect expansion of ${array[@]:foo} if the
+ first character of $IFS was not whitespace.
+
+ddd. Fixed a bug that occurred when scanning for the ending delimiter of a
+ ${parameter/pat/sub} expansion.
+
+eee. Fixed a bug that caused the shell to inappropriately expand command
+ substitutions in words when expanding directory names for completion.
+
+fff. Fixed a bug that caused the `fc' builtin to look too far back in the
+ history list under certain circumstances.
+
+ggg. Fixed a bug that caused a shell running in Posix mode to search $PWD for
+ a file specified as an argument to source/. when the file was not found
+ in $PATH.
+
+hhh. Fixed a bug that caused the shell to modify the case of a command word
+ found via command completion when the shell was performing case-
+ insensitive completion.
+
+iii. Fixed a bug that caused the shell to search $PATH for an argument to
+ source/. even when it contained a `/'.
+
+jjj. Fixed a bug that caused brace expansion to misorder expansions when the
+ locale did not have a collating order like aAbBcC...zZ.
+
+kkk. Fixed a bug that did not allow `set +o history' to have any effect when
+ run in a startup file or from a sourced file.
+
+lll. Fixed a bug with the precedence of the ?: conditional arithmetic operator.
+
+mmm. Fixed a bug that caused side effects of temporary variable assignments
+ to persist in the shell environment.
+
+nnn. Fixed a bug that caused the terminal to be left in non-canonical mode
+ when using editing commands that invoke the an editor on the current
+ command line.
+
+ooo. Fixed a bug that caused globbing characters and characters in $IFS to not
+ be quoted appropriately when displaying assignment statements.
+
+ppp. Fixed a bug that caused the `-e' option to be inherited when sourcing a
+ file or evaluating a command with `eval' even if the return value of the
+ command was supposed to be ignored.
+
+qqq. Fixed a bug that caused the shell to attempt to created variables with
+ invalid names if such names appeared in the initial environment.
+
+rrr. Fixed a bug with quote removal in strings where the final character is a
+ backslash.
+
+sss. Fixed a bug that caused the effects of special variables to persist even
+ when the variables were unset as part of the shell reinitializing itself
+ to execute a shell script.
+
+ttt. Fixed a bug that caused the history to not be saved after `history -c' or
+ `history -d' was executed until a sufficient number of commands had been
+ saved to the history.
+
+uuu. Bash now parses command substitutions according to Posix rules: parsing
+ the command contained in $() to find the closing delimiter.
+
+vvv. Fixed a bug that caused traps on SIGCHLD set in a SIGCHLD handler to
+ not persist.
+
+www. Fixed a bug that didn't allow SIGCHLD to interrupt the `wait' builtin
+ as Posix specifies.
+
+xxx. Invalid numeric arguments to shell builtins no longer cause the shell to
+ short-circuit any executing compound command.
+
+yyy. Fixed a bug that caused the exit status to be lost when `break' was
+ used to short-circuit a loop's execution.
+
+zzz. Fixed a bug that caused stray ^? characters to be left in expansions of
+ "${array[*]}".
+
+aaaa. Bash now prints better error messages for here documents terminated by
+ EOF and for identifying the incorrect token in an invalid arithmetic
+ expression.
+
+bbbb. Fixed a bug in the variable length word expansion that caused it to
+ incorrectly calculate the number of multibyte characters.
+
+cccc. Fixed a race condition that could result in the top-level shell setting
+ the terminal's process group to an incorrect value if the process
+ group was changed by a child of a child of the shell.
+
+dddd. Fixed a bug that caused here documents belonging to commands within a
+ compound command to be displayed in a syntactially-incorrect form, which
+ prevented them from being re-read as input.
+
+eeee. The shell displays more warnings about failures to set the locale.
+
+ffff. Fixed a bug that caused the body of a here-document to not be saved to
+ the history list.
+
+gggg. Fixed a bug that caused configure to incorrectly conclude that FreeBSD
+ had /dev/fd available, resulting in problems with process substitution.
+
+2. Changes to Readline
+
+a. Fixed a number of redisplay errors in environments supporting multibyte
+ characters.
+
+b. Fixed bugs in vi command mode that caused motion commands to inappropriately
+ set the mark.
+
+c. When using the arrow keys in vi insertion mode, readline allows movement
+ beyond the current end of the line (unlike command mode).
+
+d. Fixed bugs that caused readline to loop when the terminal has been taken
+ away and reads return -1/EIO.
+
+e. Fixed bugs in redisplay occurring when displaying prompts containing
+ invisible characters.
+
+f. Fixed a bug that caused the completion append character to not be reset to
+ the default after an application-specified completion function changed it.
+
+g. Fixed a problem that caused incorrect positioning of the cursor while in
+ emacs editing mode when moving forward at the end of a line while using
+ a locale supporting multibyte characters.
+
+h. Fixed an off-by-one error that caused readline to drop every 511th
+ character of buffered input.
+
+i. Fixed a bug that resulted in SIGTERM not being caught or cleaned up.
+
+j. Fixed redisplay bugs caused by multiline prompts with invisible characters
+ or no characters following the final newline.
+
+k. Fixed redisplay bug caused by prompts consisting solely of invisible
+ characters.
+
+l. Fixed a bug in the code that buffers characters received very quickly in
+ succession which caused characters to be dropped.
+
+m. Fixed a bug that caused readline to reference uninitialized data structures
+ if it received a SIGWINCH before completing initialzation.
+
+n. Fixed a bug that caused the vi-mode `last command' to be set incorrectly
+ and therefore unrepeatable.
+
+o. Fixed a bug that caused readline to disable echoing when it was being used
+ with an output file descriptor that was not a terminal.
+
+p. Readline now blocks SIGINT while manipulating internal data structures
+ during redisplay.
+
+q. Fixed a bug in redisplay that caused readline to segfault when pasting a
+ very long line (over 130,000 characters).
+
+r. Fixed bugs in redisplay when using prompts with no visible printing
+ characters.
+
+3. New Features in Bash
+
+a. When using substring expansion on the positional parameters, a starting
+ index of 0 now causes $0 to be prefixed to the list.
+
+b. The `help' builtin now prints its columns with entries sorted vertically
+ rather than horizontally.
+
+c. There is a new variable, $BASHPID, which always returns the process id of
+ the current shell.
+
+d. There is a new `autocd' option that, when enabled, causes bash to attempt
+ to `cd' to a directory name that is supplied as the first word of a
+ simple command.
+
+e. There is a new `checkjobs' option that causes the shell to check for and
+ report any running or stopped jobs at exit.
+
+f. The programmable completion code exports a new COMP_TYPE variable, set to
+ a character describing the type of completion being attempted.
+
+g. The programmable completion code exports a new COMP_KEY variable, set to
+ the character that caused the completion to be invoked (e.g., TAB).
+
+h. If creation of a child process fails due to insufficient resources, bash
+ will try again several times before reporting failure.
+
+i. The programmable completion code now uses the same set of characters as
+ readline when breaking the command line into a list of words.
+
+j. The block multiplier for the ulimit -c and -f options is now 512 when in
+ Posix mode, as Posix specifies.
+
+k. Changed the behavior of the read builtin to save any partial input received
+ in the specified variable when the read builtin times out. This also
+ results in variables specified as arguments to read to be set to the empty
+ string when there is no input available. When the read builtin times out,
+ it returns an exit status greater than 128.
+
+l. The shell now has the notion of a `compatibility level', controlled by
+ new variables settable by `shopt'. Setting this variable currently
+ restores the bash-3.1 behavior when processing quoted strings on the rhs
+ of the `=~' operator to the `[[' command.
+
+m. The `ulimit' builtin now has new -b (socket buffer size) and -T (number
+ of threads) options.
+
+n. The -p option to `declare' now displays all variable values and attributes
+ (or function values and attributes if used with -f).
+
+o. There is a new `compopt' builtin that allows completion functions to modify
+ completion options for existing completions or the completion currently
+ being executed.
+
+p. The `read' builtin has a new -i option which inserts text into the reply
+ buffer when using readline.
+
+q. A new `-E' option to the complete builtin allows control of the default
+ behavior for completion on an empty line.
+
+r. There is now limited support for completing command name words containing
+ globbing characters.
+
+s. Changed format of internal help documentation for all builtins to roughly
+ follow man page format.
+
+t. The `help' builtin now has a new -d option, to display a short description,
+ and a -m option, to print help information in a man page-like format.
+
+u. There is a new `mapfile' builtin to populate an array with lines from a
+ given file.
+
+v. If a command is not found, the shell attempts to execute a shell function
+ named `command_not_found_handle', supplying the command words as the
+ function arguments.
+
+w. There is a new shell option: `globstar'. When enabled, the globbing code
+ treats `**' specially -- it matches all directories (and files within
+ them, when appropriate) recursively.
+
+x. There is a new shell option: `dirspell'. When enabled, the filename
+ completion code performs spelling correction on directory names during
+ completion.
+
+y. The `-t' option to the `read' builtin now supports fractional timeout
+ values.
+
+z. Brace expansion now allows zero-padding of expanded numeric values and
+ will add the proper number of zeroes to make sure all values contain the
+ same number of digits.
+
+aa. There is a new bash-specific bindable readline function: `dabbrev-expand'.
+ It uses menu completion on a set of words taken from the history list.
+
+bb. The command assigned to a key sequence with `bind -x' now sets two new
+ variables in the environment of the executed command: READLINE_LINE_BUFFER
+ and READLINE_POINT. The command can change the current readline line
+ and cursor position by modifying READLINE_LINE_BUFFER and READLINE_POINT,
+ respectively.
+
+cc. There is a new >>& redirection operator, which appends the standard output
+ and standard error to the named file.
+
+dd. The parser now understands `|&' as a synonym for `2>&1 |', which redirects
+ the standard error for a command through a pipe.
+
+ee. The new `;&' case statement action list terminator causes execution to
+ continue with the action associated with the next pattern in the
+ statement rather than terminating the command.
+
+ff. The new `;;&' case statement action list terminator causes the shell to
+ test the next set of patterns after completing execution of the current
+ action, rather than terminating the command.
+
+gg. The shell understands a new variable: PROMPT_DIRTRIM. When set to an
+ integer value greater than zero, prompt expansion of \w and \W will
+ retain only that number of trailing pathname components and replace
+ the intervening characters with `...'.
+
+hh. There are new case-modifying word expansions: uppercase (^[^]) and
+ lowercase (,[,]). They can work on either the first character or
+ array element, or globally. They accept an optional shell pattern
+ that determines which characters to modify. There is an optionally-
+ configured feature to include capitalization operators.
+
+ii. The shell provides associative array variables, with the appropriate
+ support to create, delete, assign values to, and expand them.
+
+jj. The `declare' builtin now has new -l (convert value to lowercase upon
+ assignment) and -u (convert value to uppercase upon assignment) options.
+ There is an optionally-configurable -c option to capitalize a value at
+ assignment.
+
+kk. There is a new `coproc' reserved word that specifies a coprocess: an
+ asynchronous command run with two pipes connected to the creating shell.
+ Coprocs can be named. The input and output file descriptors and the
+ PID of the coprocess are available to the calling shell in variables
+ with coproc-specific names.
+
+4. New Features in Readline
+
+a. A new variable, rl_sort_completion_matches; allows applications to inhibit
+ match list sorting (but beware: some things don't work right if
+ applications do this).
+
+b. A new variable, rl_completion_invoking_key; allows applications to discover
+ the key that invoked rl_complete or rl_menu_complete.
+
+c. The functions rl_block_sigint and rl_release_sigint are now public and
+ available to calling applications who want to protect critical sections
+ (like redisplay).
+
+d. The functions rl_save_state and rl_restore_state are now public and
+ available to calling applications; documented rest of readline's state
+ flag values.
+
+e. A new user-settable variable, `history-size', allows setting the maximum
+ number of entries in the history list.
+
+f. There is a new implementation of menu completion, with several improvements
+ over the old; the most notable improvement is a better `completions
+ browsing' mode.
+
+g. The menu completion code now uses the rl_menu_completion_entry_function
+ variable, allowing applications to provide their own menu completion
+ generators.
+
+h. There is support for replacing a prefix of a pathname with a `...' when
+ displaying possible completions. This is controllable by setting the
+ `completion-prefix-display-length' variable. Matches with a common prefix
+ longer than this value have the common prefix replaced with `...'.
+
+i. There is a new `revert-all-at-newline' variable. If enabled, readline will
+ undo all outstanding changes to all history lines when `accept-line' is
+ executed.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.2-release,
+and the previous version, bash-3.2-beta.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused the temporary environment passed to a command to
+ affect the shell's environment under certain circumstances.
+
+b. Fixed a bug in the printf builtin that caused the %q format specifier to
+ ignore empty string arguments.
+
+c. Improved multibyte character environment detection at configuration time.
+
+d. Fixed a bug in the read builtin that left spurious escape characters in the
+ input after processing backslashes when assigning to an array variable.
+
+2. Changes to Readline
+
+a. Fixed a redisplay bug that occurred in multibyte-capable locales when the
+ prompt was one character longer than the screen width.
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.2-beta,
+and the previous version, bash-3.2-alpha.
+
+1. Changes to Bash
+
+a. Changed the lexical analyzer to treat locale-specific blank characters as
+ white space.
+
+b. Fixed a bug in command printing to avoid confusion between redirections and
+ process substitution.
+
+c. Fixed problems with cross-compiling originating from inherited environment
+ variables.
+
+d. Added write error reporting to printf builtin.
+
+e. Fixed a bug in the variable expansion code that could cause a core dump in
+ a multi-byte locale.
+
+f. Fixed a bug that caused substring expansion of a null string to return
+ incorrect results.
+
+g. BASH_COMMAND now retains its previous value while executing commands as the
+ result of a trap, as the documentation states.
+
+2. Changes to Readline
+
+a. Fixed a bug with prompt redisplay in a multi-byte locale to avoid redrawing
+ the prompt and input line multiple times.
+
+b. Fixed history expansion to not be confused by here-string redirection.
+
+c. Readline no longer treats read errors by converting them to newlines, as
+ it does with EOF. This caused partial lines to be returned from readline().
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.2-alpha,
+and the previous version, bash-3.1-release.
+
+1. Changes to Bash
+
+a. Fixed a source bug that caused the minimal configuration to not compile.
+
+b. Fixed memory leaks in error handling for the `read' builtin.
+
+c. Changed the [[ and (( compound commands to set PIPESTATUS with their exit
+ status.
+
+d. Fixed some parsing problems with compound array assignments.
+
+e. Added additional configuration changes for: NetBSD (incomplete multibyte
+ character support)
+
+f. Fixed two bugs with local array variable creation when shadowing a variable
+ of the same name from a previous context.
+
+g. Fixed the `read' builtin to restore the correct set of completion functions
+ if a timeout occurs.
+
+h. Added code to defer the initialization of HISTSIZE (and its stifling of the
+ history list) until the history file is loaded, allowing a startup file to
+ override the default value.
+
+i. Tightened up the arithmetic expression parsing to produce better error
+ messages when presented with invalid operators.
+
+j. Fixed the cross-compilation support to build the signal list at shell
+ invocation rather than compile time if cross-compiling.
+
+k. Fixed multibyte support for non-gcc compilers (or compilers that do not
+ allow automatic array variable sizing based on a non-constant value).
+
+l. Several fixes to the code that manages the list of terminated jobs and
+ their exit statuses, and the list of active and recently-terminated jobs
+ to avoid pid aliasing/wraparound and allocation errors.
+
+m. Fixed a problem that allowed scripts to die due to SIGINT while waiting
+ for children, even when started in the background or otherwise ignoring
+ SIGINT.
+
+n. Fixed a bug that caused shells invoked as -/bin/bash from not being
+ recognized as login shells.
+
+o. Fixed a problem that caused shells in the background to give the terminal
+ to a process group other than the foreground shell process group.
+
+p. Fixed a problem with extracting the `varname' in ${#varname}.
+
+q. Fixed the code that handles SIGQUIT to not exit immediately -- thereby
+ calling functions that may not be called in a signal handler context --
+ but set a flag and exit afterward (like SIGINT).
+
+r. Changed the brace expansion code to skip over braces that don't begin a
+ valid matched brace expansion construct.
+
+s. Fixed `typeset' and `declare' to not require that their shell function
+ operands to be valid shell identifiers.
+
+t. Changed `test' to use access(2) with a temporary uid/euid swap when testing
+ file attributes and running setuid, and access(2) in most other cases.
+
+u. Changed completion code to not attempt command name completion on a line
+ consisting solely of whitespace when no_empty_command_completion is set.
+
+v. The `hash' builtin now prints nothing in posix mode when the hash table is
+ empty, and prints a message to that effect to stdout instead of stderr
+ when not in posix mode.
+
+w. Fixed a bug in the extended pattern matching code that caused it to fail to
+ match periods with certain patterns.
+
+x. Fixed a bug that caused the shell to dump core when performing filename
+ generation in directories with thousands of files.
+
+y. Returned to the original Bourne shell rules for parsing ``: no recursive
+ parsing of embedded quoted strings or ${...} constructs.
+
+z. The inheritence of the DEBUG, RETURN, and ERR traps is now dependent only
+ on the settings of the `functrace' and `errtrace' shell options, rather
+ than whether or not the shell is in debugging mode.
+
+aa. Fixed a problem with $HOME being converted to ~ in the expansion of
+ members of the DIRSTACK array.
+
+bb. Fixed a problem with quoted arguments to arithmetic expansions in certain
+ constructs.
+
+cc. The command word completion code now no longer returns matching directories
+ while searching $PATH.
+
+dd. Fixed a bug with zero-padding and precision handling in snprintf()
+ replacement.
+
+ee. Fixed a bug that caused the command substitution code not to take embedded
+ shell comments into account.
+
+ff. Fixed a bug that caused $((...);(...)) to be misinterpreted as an
+ arithmetic substitution.
+
+gg. Fixed a bug in the prompt expansion code that inappropriately added a
+ \001 before a \002 under certain circumstances.
+
+hh. Fixed a bug that caused `unset LANG' to not properly reset the locale
+ (previous versions would set the locale back to what it was when bash
+ was started rather than the system's "native" locale).
+
+ii. Fixed a bug that could cause file descriptors > 10 to not be closed even
+ when closed explicitly by a script.
+
+jj. Fixed a bug that caused single quotes to be stripped from ANSI-C quoting
+ inside double-quoted command substitutions.
+
+kk. Fixed a bug that could cause core dumps when `return' was executed as the
+ last element of a pipeline inside a shell function.
+
+ll. Fixed a bug that caused DEBUG trap strings to overwrite commands stored in
+ the jobs list.
+
+2. Changes to Readline
+
+a. Fixed a problem that caused segmentation faults when using readline in
+ callback mode and typing consecutive DEL characters on an empty line.
+
+b. Fixed several redisplay problems with multibyte characters, all having to
+ do with the different code paths and variable meanings between single-byte
+ and multibyte character redisplay.
+
+c. Fixed a problem with key sequence translation when presented with the
+ sequence \M-\C-x.
+
+d. Fixed a problem that prevented the `a' command in vi mode from being
+ undone and redone properly.
+
+e. Fixed a problem that prevented empty inserts in vi mode from being undone
+ properly.
+
+f. Fixed a problem that caused readline to initialize with an incorrect idea
+ of whether or not the terminal can autowrap.
+
+g. Fixed output of key bindings (like bash `bind -p') to honor the setting of
+ convert-meta and use \e where appropriate.
+
+h. Changed the default filename completion function to call the filename
+ dequoting function if the directory completion hook isn't set. This means
+ that any directory completion hooks need to dequote the directory name,
+ since application-specific hooks need to know how the word was quoted,
+ even if no other changes are made.
+
+i. Fixed a bug with creating the prompt for a non-interactive search string
+ when there are non-printing characters in the primary prompt.
+
+j. Fixed a bug that caused prompts with invisible characters to be redrawn
+ multiple times in a multibyte locale.
+
+k. Fixed a bug that could cause the key sequence scanning code to return the
+ wrong function.
+
+l. Fixed a problem with the callback interface that caused it to fail when
+ using multi-character keyboard macros.
+
+m. Fixed a bug that could cause a core dump when an edited history entry was
+ re-executed under certain conditions.
+
+n. Fixed a bug that caused readline to reference freed memory when attmpting
+ to display a portion of the prompt.
+
+3. New Features in Bash
+
+a. Changed the parameter pattern replacement functions to not anchor the
+ pattern at the beginning of the string if doing global replacement - that
+ combination doesn't make any sense.
+
+b. When running in `word expansion only' mode (--wordexp option), inhibit
+ process substitution.
+
+c. Loadable builtins now work on MacOS X 10.[34].
+
+d. Shells running in posix mode no longer set $HOME, as POSIX requires.
+
+e. The code that checks for binary files being executed as shell scripts now
+ checks only for NUL rather than any non-printing character.
+
+f. Quoting the string argument to the [[ command's =~ operator now forces
+ string matching, as with the other pattern-matching operators.
+
+4. New Features in Readline
+
+a. Calling applications can now set the keyboard timeout to 0, allowing
+ poll-like behavior.
+
+b. The value of SYS_INPUTRC (configurable at compilation time) is now used as
+ the default last-ditch startup file.
+
+c. The history file reading functions now allow windows-like \r\n line
+ terminators.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-release,
+and the previous version, bash-3.1-rc2.
+
+1. Changes to Readline
+
+a. Several changes to the multibyte redisplay code to fix problems with
+ prompts containing invisible characters.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-rc2,
+and the previous version, bash-3.1-rc1.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused a DEBUG trap to overwrite a command string that's
+ eventually attached to a background job.
+
+b. Changed some code so that filenames with leading tildes with spaces in the
+ name aren't tilde-expanded by the bash completion code.
+
+c. Fixed a bug that caused the pushd builtin to fail to change to
+ directories with leading `-'.
+
+d. Fixed a small memory leak in the programmable completion code.
+
+2. Changes to Readline
+
+a. Fixed a redisplay bug caused by moving the cursor vertically to a line
+ with invisible characters in the prompt in a multibyte locale.
+
+b. Fixed a bug that could cause the terminal special chars to be bound in the
+ wrong keymap in vi mode.
+
+3. New Features in Bash
+
+a. If compiled for strict POSIX conformance, LINES and COLUMNS may now
+ override the true terminal size.
+
+4. New Features in Readline
+
+a. A new external application-controllable variable that allows the LINES
+ and COLUMNS environment variables to set the window size regardless of
+ what the kernel returns.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-rc1,
+and the previous version, bash-3.1-beta1.
+
+1. Changes to Bash
+
+a. Fixed a bug that could cause core dumps due to accessing the current
+ pipeline while in the middle of modifying it.
+
+b. Fixed a bug that caused pathnames with backslashes still quoting characters
+ to be passed to opendir().
+
+c. Command word completion now obeys the setting of completion-ignore-case.
+
+d. Fixed a problem with redirection that caused file descriptors greater than
+ 2 to be inappropriately marked as close-on-exec.
+
+e. In Posix mode, after `wait' is called to wait for a particular process
+ explicitly, that process is removed from the list of processes known to
+ the shell, and subsequent attempts to wait for it return errors.
+
+f. Fixed a bug that caused extended pattern matching to incorrectly scan
+ backslash-escaped pattern characters.
+
+g. Fixed a synchronization problem that could cause core dumps when handling
+ a SIGWINCH.
+
+h. Fixed a bug that caused an unmatched backquote to be accepted without an
+ error when processing here documents.
+
+i. Fixed a small memory leak in the `cd' builtin.
+
+j. Fix for MacOS X so it gets the values for the HOSTTYPE, MACHTYPE, and
+ OSTYPE variables at build time, to support universal binaries.
+
+k. Fixed a bug that could cause an exit trap to return the exit status of
+ the trap command rather than the status as it was before the trap was
+ run as the shell's exit status.
+
+2. New Features in Bash
+
+3. Changes to Readline
+
+a. Fixed a bug that caused reversing the incremental search direction to
+ not work correctly.
+
+b. Fixed the vi-mode `U' command to only undo up to the first time insert mode
+ was entered, as Posix specifies.
+
+c. Fixed a bug in the vi-mode `r' command that left the cursor in the wrong
+ place.
+
+4. New Features in Readline
+
+a. New application-callable auxiliary function, rl_variable_value, returns
+ a string corresponding to a readline variable's value.
+
+b. When parsing inputrc files and variable binding commands, the parser
+ strips trailing whitespace from values assigned to boolean variables
+ before checking them.
+
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-beta1,
+and the previous version, bash-3.1-alpha1.
+
+1. Changes to Bash
+
+a. Added some system-specific signal names.
+
+b. Fixed a typo in the ulimit builtin to make `x' the right option to
+ maniuplate the limit on file locks.
+
+c. Fixed a problem with using += to append to index 0 of an array variable
+ when not using subscript syntax.
+
+d. A few changes to configure.in to remove calls to obsolete or outdated
+ macros.
+
+e. Make sure changes to variables bash handles specially (e.g., LC_ALL) are
+ made when the variable is set in the temporary environment to a command.
+
+f. Make sure changes to variables bash handles specially (e.g., LC_ALL) are
+ made when the variable is modified using `printf -v'.
+
+g. The export environment is now remade on cygwin when HOME is changed, so
+ DLLs bash is linked against pick up the new value. This fixes problems
+ with tilde expansion when linking against and already-installed readline.
+
+h. Small fix to the logic for performing tilde expansion in posix mode, so
+ expansion on the right-hand side of an assignment statement takes place.
+
+i. Fixed a bug that prevented redirections associated with a shell function
+ from being executed when in a subshell.
+
+j. Fixed `source' and `.' builtins to not require an executable file when
+ searching $PATH for a file to source.
+
+k. Fixed a bug that caused incorrect word splitting in a function when IFS
+ was declared local, then unset.
+
+l. Fixed a problem with the `kill' builtin that prevented sending signals
+ to a process group under certain circumstances when providing a pid < 0.
+
+m. When in POSIX mode, `pwd' now checks that the value it prints is the same
+ directory as `.', even when displaying $PWD.
+
+n. Fixed a problem with the `read' builtin when reading a script from standard
+ input and reading data from the same file.
+
+o. Fixed a problem with the `type' and `command' builtins that caused absolute
+ pathnames to be displayed incorrectly.
+
+p. Some changes to the `bg' builtin for POSIX conformance.
+
+q. The `fc' builtin now removes the `fc' command that caused it to invoke an
+ editor on specified history entries from the history entirely, rather than
+ simply ignoring it.
+
+r. When in POSIX mode, the `v' command in vi editing mode simply invokes vi
+ on the current command, rather than checking $FCEDIT and $EDITOR.
+
+s. Fixed a small memory leak in the pathname canonicalization code.
+
+t. Fixed a bug that caused the expanded value of a $'...' string to be
+ incorrectly re-quoted if it occurred within a double-quoted ${...}
+ parameter expansion.
+
+u. Restored default emacs-mode key binding of M-TAB to dynamic-complete-history.
+
+v. Fixed a bug that caused core dumps when interrupting loops running builtins
+ on some systems.
+
+w. Make sure that some of the functions bash provides replacements for are
+ not cpp defines.
+
+x. The code that scans embedded commands for the parser (`...` and $(...)) is
+ now more aware of embedded comments and their effect on quoted strings.
+
+y. Changed the `-n' option to the `history' builtin to not reset the number of
+ history lines read in the current session after reading the new lines from
+ the history file if the history is being appended when it is written to
+ the file, since the appending takes care of the problem that the adjustment
+ was intended to solve.
+
+z. Improved the error message displayed when a shell script fails to execute
+ because the environment and size of command line arguments are too large.
+
+aa. A small fix to make sure that $HISTCMD is evaluated whenever the shell is
+ saving commands to the history list, not just when HISTSIZE is defined.
+
+2. Changes to Readline
+
+a. The `change-case' command now correctly changes the case of multibyte
+ characters.
+
+b. Changes to the shared library construction scripts to deal with Windows
+ DLL naming conventions for Cygwin.
+
+c. Fixed the redisplay code to avoid core dumps resulting from a poorly-timed
+ SIGWINCH.
+
+d. Fixed the non-incremental search code in vi mode to dispose of any current
+ undo list when copying a line from the history into the current editing
+ buffer.
+
+e. The variable assignment code now ignores whitespace at the end of lines
+ when assigning to boolean variables.
+
+f. The `C-w' binding in incremental search now understands multibyte
+ characters.
+
+3. New Features in Bash
+
+a. A new configuration option, `--enable-strict-posix-default', which will
+ build bash to be POSIX conforming by default.
+
+4. New Features in Readline
+
+a. If the rl_completion_query_items is set to a value < 0, readline never
+ asks the user whether or not to view the possible completions.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-alpha1,
+and the previous version, bash-3.0-release.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused bash to crash if referencing an unset local array.
+
+b. Fixed a problem that caused tilde expansion to not be performed before
+ attempting globbing word completion.
+
+c. Fixed an incompatibility so that a first argument to trap that's a valid
+ signal number will be trated as a signal rather than a command to execute.
+
+d. Fixed ${#word} expansion to correctly compute the length of a string
+ containing multibyte characters.
+
+e. Fixed a bug that caused bash to not pass the correct flags for signal
+ disposition to child processes.
+
+f. Fixed a bug that caused `fc -l' to list one too many history entries.
+
+g. Some fixes to `fc' for POSIX conformance.
+
+h. Some fixes to job status display for POSIX conformance.
+
+i. Fixed a bug that caused `command -v' to display output if a command was not
+ found -- it should be silent.
+
+j. In POSIX mode, `type' and `command -[vV]' do not report non-executable
+ files, even if the shell will attempt to execute them.
+
+k. Fixed a bug that caused the `==' operator to the [[ command to not attempt
+ extended pattern matching.
+
+l. Fixed the brace expansion code to handle characters whose value exceeds 128.
+
+m. Fixed `printf' to handle strings with a leading `\0' whose length is
+ non-zero.
+
+n. Fixed a couple of problems with brace expansion where `${' was handled
+ incorrectly.
+
+o. Fixed off-by-one error when calculating the upper bound of `offset' when
+ processing the ${array[@]:offset:length} expansion.
+
+p. System-specific configuration changes for: FreeBSD 5.x, Interix, MacOS X
+ 10.4, Linux 2.4+ kernels, Linux 3.x kernels, Dragonfly BSD, QNX 6.x,
+ Cygwin
+
+q. Fixed a bug that caused the shell to ignore the status of the rightmost
+ command in a pipeline when the `pipefail' option was enabled.
+
+r. Fixed a completion bug that caused core dumps when expanding a directory
+ name.
+
+s. Fixed a bug that prevented `hash -d' from removing commands from the hash
+ table.
+
+t. Fixed word splitting to avoid really bad quadratic performance when
+ expanding long lists.
+
+u. Fixed a bug that caused negative offsets in substring expansion to use the
+ wrong values.
+
+v. Fixed a bug in printf that caused it to not return failure on write errors.
+
+w. Fixed a bug that caused commands in subshells to not be properly timed.
+
+x. The shell parser no longer attempts to parse a compound assignment specially
+ unless in a position where an assignment statement is acceptable or parsing
+ arguments to a builtin that accepts assignment statements.
+
+y. Fixed a problem that caused a `case' statement to be added to the history
+ incorrectly as a single command if the `case word' was on one line and the
+ `in' on another.
+
+z. Fixed a problem that caused internal shell quoting characters to be
+ incorrectly quoted with backslashes under some circumstances.
+
+aa. The shell now performs correct word splitting when IFS contains multibyte
+ characters.
+
+bb. The mail checking code now resets the cached file information if the size
+ drops to 0, even if the times don't change.
+
+cc. A completed command name that is found in $PATH as well as the name of a
+ directory in the current directory no longer has a slash appended in certain
+ circumstances: a single instance found in $PATH when `.' is not in $PATH,
+ and multiple instances found in $PATH, even when `.' is in $PATH.
+
+dd. Incorporated tilde expansion into the word expansion code rather than as a
+ separately-called function, fixing some cases where it was performed
+ inappropriately (e.g., after the second `=' in an assignment statement or
+ in a double-quoted parameter expansion).
+
+ee. Fixed several bugs encountered when parsing compound assignment statements,
+ so that compound assignments appearing as arguments to builtins are no
+ longer double-expanded.
+
+ff. Fixed a bug in the command execution code that caused asynchronous commands
+ containing command substitutions to not put the terminal in the wrong
+ process group.
+
+gg. Bash now handles the case where the WCONTINUED flag causes waitpid() to
+ return -1/EINVAL at runtime as well as configuration time.
+
+hh. Fixed parser to generate an error when the pipeline `argument' to `!' or
+ `time' is NULL.
+
+ii. The shell now takes a little more care when manipulating file descriptors
+ greater than 9 with the `exec' builtin.
+
+jj. Fixed a bug that caused variable assignments preceding the `command' builtin
+ preceding a special builtin to be preserved after the command completed in
+ POSIX mode.
+
+kk. Fixed a bug that allowed variables beginning with a digit to be created.
+
+ll. Fixed a bug that caused a \<newline> to be removed when parsing a $'...'
+ construct.
+
+mm. A shell whose name begins with `-' will now be a restricted shell if the
+ remainder of the name indicates it should be restricted.
+
+nn. Fixed a bug that could cause a core dump if FUNCNAME were changed or unset
+ during a function's execution.
+
+oo. Fixed a bug that caused executing a `return' in a function to not execute
+ a RETURN trap. The RETURN trap is inherited by shell functions only if
+ function tracing is globally enabled or has been enabled for that function.
+
+pp. Fixed cases where var[@] was not handled exactly like var, when var is a
+ scalar variable.
+
+qq. Fixed a bug that caused the first character after a SIGINT to be discarded
+ under certain circumstances.
+
+rr. Fixed exit status code so that a suspended job returns 128+signal as its
+ exit status (preventing commands after it in `&&' lists from being
+ executed).
+
+ss. Fixed a bug that caused the shell parser state to be changed by executing
+ a shell function as a result of word completion.
+
+tt. Fixed a long-standing bug that caused '\177' characters in variable
+ values to be discarded when expanded in double-quoted strings.
+
+uu. Fixed a bug that caused $RANDOM to be re-seeded multiple times in a
+ subshell environment.
+
+vv. Extensive changes to the job management code to avoid the pid-reuse and
+ pid-aliasing problems caused by retaining the exit status of too many jobs,
+ but still retain as many background job statuses as POSIX requires.
+
+ww. Fixed a parser bug in processing \<newline> that caused things like
+
+ ((echo 5) \
+ (echo 6))
+
+ to not work correctly.
+
+xx. `pwd -P' now sets $PWD to a directory name containing no symbolic links
+ when in posix mode, as POSIX requires.
+
+yy. In posix mode, bash no longer sets $PWD to a name containing no symbolic
+ links if a directory is chosen from $CDPATH.
+
+zz. The word splitting code now treats an IFS character that is not space,
+ tab, or newline and any adjacent IFS white space as a single delimiter, as
+ SUSv3/XPG6 require.
+
+aaa. The `read' builtin now checks whether or not the number of fields read is
+ exactly the same as the number of variables instead of just assigning the
+ rest of the line (minus any trailing IFS white space) to the last
+ variable. This is what POSIX/SUS/XPG all require.
+
+bbb. Fixed a bug that caused `read' to always check whether or not fd 0 was a
+ pipe, even when reading from another file descriptor.
+
+ccc. Fixed a bug that caused short-circuiting of execution even if the return
+ value was being inverted.
+
+ddd. Fixed a bug that caused a core dump while decoding \W escapes in PS1 if
+ PWD was unset.
+
+eee. Fixed a bug in `read' that counted internal quoting characters for the
+ purposes of `read -n'.
+
+fff. Fixed a bug so that a function definition in a pipeline causes a child
+ process to be forked at the right time.
+
+ggg. Bash will not attempt to link against a readline library that doesn't
+ have rl_gnu_readline_p == 1.
+
+hhh. Fixed a bug that caused `read' to consume one too many characters when
+ reading a fixed number of characters and the Nth character is a backslash.
+
+iii. Fixed a bug that caused `unset' on variables in the temporary environment
+ to leave them set when `unset' completed.
+
+jjj. Fixed a bug that caused bash to close fd 2 if an `exec' failed and the
+ shell didn't exit.
+
+kkk. The completion code is more careful to not turn `/' or `///' into `//',
+ for those systems on which `//' has special meaning.
+
+lll. Fixed a bug that caused command substitution in asynchronous commands to
+ close the wrong file descriptors.
+
+mmm. The shell no longer prints status messages about terminated background
+ processes unless job control is active.
+
+nnn. Fixed a bug that prevented multiple consecutive invocations of `history -s'
+ from adding all the commands to the history list.
+
+ooo. Added a couple of changes to make arithmetic expansion more consistent in
+ all its contexts (still not perfect).
+
+ppp. Fixed a bug that caused the parser to occasionally not find the right
+ terminating "`" in an old-style command substitution.
+
+qqq. Fixed a bug that caused core dumps when the shell was reading its non-
+ interactive input from fd 0 and fd 0 was duplicated and restored using a
+ combination of `exec' (to save) and redirection (to restore).
+
+rrr. Fixed a problem that caused loops in sourced scripts to not be cleaned
+ up properly when a `return' is executed.
+
+sss. Change internal command substitution completion function to append a slash
+ to directory names in the command.
+
+2. Changes to Readline
+
+a. Fixed a bug that caused multiliine prompts to be wrapped and displayed
+ incorrectly.
+
+b. Fixed a bug that caused ^P/^N in emacs mode to fail to display the current
+ line correctly.
+
+c. Fixed a problem in computing the number of invisible characters on the first
+ line of a prompt whose length exceeds the screen width.
+
+d. Fixed vi-mode searching so that failure preserves the current line rather
+ than the last line in the history list.
+
+e. Fixed the vi-mode `~' command (change-case) to have the correct behavior at
+ end-of-line when manipulating multibyte characters.
+
+f. Fixed the vi-mode `r' command (change-char) to have the correct behavior at
+ end-of-line when manipulating multibyte characters.
+
+g. Fixed multiple bugs in the redisplay of multibyte characters: displaying
+ prompts longer than the screen width containing multibyte characters,
+
+h. Fix the calculation of the number of physical characters in the prompt
+ string when it contains multibyte characters.
+
+i. A non-zero value for the `rl_complete_suppress_append' variable now causes
+ no `/' to be appended to a directory name.
+
+j. Fixed forward-word and backward-word to work when words contained
+ multibyte characters.
+
+k. Fixed a bug in finding the delimiter of a `?' substring when performing
+ history expansion in a locale that supports multibyte characters.
+
+l. Fixed a memory leak caused by not freeing the timestamp in a history entry.
+
+m. Fixed a bug that caused "\M-x" style key bindings to not obey the setting
+ of the `convert-meta' variable.
+
+n. Fixed saving and restoring primary prompt when prompting for incremental
+ and non-incremental searches; search prompts now display multibyte
+ characters correctly.
+
+o. Fixed a bug that caused keys originally bound to self-insert but shadowed
+ by a multi-character key sequence to not be inserted.
+
+p. Fixed code so rl_prep_term_function and rl_deprep_term_function aren't
+ dereferenced if NULL (matching the documentation).
+
+q. Extensive changes to readline to add enough state so that commands
+ requiring additional characters (searches, multi-key sequences, numeric
+ arguments, commands requiring an additional specifier character like
+ vi-mode change-char, etc.) work without synchronously waiting for
+ additional input.
+
+r. Lots of changes so readline builds and runs on MinGW.
+
+s. Readline no longer tries to modify the terminal settings when running in
+ callback mode.
+
+t. The Readline display code no longer sets the location of the last invisible
+ character in the prompt if the \[\] sequence is empty.
+
+3. New Features in Bash
+
+a. Bash now understands LC_TIME as a special variable so that time display
+ tracks the current locale.
+
+b. BASH_ARGC, BASH_ARGV, BASH_SOURCE, and BASH_LINENO are no longer created
+ as `invisible' variables and may not be unset.
+
+c. In POSIX mode, if `xpg_echo' option is enabled, the `echo' builtin doesn't
+ try to interpret any options at all, as POSIX requires.
+
+d. The `bg' builtin now accepts multiple arguments, as POSIX seems to specify.
+
+e. Fixed vi-mode word completion and glob expansion to perform tilde
+ expansion.
+
+f. The `**' mathematic exponentiation operator is now right-associative.
+
+g. The `ulimit' builtin has new options: -i (max number of pending signals),
+ -q (max size of POSIX message queues), and -x (max number of file locks).
+
+h. A bare `%' once again expands to the current job when used as a job
+ specifier.
+
+i. The `+=' assignment operator (append to the value of a string or array) is
+ now supported for assignment statements and arguments to builtin commands
+ that accept assignment statements.
+
+j. BASH_COMMAND now preserves its value when a DEBUG trap is executed.
+
+k. The `gnu_errfmt' option is enabled automatically if the shell is running
+ in an emacs terminal window.
+
+l. New configuration option: --single-help-strings. Causes long help text
+ to be written as a single string; intended to ease translation.
+
+m. The COMP_WORDBREAKS variable now causes the list of word break characters
+ to be emptied when the variable is unset.
+
+n. An unquoted expansion of $* when $IFS is empty now causes the positional
+ parameters to be concatenated if the expansion doesn't undergo word
+ splitting.
+
+o. Bash now inherits $_ from the environment if it appears there at startup.
+
+p. New shell option: nocasematch. If non-zero, shell pattern matching ignores
+ case when used by `case' and `[[' commands.
+
+q. The `printf' builtin takes a new option: -v var. That causes the output
+ to be placed into var instead of on stdout.
+
+r. By default, the shell no longer reports processes dying from SIGPIPE.
+
+s. Bash now sets the extern variable `environ' to the export environment it
+ creates, so C library functions that call getenv() (and can't use the
+ shell-provided replacement) get current values of environment variables.
+
+4. New Features in Readline
+
+a. The key sequence sent by the keypad `delete' key is now automatically
+ bound to delete-char.
+
+b. A negative argument to menu-complete now cycles backward through the
+ completion list.
+
+c. A new bindable readline variable: bind-tty-special-chars. If non-zero,
+ readline will bind the terminal special characters to their readline
+ equivalents when it's called (on by default).
+
+d. New bindable command: vi-rubout. Saves deleted text for possible
+ reinsertion, as with any vi-mode `text modification' command; `X' is bound
+ to this in vi command mode.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.0-release,
+and the previous version, bash-3.0-rc1.
+
+1. Changes to Bash
+
+a. Fixed a boundary overrun that could cause segmentation faults when the
+ completion code hands an incomplete construct to the word expansion
+ functions.
+
+b. Changed posix mode behavior so that an error in a variable assignment
+ preceding a special builtin causes a non-interactive shell to exit.
+
+c. Change the directory expansion portion of the completion code to not
+ expand embedded command substitutions if the directory name appears in
+ the file system.
+
+d. Fixed a problem that caused `bash -r' to turn on restrictions before
+ reading the startup files.
+
+e. Fixed a problem with the default operation of the `umask' builtin.
+
+2. Changes to Readline
+
+a. Fixed a problem with readline saving the contents of the current line
+ before beginning a non-interactive search.
+
+b. Fixed a problem with EOF detection when using rl_event_hook.
+
+c. Fixed a problem with the vi mode `p' and `P' commands ignoring numeric
+ arguments.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.0-rc1,
+and the previous version, bash-3.0-beta1.
+
+1. Changes to Bash
+
+a. Fixed a bug that caused incorrect behavior when referecing element 0 of
+ an array using $array, element 0 was unset, and `set -u' was enabled.
+
+b. System-specific changes for: SCO Unix 3.2, Tandem.
+
+c. Fixed a bug that caused inappropriate word splitting when a variable was
+ expanded within a double-quoted string that also included $@.
+
+d. Fixed a bug that caused `pwd' to not display anything in physical mode
+ when the file system had changed underneath the shell.
+
+e. Fixed a bug in the pre- and post- increment and decrement parsing in the
+ expression evaluator that caused errors when the operands and corresponding
+ operators were separated by whitespace.
+
+f. Fixed a bug that caused `history -p' to add an entry to the history list,
+ counter to the documentation. (Keeps the history expansions invoked by
+ emacs-mode command line editing from doing that as well.)
+
+g. Fixed a bug that could cause a core dump if `cd' is asked to print out a
+ pathname longer than PATH_MAX characters.
+
+h. Fixed a bug that caused jobs to be put into the wrong process group under
+ some circumstances after enabling job control with `set -m'.
+
+i. `unalias' now returns failure if no alias name arguments are supplied.
+
+j. Documented the characters not allowed to appear in an alias name.
+
+k. $* is no longer expanded as if in double quotes when it appears in the
+ body of a here document, as the SUS seems to require.
+
+l. The `bashbug' script now uses a directory in $TMPDIR for exclusive
+ access rather than trying to guess how the underlying OS provides for
+ secure temporary file creation.
+
+m. Fixed a few problems with `cd' and `pwd' when asked to operate on pathnames
+ longer than PATH_MAX characters.
+
+n. Fixed a memory leak caused when creating multiple local array variables
+ with identical names.
+
+o. Fixed a problem with calls to getcwd() so that bash now operates better
+ when the full pathname to the current directory is longer than PATH_MAX
+ bytes.
+
+p. The `trap' builtin now reports an error if a single non-signal argument
+ is specified.
+
+q. Fixed a bug that caused `umask' to not work correctly when presented
+ with a mask of all 0s.
+
+r. When `getopts' reaches the end of options, OPTARG is unset, as POSIX
+ appears to specify.
+
+s. Interactive mode now depends on whether or not stdin and stderr are
+ connected to a tty; formerly it was stdin and stdout. POSIX requires
+ this.
+
+t. Fixed vi-mode completion to work more as POSIX specifies (e.g., doing the
+ right kind of filename generation).
+
+2. Changes to Readline
+
+a. Fixed a problem that could cause readline to refer to freed memory when
+ moving between history lines while doing searches.
+
+b. Improvements to the code that expands and displays prompt strings
+ containing multibyte characters.
+
+c. Fixed a problem with vi-mode not correctly remembering the numeric argument
+ to the last `c'hange command for later use with `.'.
+
+d. Fixed a bug in vi-mode that caused multi-digit count arguments to work
+ incorrectly.
+
+e. Fixed a problem in vi-mode that caused the last text modification command
+ to not be remembered across different command lines.
+
+f. Fixed problems with changing characters and changing case at the end of
+ the line.
+
+3. New Features in Bash
+
+a. The `jobs', `kill', and `wait' builtins now accept job control notation
+ even if job control is not enabled.
+
+b. The historical behavior of `trap' that allows a missing `action' argument
+ to cause each specified signal's handling to be reset to its default is
+ now only supported when `trap' is given a single non-option argument.
+
+4. New Features in Readline
+
+a. When listing completions, directories have a `/' appended if the
+ `mark-directories' option has been enabled.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.0-beta1,
+and the previous version, bash-3.0-alpha.
+
+1. Changes to Bash
+
+a. Fixes to build correctly when arrays are not compiled into the shell.
+
+b. Fixed command substitution to run any exit trap defined in the command
+ substitution before returning; the exit trap is not inherited from the
+ calling shell.
+
+c. Fixes to process group synchronization code so that every child process
+ attempts to set the terminal's process group; fixes some synchronization
+ problems on Linux kernels that schedule the child to always run before
+ the parent.
+
+d. Fixed processing of octal and hex constants in printf builtin for POSIX.2
+ compliance.
+
+e. Fixed a couple of core dumps in the pattern removal code.
+
+f. Fixes to the array subrange extraction code to deal better with sparse
+ arrays.
+
+g. Parser errors and other errors that result in the shell exiting now cause
+ the exit trap to be run.
+
+h. Change the command substitution completion functions to not append any
+ closing quote, because it would be inserted a closing "`" or ")".
+
+i. Fix history initialization so assignments to $histchars made in startup
+ files are honored.
+
+j. If an exit trap does not contain a call to `exit', the shell now uses
+ the exit status of the last command executed before the trap as the exit
+ status of the shell.
+
+k. The parser now prompts with $PS2 if it reads a newline while parsing a
+ compound array assignment statement.
+
+l. When performing a compound array assignment, the parser doesn't treat
+ words of the form [index]=value as assignments if they're the result of
+ expansions.
+
+m. Fixed a bug that caused `return' executed in a trap command to make the
+ shell think it was still running the trap.
+
+n. Fixed the value of errno set by the pathname canonicalization functions.
+
+o. Changed the grammar so that `time' alone on a line times a null command
+ rather than being a syntax error.
+
+p. The pattern substitution code no longer performs quote removal on the
+ pattern before trying to match it, as the pattern removal functions do.
+
+q. Fixed a bug that could cause core dumps when checking whether a quoted
+ command name was being completed.
+
+r. Fixes to the pattern removal and pattern replacement expansions to deal
+ with multibyte characters better (and faster).
+
+s. Fix to the substring expansion (${param:off[:len]}) to deal with (possibly
+ multibyte) characters instead of raw bytes.
+
+t. Fixed a bug that caused some key bindings set in an inputrc to be ignored
+ at shell startup.
+
+u. Fixed a bug that caused unsetting a local variable within a function to
+ not work correctly.
+
+v. Fixed a bug that caused invalid variables to be created when using
+ `read -a'.
+
+w. Fixed a bug that caused "$@" to expand incorrectly when used as the right
+ hand side of a parameter expansion such as ${word:="$@"} if the first
+ character of $IFS was not a space.
+
+x. Fixed a slight cosmetic problem when printing commands containing a
+ `>&word' redirection.
+
+y. Fixed a problem that could cause here documents to not be created correctly
+ if the system temporary directory did not allow writing.
+
+2. Changes to Readline
+
+a. Change to history expansion functions to treat `^' as equivalent to word
+ one, as the documention states.
+
+b. Some changes to the display code to improve display and redisplay of
+ multibyte characters.
+
+c. Changes to speed up the multibyte character redisplay code.
+
+d. Fixed a bug in the vi-mode `E' command that caused it to skip over the
+ last character of a word if invoked while point was on the word's
+ next-to-last character.
+
+e. Fixed a bug that could cause incorrect filename quoting when
+ case-insensitive completion was enabled and the word being completed
+ contained backslashes quoting word break characters.
+
+f. Fixed a bug in redisplay triggered when the prompt string contains
+ invisible characters.
+
+g. Fixed some display (and other) bugs encountered in multibyte locales
+ when a non-ascii character was the last character on a line.
+
+h. Fixed some display bugs caused by multibyte characters in prompt strings.
+
+i. Fixed a problem with history expansion caused by non-whitespace characters
+ used as history word delimiters.
+
+3. New Features in Bash
+
+a. printf builtin understands two new escape sequences: \" and \?.
+
+b. `echo -e' understands two new escape sequences: \" and \?.
+
+c. The GNU `gettext' package and libintl have been integrated; the shell's
+ messages can be translated into different languages.
+
+d. The `\W' prompt expansion now abbreviates $HOME as `~', like `\w'.
+
+e. The error message printed when bash cannot open a shell script supplied
+ as argument 1 now includes the name of the shell, to better identify
+ the error as coming from bash.
+
+4. New Features in Readline
+
+a. New application variable, rl_completion_quote_character, set to any
+ quote character readline finds before it calls the application completion
+ function.
+
+b. New application variable, rl_completion_suppress_quote, settable by an
+ application completion function. If set to non-zero, readline does not
+ attempt to append a closing quote to a completed word.
+
+c. New application variable, rl_completion_found_quote, set to a non-zero
+ value if readline determines that the word to be completed is quoted.
+ Set before readline calls any application completion function.
+
+d. New function hook, rl_completion_word_break_hook, called when readline
+ needs to break a line into words when completion is attempted. Allows
+ the word break characters to vary based on position in the line.
+
+e. New bindable command: unix-filename-rubout. Does the same thing as
+ unix-word-rubout, but adds `/' to the set of word delimiters.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.0-alpha,
+and the previous version, bash-2.05b-release.
+
+1. Changes to Bash
+
+a. Fixes so that the shell will compile without some of the default options
+ defined.
+
+b. Fixed an error message that did not pass enough arguments to printf.
+
+c. Fixed a bug that caused input redirection to a builtin inside a script
+ being read from standard input to result in the rest of the already-
+ read and buffered script to be discarded.
+
+d. Fixed a bug that caused subshell initialization to close the file
+ descriptor from which the shell was reading a script under certain
+ circumstances.
+
+e. Fixed a bug that caused the shell to not advance a string pointer over
+ a null wide character when doing string operations.
+
+f. Fixed the internal logout code so that shells that time out waiting for
+ input (using $TMOUT) run ~/.bash_logout.
+
+g. Portability and configuration changes for: cygwin, HP/UX, GNU/FreeBSD.
+
+h. The parser no longer adds implicit double quotes to ((...)) arithmetic
+ commands.
+
+i. The ((...)) arithmetic command evaluation code was fixed to not dump core
+ when the expanded string is null.
+
+j. The ((...)) arithmetic command evaluation code was fixed to not perform
+ variable assignments while expanding the expression.
+
+k. Fixed a bug that caused word splitting to be performed incorrectly when
+ IFS is set, but null.
+
+l. Fixed a bug in brace expansion that caused a quoted `$' preceding an
+ open brace to inhibit brace expansion.
+
+m. Fixed a bug that caused a leading `-' in the shell's name to cause it to
+ not be recognized as a restricted shell.
+
+n. Fixed a bug in the arithmetic evaluation code that could cause longjmps
+ to an invalid location and result in a core dump.
+
+o. Fixed a bug in the calculation of how many history lines are new in a
+ single shell session when reading new history lines from a file with
+ `history -n'.
+
+p. Fixed a bug in pathname canonicalization that caused the shell to dump
+ core when presented with a pathname longer than PATH_MAX.
+
+q. Fixed the parser so that it doesn't try to compare a char variable to
+ EOF, which fails when chars are unsigned.
+
+r. Fixed a bug in the simple command execution code that caused occasional
+ core dumps.
+
+s. The shell does a better job of saving any partial parsing state during
+ operations which cause a command to be executed while a line is being
+ entered and parsed.
+
+t. The completion code now splits words more like the expansion code when
+ $IFS is used to split.
+
+u. The locale code does a better job of recomputing the various locale
+ variable values when LC_ALL is unset.
+
+v. The programmable completion code does a better job of dequoting expanded
+ word lists before comparing them against the word to be matched.
+
+w. The shell no longer seg faults if the expanded value of $PS4 is null
+ and `set -x' is enabled.
+
+x. Fixed a bug that caused core dumps when a here string expanded to NULL.
+
+y. The mail checking code now makes sure the mailbox is bigger before
+ reporting the existence of new mail.
+
+z. The parser does not try to expand $'...' and $"..." when the appear
+ within double quotes unless the `extquote' option has been enabled with
+ `shopt'. For backwards compatibility, it is enabled by default.
+
+aa. Fixed a bug that caused `for x; do ...' and `select x; do ... to use
+ $@ instead of "$@" for the implicit list of arguments.
+
+bb. Fixed a bug that caused a subshell of a restricted shell (e.g., one
+ spawned to execute a pipeline) to not exit immediately if attempting
+ to use a command containing a slash.
+
+cc. Fixed a problem with empty replacements for a pattern that doesn't match
+ when performing ${param/word/} expansion.
+
+dd. Word expansions performed while expanding redirections no longer search
+ a command's temporary environment to expand variable values.
+
+ee. Improvements to the alias expansion code when expanding subsequent words
+ because an aliase's value ends with a space.
+
+ff. `cd -' now prints the current working directory after a successful chdir
+ even when the shell is not interactive, as the standard requires.
+
+gg. The shell does a better job of ensuring a child process dies of SIGINT
+ before resending SIGINT to itself.
+
+hh. The arithmetic expansion variable assignment code now does the right
+ thing when assigning to `special' variables like OPTIND.
+
+ii. When history expansion verification is enabled, the bash readline helper
+ functions that do history expansion on the current line don't print
+ the results.
+
+jj. Fixed bugs with multiple consecutive alias expansion when one of the
+ expansions ends with a space.
+
+kk. Fixed a problem in the programmable completion code that could cause core
+ dumps when trying to initialize a set of possible completions from a
+ list of variables.
+
+ll. The \[ and \] escape characters are now ignored when decoding the prompt
+ string if the shell is started with editing disabled.
+
+mm. Fixed a bug that could leave extra characters in a string when doing
+ quoted null character removal.
+
+nn. Command substitution and other subshell operations no longer reset the
+ line number (aids the bash debugger).
+
+oo. Better line number management when executing simple commands, conditional
+ commands, for commands, and select commands.
+
+pp. The globbing code now uses malloc, with its better failure properties,
+ rather than alloca().
+
+qq. Fixed a bug that caused expansions like #{a[2]:=value} to create the
+ appropriate array element instead of a variable named `a[2]'.
+
+rr. Fixed a bug in the handling of a `?(...)' pattern immediately following
+ a `*' when extglob is enabled.
+
+ss. Fixed a bug that caused a `return' invoked in an exit trap when exit is
+ invoked in a function to misbehave.
+
+tt. Fixed a bug that caused CTLESC and CTLNUL characters to not be escaped
+ by the internal shell string quoting functions.
+
+uu. Fixed a bug that caused quoted null characters in an expanded word list
+ to be inappropriately assigned to an array variable when using `read -a'.
+
+vv. Fixed a bug that caused redirections accompanying a null command to persist
+ in the current shell.
+
+ww. Fixed a bug that caused the prompt to be printed when the shell was
+ expanding a multiline alias.
+
+xx. Fixed a bug that resulted in core dumps when the completion for a command
+ changed the compspec.
+
+yy. Fixed a bug that caused evaluation of programmable completions to print
+ notifications of completed jobs.
+
+zz. Bash now disables line editing when $EMACS == `t' and $TERM == `dumb'
+ (which is what emacs shell windows do).
+
+aaa. In posix mode, `kill -l' causes signal names to be displayed without
+ a leading `SIG'.
+
+bbb. Clear error flag on standard output so it doesn't persist across multiple
+ builtin commands.
+
+ccc. In posix mode, `alias' displays alias values without the leading `alias',
+ so the output cannot be used as subsequent input.
+
+ddd. In posix mode, the `trap' builtin doesn't check whether or not its
+ first argument is a signal specification and revert the signal handling
+ to its original disposition if it is.
+
+eee. Fixed several bugs in the handling of "$*" and "${array[*]}" by the
+ pattern substitution and removal expansions.
+
+fff. Fixed several problems with the handling of ${array[@]}, ${array[*]},
+ $@, and $* by the indirect variable expansion code.
+
+ggg. Fixed a bug that did not allow `time' to be aliased.
+
+hhh. Improved the mail checking code so it won't check (and possibly cause an
+ NFS file system mount) until MAILPATH or MAIL is given a value -- there
+ is no default if DEFAULT_MAIL_DIRECTORY is not defined at compile time.
+ (It is computed by configure, but can be #undef'd in config-bot.h.)
+
+iii. If the `chkwinsize' option is enabled, the shell checks for window size
+ changes if a child process exits due to a signal.
+
+jjj. Removed the attempts to avoid adding a slash at the end of a completed
+ executable name if there was a directory with the same name in the
+ current directory.
+
+kkk. Fixed PATH lookup code so it treats the permission bits separately for
+ owner, group, and other, rather than checking them all.
+
+lll. Fixed the locale code to reset the parser's idea of the character class
+ <blank>, which controls how it splits tokens, when the locale changes.
+
+mmm. The shell now binds its special readline functions and key bindings only
+ if the user's inputrc file has not already bound them.
+
+nnn. The shell now reports on processes that dump core due to signals when
+ invoked as `-c command'.
+
+2. Changes to Readline
+
+a. Fixes to avoid core dumps because of null pointer references in the
+ multibyte character code.
+
+b. Fix to avoid infinite recursion caused by certain key combinations.
+
+c. Fixed a bug that caused the vi-mode `last command' to be set incorrectly.
+
+d. Readline no longer tries to read ahead more than one line of input, even
+ when more is available.
+
+e. Fixed the code that adjusts the point to not mishandle null wide
+ characters.
+
+f. Fixed a bug in the history expansion `g' modifier that caused it to skip
+ every other match.
+
+g. Fixed a bug that caused the prompt to overwrite previous output when the
+ output doesn't contain a newline and the locale supports multibyte
+ characters. This same change fixes the problem of readline redisplay
+ slowing down dramatically as the line gets longer in multibyte locales.
+
+h. History traversal with arrow keys in vi insertion mode causes the cursor
+ to be placed at the end of the new line, like in emacs mode.
+
+i. The locale initialization code does a better job of using the right
+ precedence and defaulting when checking the appropriate environment
+ variables.
+
+j. Fixed the history word tokenizer to handle <( and >( better when used as
+ part of bash.
+
+k. The overwrite mode code received several bug fixes to improve undo.
+
+l. Many speedups to the multibyte character redisplay code.
+
+m. The callback character reading interface should not hang waiting to read
+ keyboard input.
+
+n. Fixed a bug with redoing vi-mode `s' command.
+
+o. The code that initializes the terminal tracks changes made to the terminal
+ special characters with stty(1) (or equivalent), so that these changes
+ are reflected in the readline bindings. New application-callable function
+ to make it work: rl_tty_unset_default_bindings().
+
+p. Fixed a bug that could cause garbage to be inserted in the buffer when
+ changing character case in vi mode when using a multibyte locale.
+
+q. Fixed a bug in the redisplay code that caused problems on systems
+ supporting multibyte characters when moving between history lines when the
+ new line has more glyphs but fewer bytes.
+
+r. Undo and redo now work better after exiting vi insertion mode.
+
+s. Make sure system calls are restarted after a SIGWINCH is received using
+ SA_RESTART.
+
+t. Improvements to the code that displays possible completions when using
+ multibyte characters.
+
+u. Fixed a problem when parsing nested if statements in inputrc files.
+
+v. The completer now takes multibyte characters into account when looking for
+ quoted substrings on which to perform completion.
+
+w. The history search functions now perform better bounds checking on the
+ history list.
+
+3. New Features in Bash
+
+a. ANSI string expansion now implements the \x{hexdigits} escape.
+
+b. There is a new loadable `strftime' builtin.
+
+c. New variable, COMP_WORDBREAKS, which controls the readline completer's
+ idea of word break characters.
+
+d. The `type' builtin no longer reports on aliases unless alias expansion
+ will actually be performed.
+
+e. HISTCONTROL is now a colon-separated list of values, which permits
+ more extensibility and backwards compatibility.
+
+f. HISTCONTROL may now include the `erasedups' option, which causes all lines
+ matching a line being added to be removed from the history list.
+
+g. `configure' has a new `--enable-multibyte' argument that permits multibyte
+ character support to be disabled even on systems that support it.
+
+h. New variables to support the bash debugger: BASH_ARGC, BASH_ARGV,
+ BASH_SOURCE, BASH_LINENO, BASH_SUBSHELL, BASH_EXECUTION_STRING,
+ BASH_COMMAND
+
+i. FUNCNAME has been changed to support the debugger: it's now an array
+ variable.
+
+j. for, case, select, arithmetic commands now keep line number information
+ for the debugger.
+
+k. There is a new `RETURN' trap executed when a function or sourced script
+ returns (not inherited child processes; inherited by command substitution
+ if function tracing is enabled and the debugger is active).
+
+l. New invocation option: --debugger. Enables debugging and turns on new
+ `extdebug' shell option.
+
+m. New `functrace' and `errtrace' options to `set -o' cause DEBUG and ERR
+ traps, respectively, to be inherited by shell functions. Equivalent to
+ `set -T' and `set -E' respectively. The `functrace' option also controls
+ whether or not the DEBUG trap is inherited by sourced scripts.
+
+n. The DEBUG trap is run before binding the variable and running the action
+ list in a `for' command, binding the selection variable and running the
+ query in a `select' command, and before attempting a match in a `case'
+ command.
+
+o. New `--enable-debugger' option to `configure' to compile in the debugger
+ support code.
+
+p. `declare -F' now prints out extra line number and source file information
+ if the `extdebug' option is set.
+
+q. If `extdebug' is enabled, a non-zero return value from a DEBUG trap causes
+ the next command to be skipped, and a return value of 2 while in a
+ function or sourced script forces a `return'.
+
+r. New `caller' builtin to provide a call stack for the bash debugger.
+
+s. The DEBUG trap is run just before the first command in a function body is
+ executed, for the debugger.
+
+t. `for', `select', and `case' command heads are printed when `set -x' is
+ enabled.
+
+u. There is a new {x..y} brace expansion, which is shorthand for {x.x+1,
+ x+2,...,y}. x and y can be integers or single characters; the sequence
+ may ascend or descend; the increment is always 1.
+
+v. New ksh93-like ${!array[@]} expansion, expands to all the keys (indices)
+ of array.
+
+w. New `force_fignore' shopt option; if enabled, suffixes specified by
+ FIGNORE cause words to be ignored when performing word completion even
+ if they're the only possibilities.
+
+x. New `gnu_errfmt' shopt option; if enabled, error messages follow the `gnu
+ style' (filename:lineno:message) format.
+
+y. New `-o bashdefault' option to complete and compgen; if set, causes the
+ whole set of bash completions to be performed if the compspec doesn't
+ result in a match.
+
+z. New `-o plusdirs' option to complete and compgen; if set, causes directory
+ name completion to be performed and the results added to the rest of the
+ possible completions.
+
+aa. `kill' is available as a builtin even when the shell is built without
+ job control.
+
+bb. New HISTTIMEFORMAT variable; value is a format string to pass to
+ strftime(3). If set and not null, the `history' builtin prints out
+ timestamp information according to the specified format when displaying
+ history entries. If set, bash tells the history library to write out
+ timestamp information when the history file is written.
+
+cc. The [[ ... ]] command has a new binary `=~' operator that performs
+ extended regular expression (egrep-like) matching.
+
+dd. `configure' has a new `--enable-cond-regexp' option (enabled by default)
+ to enable the =~ operator and regexp matching in [[ ... ]].
+
+ee. Subexpressions matched by the =~ operator are placed in the new
+ BASH_REMATCH array variable.
+
+ff. New `failglob' option that causes an expansion error when pathname
+ expansion fails to produce a match.
+
+gg. New `set -o pipefail' option that causes a pipeline to return a failure
+ status if any of the processes in the pipeline fail, not just the last
+ one.
+
+4. New Features in Readline
+
+a. History expansion has a new `a' modifier equivalent to the `g' modifier
+ for compatibility with the BSD csh.
+
+b. History expansion has a new `G' modifier equivalent to the BSD csh `g'
+ modifier, which performs a substitution once per word.
+
+c. All non-incremental search operations may now undo the operation of
+ replacing the current line with the history line.
+
+d. The text inserted by an `a' command in vi mode can be reinserted with
+ `.'.
+
+e. New bindable variable, `show-all-if-unmodified'. If set, the readline
+ completer will list possible completions immediately if there is more
+ than one completion and partial completion cannot be performed.
+
+f. There is a new application-callable `free_history_entry()' function.
+
+g. History list entries now contain timestamp information; the history file
+ functions know how to read and write timestamp information associated
+ with each entry.
+
+h. Four new key binding functions have been added:
+
+ rl_bind_key_if_unbound()
+ rl_bind_key_if_unbound_in_map()
+ rl_bind_keyseq_if_unbound()
+ rl_bind_keyseq_if_unbound_in_map()
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-2.05b-release,
+and the previous version, bash-2.05b-beta2.
+
+1. Changes to Bash
+
+a. Fixed an off-by-one error in the function that translates job
+ specifications.
+
+b. Note that we're running under Emacs and disable line editing if
+ $EMACS == `t'.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-2.05b-beta2,
+and the previous version, bash-2.05b-beta1.
+
+1. Changes to Bash
+
+a. Fixed the /= and %= arithmetic operators to catch division by zero.
+
+b. Added putenv, setenv, unsetenv to getenv replacement for completeness.
+
+c. Fixed a bug that could cause the -O expand_aliases invocation option
+ to not take effect.
+
+d. Fixed a problem with process substitution that resulted in incorrect
+ behavior when the number of process substitutions in an individual
+ command approached 64.
+
+2. Changes to Readline
+
+a. Fixed a problem with backward-char-search when on a system with support
+ for multibyte characters when running in a locale without any multibyte
+ characters.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-2.05b-beta1,
+and the previous version, bash-2.05b-alpha1.
+
+1. Changes to Bash
+
+a. Fixed a problem when parsing a POSIX.2 character class name while
+ evaluating a bracket expression containing multibyte characters.
+
+b. Changed the help text for `bind' to make it clear that any command
+ that may be placed in ~/.inputrc is a valid argument to `bind'.
+
+c. Added `help' builtin entries for `((', `[[', and arithmetic for.
+
+d. malloc updated again:
+ o slightly better overflow and underflow detection by putting the
+ chunk size at the beginning and end of the chunk and making
+ sure they match in free/realloc
+ o partial page allocated to make things page-aligned no longer
+ completely wasted
+ o block coalescing now enabled by default
+ o splitting and coalescing enabled for 32-byte chunks, the most
+ common size requested
+ o fixed a problem that resulted in spurious underflow messages and
+ aborts
+ o bin sizes are precomputed and stored in an array rather than
+ being computed at run time
+ o malloc will return memory blocks back to the system if the block
+ being freed is at the top of the heap and of sufficient size to
+ make it worthwhile
+ o malloc/free/realloc now inline memset instead of calling the
+ libc function; uses Duff's device for good performance
+
+e. Check for getservent(); make the service name completion code dependent
+ on its presence.
+
+f. Changed the readline callback that executes a command bound to a key
+ sequence to not save the executed command on the history list and to
+ save and restore the parsing state.
+
+g. Changes to lib/sh/snprintf.c: fixed some bugs in the `g' and `G'
+ floating point format display; implemented the "'" flag character
+ that turns on thousands' grouping; fixed behavior on systems where
+ MB_CUR_MAX does not evaluate to a constant.
+
+h. The `unset' builtin no longer returns a failure status when asked to
+ unset a previously-unset variable or function.
+
+i. Changes to the build system to make it easier to cross-compile bash
+ for different systems.
+
+j. Added `,' to the characters that are backslash-escaped during filename
+ completion, to avoid problems with complete-into-braces and RCS filenames
+ containing commas.
+
+k. Some changes to the multibyte character support code to avoid many calls
+ to strlen().
+
+l. Bash now correctly honors setting LANG to some value when LC_ALL does not
+ already have a value.
+
+m. Fixed a bug that could cause SIGSEGV when processing nested traps with
+ trap handlers.
+
+n. The `source/.' builtin now restores the positional parameters when it
+ returns unless they were changed using the `set' builtin during the file's
+ execution.
+
+o. Fixed a bug that caused a syntax error when a command was terminated by
+ EOF.
+
+2. New Features in Bash
+
+a. There is now support for placing the long help text into separate files
+ installed into ${datadir}/bash. Not enabled by default; can be turned
+ on with `--enable-separate-helpfiles' option to configure.
+
+b. All builtins that take operands accept a `--' pseudo-option, except
+ `echo'.
+
+c. The `echo' builtin now accepts \0xxx (zero to three octal digits following
+ the `0') in addition to \xxx (one to three octal digits) for SUSv3/XPG6/
+ POSIX.1-2001 compliance.
+
+3. Changes to Readline
+
+a. Fixed a small problem in _rl_insert_char with multibyte characters.
+
+b. Fixes from IBM for line wrapping problems when using multibyte characters.
+
+c. Fixed a problem which caused the display to be messed up when the last
+ line of a multi-line prompt (possibly containing invisible characters)
+ was longer than the screen width.
+
+d. Fixed a problem with the vi-mode `r' command that ocurred on systems with
+ support for multibyte characters when running in a locale without any
+ multibyte characters.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-2.05b-alpha1,
+and the previous version, bash-2.05a-release.
+
+1. Changes to Bash
+
+a. Some changes to work around inlining differences between compilers.
+
+b. Added more prototypes for internal shell typedefs, to catch argument
+ passing errors when using pointers to functions.
+
+c. The `cd' builtin now fails in posix mode when a valid directory cannot be
+ constructed from a relative pathname argument and the $PWD using pathname
+ canonicalization, and the -P option has not been supplied. Previously,
+ the shell would attempt to use what the user typed, leading to weird
+ values for $PWD and discrepancies between the value of $PWD and the
+ actual working directory.
+
+d. The `cd' builtin now resets $PWD when canonicalization fails but a chdir
+ to the pathname passed as an argument succeeds (when not in posix mode).
+
+e. The `fc' builtin has been fixed, as POSIX requires, to use the closest
+ history position in range when given an out-of-range argument.
+
+f. The history file loading code was changed to allow lines to be saved in
+ the history list from the shell startup files.
+
+g. `history -s args' now works better in compound commands.
+
+h. The tilde expansion code was fixed to better recognize when it's being
+ invoked in an assignment context, which enables expansion after `='
+ and `:'.
+
+i. Fixed the command name completion code so a slash is no longer appended
+ to a single match if there happens to be a directory with that name in
+ $PWD.
+
+j. Fixed compound array assignment to no longer perform alias expansion, to
+ allow reserved words as array members, and to not produce extra output
+ when the `-v' option had been enabled.
+
+k. Fixed the programmable completion code to better handle newlines in lists
+ of possible completions (e.g., `complete -W').
+
+l. Removed the reserved words from the `bash-builtins' manual page.
+
+m. Parser error reporting now attempts to do a better job of identifying the
+ token in error rather than doing straight textual analysis.
+
+n. Fixes for Inf/NaN, locales, wide/multibyte characters and zero-length
+ arguments in the library snprintf(3) replacement.
+
+o. `read -e' no longer does command name completion on the first word on
+ the line being read.
+
+p. `select' now returns failure if the read of the user's selection fails.
+
+q. Fixed a bug that could cause a core dump when setting $PIPESTATUS.
+
+r. Fixes to not allocate so many job slots when the shell is running a loop
+ with job control enabled in a subshell of an interactive shell.
+
+s. Fixed a bug in the trap code that caused traps to be inherited by
+ command substitutions in some cases.
+
+t. Fixed a bug that could cause alias expansion to inappropriately expand
+ the word following the alias.
+
+u. Fixed a bug in the `kill' builtin that mishandled negative pid arguments.
+
+v. The parser is less lenient when parsing assignment statements where the
+ characters before the `=' don't comprise a valid identifier.
+
+w. The arithmetic expression evaluation code now honors the setting of the
+ `-u' option when expanding variable names.
+
+x. Fixed the arithmetic evaluation code to allow array subscripts to be
+ assigned (`let b[7]=42') and auto-incremented and auto-decremented
+ (e.g., b[7]++).
+
+y. Reimplemented the existing prompt string date and time expansions using
+ strftime(3), which changed the output of \@ in some locales.
+
+z. Fixed a bug that could cause a core dump when a special shell variable
+ (like RANDOM) was converted to an array with a variable assignment.
+
+aa. Fixed a bug that would reset the handler for a signal the user had
+ trapped to a function that would exit the shell when setting the exit
+ trap in a non-interactive shell.
+
+bb. Changed the execve(2) wrapper code to check whether or not a failing
+ command is a directory before looking at whether a `#!' interpreter
+ failed for some reason.
+
+cc. Fixed a bug in the command printing code so it no longer inserts a `;'
+ after a newline, which produces a syntax error when reused as input.
+
+dd. The code that expands $PS4 no longer inherits the `-x' flag.
+
+ee. The bash-specific completion functions may now take advantage of the
+ double-TAB and M-? features of the standard readline completion
+ functions.
+
+ff. The mail checking code no longer prints a message if the checked file's
+ size has not increased, even if the access time is less than the modification time.
+
+gg. Rewrote the variable symbol table code: there is now a stack of
+ contexts, each possibly including a separate symbol table; there can
+ be more than one temporary environment supplied to nested invocations
+ of `./source'; the temporary environments no longer require so much
+ special-case code; shell functions now handle the temporary environment
+ and local variables more consistently; function scope exit is faster now
+ that the entire symbol table does not have to be traversed to dispose of
+ local variables; it is now easier to push vars from the temporary
+ environment to the shell's variable table in posix mode; some duplicated
+ code has been removed.
+
+hh. Regularized the error message printing code; builtin_error is now called
+ more consistently, and common error message strings are handled by small
+ functions. This should make eventual message translation easier.
+
+ii. Error messages now include the line number in a script when the shell
+ is not interactive.
+
+jj. Array subscript expansion now takes place even when the array variable is
+ unset, so side effects will take place.
+
+kk. Fixed a bug in the SICGHLD child-reaping code so that it won't find
+ jobs already marked as terminated if the OS reuses pids quickly enough.
+
+ll. Fixed a bug that could cause a signal to not interrupt the `wait'
+ builtin while it was waiting for a background process to terminate.
+
+mm. A couple of changes to make it easier for multiple shells to share history
+ files using `history -n', `history -r', and `history -w'.
+
+nn. The `getopts' builtin always increments OPTIND to point to the next
+ option to be handled when an option is returned, whether it's valid
+ or not, as POSIX 1003.x-2001 requires.
+
+oo. Changed some parts of the expansion code to avoid allocating and
+ immediately freeing memory without using the results for anything.
+
+pp. The shell now keeps track of $IFS internally, updating its internal map
+ each time the variable is assigned a new value (or at local scope exit).
+ This saves thousands of hash lookups for IFS, which, while individually
+ cheap, add up.
+
+qq. Rewrote the hash table code: searching and insertion are much faster now,
+ and it uses a better string hashing function; augmented the function
+ interface to simplify other parts of the code and remove duplicated code
+
+rr. The shell now uses a simple, generic `object cache' for allocating and
+ caching words and word lists, which were the major users of
+ malloc/free.
+
+ss. Fixed the assignment statement parsing code to allow whitespace and
+ newlines in subscripts when performing array element assignment.
+
+tt. The shell now issues many fewer calls to sigprocmask and other signal
+ masking system calls.
+
+uu. Fixed the `test' and conditional command file comparison operators to
+ work right when one file has a non-positive timestamp and the other
+ does not exist.
+
+vv. Fixed some cases where the special characters '\001' and '\177' in the
+ values of variables or positional parameters caused incorrect expansion
+ results.
+
+2. Changes to Readline
+
+a. Fixed output of comment-begin character when listing variable values.
+
+b. Added some default key bindings for common escape sequences produced by
+ HOME and END keys.
+
+c. Fixed the mark handling code to be more emacs-compatible.
+
+d. A bug was fixed in the code that prints possible completions to keep it
+ from printing empty strings in certain circumstances.
+
+e. Change the key sequence printing code to print ESC as M\- if ESC is a
+ meta-prefix character -- it's easier for users to understand than \e.
+
+f. Fixed unstifle_history() to return values that match the documentation.
+
+g. Fixed the event loop (rl_event_hook) to handle the case where the input
+ file descriptor is invalidated.
+
+h. Fixed the prompt display code to work better when the application has a
+ custom redisplay function.
+
+i. Changes to make reading and writing the history file a little faster, and
+ to cope with huge history files without calling abort(3) from xmalloc.
+
+j. The vi-mode `S' and `s' commands are now undone correctly.
+
+3. New Features in Bash
+
+a. If set, TMOUT is the default timeout for the `read' builtin.
+
+b. `type' has two new options: `-f' suppresses shell function lookup, and
+ `-P' forces a $PATH search.
+
+c. New code to handle multibyte characters.
+
+d. `select' was changed to be more ksh-compatible, in that the menu is
+ reprinted each time through the loop only if REPLY is set to NULL.
+ The previous behavior is available as a compile-time option.
+
+e. `complete -d' and `complete -o dirnames' now force a slash to be
+ appended to names which are symlinks to directories.
+
+f. There is now a bindable edit-and-execute-command readline command,
+ like the vi-mode `v' command, bound to C-xC-e in emacs mode.
+
+g. Added support for ksh93-like [:word:] character class in pattern matching.
+
+h. The $'...' quoting construct now expands \cX to Control-X.
+
+i. A new \D{...} prompt expansion; passes the `...' to strftime and inserts
+ the result into the expanded prompt.
+
+j. The shell now performs arithmetic in the largest integer size the
+ machine supports (intmax_t), instead of long.
+
+k. If a numeric argument is supplied to one of the bash globbing completion
+ functions, a `*' is appended to the word before expansion is attempted.
+
+l. The bash globbing completion functions now allow completions to be listed
+ with double tabs or if `show-all-if-ambiguous' is set.
+
+m. New `-o nospace' option for `complete' and `compgen' builtins; suppresses
+ readline's appending a space to the completed word.
+
+n. New `here-string' redirection operator: <<< word.
+
+o. When displaying variables, function attributes and definitions are shown
+ separately, allowing them to be re-used as input (attempting to re-use
+ the old output would result in syntax errors).
+
+p. There is a new configuration option `--enable-mem-scramble', controls
+ bash malloc behavior of writing garbage characters into memory at
+ allocation and free time.
+
+q. The `complete' and `compgen' builtins now have a new `-s/-A service'
+ option to complete on names from /etc/services.
+
+r. `read' has a new `-u fd' option to read from a specified file descriptor.
+
+s. Fix the completion code so that expansion errors in a directory name
+ don't cause a longjmp back to the command loop.
+
+t. Fixed word completion inside command substitution to work a little more
+ intuitively.
+
+u. The `printf' %q format specifier now uses $'...' quoting to print the
+ argument if it contains non-printing characters.
+
+v. The `declare' and `typeset' builtins have a new `-t' option. When applied
+ to functions, it causes the DEBUG trap to be inherited by the named
+ function. Currently has no effect on variables.
+
+w. The DEBUG trap is now run *before* simple commands, ((...)) commands,
+ [[...]] conditional commands, and for ((...)) loops.
+
+x. The expansion of $LINENO inside a shell function is only relative to the
+ function start if the shell is interactive -- if the shell is running a
+ script, $LINENO expands to the line number in the script. This is as
+ POSIX-2001 requires.
+
+y. The bash debugger in examples/bashdb has been modified to work with the
+ new DEBUG trap semantics, the command set has been made more gdb-like,
+ and the changes to $LINENO make debugging functions work better. Code
+ from Gary Vaughan.
+
+z. New [n]<&word- and [n]>&word- redirections from ksh93 -- move fds (dup
+ and close).
+
+aa. There is a new `-l' invocation option, equivalent to `--login'.
+
+bb. The `hash' builtin has a new `-l' option to list contents in a reusable
+ format, and a `-d' option to remove a name from the hash table.
+
+4. New Features in Readline
+
+a. Support for key `subsequences': allows, e.g., ESC and ESC-a to both
+ be bound to readline functions. Now the arrow keys may be used in vi
+ insert mode.
+
+b. When listing completions, and the number of lines displayed is more than
+ the screen length, readline uses an internal pager to display the results.
+ This is controlled by the `page-completions' variable (default on).
+
+c. New code to handle editing and displaying multibyte characters.
+
+d. The behavior introduced in bash-2.05a of deciding whether or not to
+ append a slash to a completed name that is a symlink to a directory has
+ been made optional, controlled by the `mark-symlinked-directories'
+ variable (default is the 2.05a behavior).
+
+e. The `insert-comment' command now acts as a toggle if given a numeric
+ argument: if the first characters on the line don't specify a
+ comment, insert one; if they do, delete the comment text
+
+f. New application-settable completion variable:
+ rl_completion_mark_symlink_dirs, allows an application's completion
+ function to temporarily override the user's preference for appending
+ slashes to names which are symlinks to directories.
+
+g. New function available to application completion functions:
+ rl_completion_mode, to tell how the completion function was invoked
+ and decide which argument to supply to rl_complete_internal (to list
+ completions, etc.).
+
+h. Readline now has an overwrite mode, toggled by the `overwrite-mode'
+ bindable command, which could be bound to `Insert'.
+
+i. New application-settable completion variable:
+ rl_completion_suppress_append, inhibits appending of
+ rl_completion_append_character to completed words.
+
+j. New key bindings when reading an incremental search string: ^W yanks
+ the currently-matched word out of the current line into the search
+ string; ^Y yanks the rest of the current line into the search string,
+ DEL or ^H deletes characters from the search string.
+
+------------------------------------------------------------------------------
This document details the changes between this version, bash-2.05a-release,
and the previous version, bash-2.05a-rc1.