This is a terse description of the new features added to bash-3.0 since the release of bash-2.05b. As always, the manual page (doc/bash.1) is the place to look for complete descriptions. 1. 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. hh. printf builtin understands two new escape sequences: \" and \?. ii. `echo -e' understands two new escape sequences: \" and \?. jj. The GNU `gettext' package and libintl have been integrated; the shell's messages can be translated into different languages. kk. The `\W' prompt expansion now abbreviates $HOME as `~', like `\w'. ll. 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. mm. A bug that caused here documents to not work if the directory the shell used for the temporary files was not writable has been fixed. nn. The parameter pattern removal and substitution expansions are now much faster and more efficient when using multibyte characters. oo. Fixed a bug in the `shift' builtin that could cause core dumps when reporting an out-of-range argument. pp. The `jobs', `kill', and `wait' builtins now accept job control notation even if job control is not enabled. qq. 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. 2. 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() i. New application variable, rl_completion_quote_character, set to any quote character readline finds before it calls the application completion function. j. 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. k. 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. l. 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. m. New bindable command: unix-filename-rubout. Does the same thing as unix-word-rubout, but adds `/' to the set of word delimiters.