The first public release of bash-3.2 is now available with the URLs

and from the usual GNU mirror sites.

This tar file does not include the formatted documentation
(postscript, dvi, html, and nroffed versions of the manual pages);
that may be retrieved with the URLs

When unpacking the documentation, make sure to extract the tar file
in the bash-3.2 source directory.

Diffs from bash-3.1 are not available.

Please use `bashbug' to report bugs with this version. It is built
and installed at the same time as bash.


Please read the README file first.

Installation instructions are provided in the INSTALL file.

New Features

This is the second maintenance release for the third major release of bash.

This release fixes the relatively few remaining bugs in the bash3 line.
It will probably be the final release before bash version 4.

Read the file NEWS in the bash-3.2 distribution for a complete description
of the new features.

Changes have been made to the Readline library being released at
the same time as bash-3.2, readline-5.2, so that Bash can be
linked against an already-installed Readline library rather than
the private version in lib/readline. Only readline-5.1 and later
versions are able to provide all of the symbols that bash-3.2
requires; earlier versions of the Readline library will not work

A complete list of changes between bash-3.1 and bash-3.2 is
available in the file CHANGES; the relevant portions are appended.


Also available is a new release of the standalone Readline library,
version 5.2, with its own configuration scripts and Makefiles.
It can be retrieved with the URLs

and from the usual GNU mirror sites.

Diffs from readline-5.1 are not available.

The formatted Readline documentation is included in the readline
distribution tar file.

A separate announcement listing the changes in Readline is being

As always, thanks for your help.


+========== CHANGES ==========+
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

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

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

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

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()

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

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