1 This is a terse description of the new features added to bash-5.2 since
2 the release of bash-5.1. As always, the manual page (doc/bash.1) is
3 the place to look for complete descriptions.
5 1. New Features in Bash
7 a. The bash malloc returns memory that is aligned on 16-byte boundaries.
9 b. There is a new internal timer framework used for read builtin timeouts.
11 c. Rewrote the command substitution parsing code to call the parser recursively
12 and rebuild the command string from the parsed command. This allows better
13 syntax checking and catches errors much earlier. Along with this, if
14 command substitution parsing completes with here-documents remaining to be
15 read, the shell prints a warning message and reads the here-document bodies
16 from the current input stream.
18 d. The `ulimit' builtin now treats an operand remaining after all of the options
19 and arguments are parsed as an argument to the last command specified by
20 an option. This is for POSIX compatibility.
22 e. Here-document parsing now handles $'...' and $"..." quoting when reading the
25 f. The `shell-expand-line' and `history-and-alias-expand-line' bindable readline
26 commands now understand $'...' and $"..." quoting.
28 g. There is a new `spell-correct-word' bindable readline command to perform
29 spelling correction on the current word.
31 h. The `unset' builtin now attempts to treat arguments as array subscripts
32 without parsing or expanding the subscript, even when `assoc_expand_once'
35 i. There is a default value for $BASH_LOADABLES_PATH in config-top.h.
37 j. Associative array assignment and certain instances of referencing (e.g.,
38 `test -v' now allow `@' and `*' to be used as keys.
40 k. Bash attempts to expand indexed array subscripts only once when executing
41 shell constructs and word expansions.
43 l. The `unset' builtin allows a subscript of `@' or `*' to unset a key with
44 that value for associative arrays instead of unsetting the entire array
45 (which you can still do with `unset arrayname'). For indexed arrays, it
46 removes all elements of the array without unsetting it (like `A=()').
48 m. Additional builtins (printf/test/read/wait) do a better job of not
49 parsing array subscripts if array_expand_once is set.
51 n. New READLINE_ARGUMENT variable set to numeric argument for readline commands
52 defined using `bind -x'.
54 o. The new `varredir_close' shell option causes bash to automatically close
55 file descriptors opened with {var}<fn and other styles of varassign
56 redirection unless they're arguments to the `exec' builtin.
58 p. The `$0' special parameter is now set to the name of the script when running
59 any (non-interactive) startup files such as $BASH_ENV.
61 q. The `enable' builtin tries to load a loadable builtin using the default
62 search path if `enable name' (without any options) attempts to enable a
65 r. The `printf' builtin has a new format specifier: %Q. This acts like %q but
66 applies any specified precision to the original unquoted argument, then
67 quotes and outputs the result.
69 s. The new `noexpand_translations' option controls whether or not the translated
70 output of $"..." is single-quoted.
72 t. There is a new parameter transformation operator: @k. This is like @K, but
73 expands the result to separate words after word splitting.
75 u. There is an alternate array implementation, selectable at `configure' time,
76 that optimizes access speed over memory use (use the new configure
77 --enable-alt-array-implementation option).
79 v. If an [N]<&WORD- or [N]>&WORD- redirection has WORD expand to the empty
80 string, treat the redirection as [N]<&- or [N]>&- and close file descriptor
83 w. Invalid parameter transformation operators are now invalid word expansions,
84 and so cause fatal errors in non-interactive shells.
86 x. New shell option: patsub_replacement. When enabled, a `&' in the replacement
87 string of the pattern substitution expansion is replaced by the portion of
88 the string that matched the pattern. Backslash will escape the `&' and
91 y. `command -p' no longer looks in the hash table for the specified command.
93 z. The new `--enable-translatable-strings' option to `configure' allows $"..."
94 support to be compiled in or out.
96 aa. The new `globskipdots' shell option forces pathname expansion never to
97 return `.' or `..' unless explicitly matched. It is enabled by default.
99 bb. Array references using `@' and `*' that are the value of nameref variables
100 (declare -n ref='v[@]' ; echo $ref) no longer cause the shell to exit if
101 set -u is enabled and the array (v) is unset.
103 cc. There is a new bindable readline command name:
104 `vi-edit-and-execute-command'.
106 dd. In posix mode, the `printf' builtin checks for the `L' length modifier and
107 uses long double for floating point conversion specifiers if it's present,
110 ee. The `globbing' completion code now takes the `globstar' option into account.
112 ff. `suspend -f' now forces the shell to suspend even if job control is not
115 gg. Since there is no `declare -' equivalent of `local -', make sure to use
116 `local -' in the output of `local -p'.
118 2. New Features in Readline
120 a. There is now an HS_HISTORY_VERSION containing the version number of the
121 history library for applications to use.
123 b. History expansion better understands multiple history expansions that may
124 contain strings that would ordinarily inhibit history expansion (e.g.,
127 c. There is a new framework for readline timeouts, including new public
128 functions to set timeouts and query how much time is remaining before a
129 timeout hits, and a hook function that can trigger when readline times
130 out. There is a new state value to indicate a timeout.
132 d. Automatically bind termcap key sequences for page-up and page-down to
133 history-search-backward and history-search-forward, respectively.
135 e. There is a new `fetch-history' bindable command that retrieves the history
136 entry corresponding to its numeric argument. Negative arguments count back
137 from the end of the history.
139 f. `vi-undo' is now a bindable command.
141 g. There is a new option: `enable-active-region'. This separates control of
142 the active region and bracketed-paste. It has the same default value as
143 bracketed-paste, and enabling bracketed paste enables the active region.
144 Users can now turn off the active region while leaving bracketed paste
147 h. rl_completer_word_break_characters is now `const char *' like
148 rl_basic_word_break_characters.
150 i. Readline looks in $LS_COLORS for a custom filename extension
151 (*.readline-colored-completion-prefix) and uses that as the default color
152 for the common prefix displayed when `colored-completion-prefix' is set.
154 j. Two new bindable string variables: active-region-start-color and
155 active-region-end-color. The first sets the color used to display the
156 active region; the second turns it off. If set, these are used in place
157 of terminal standout mode.
159 k. New readline state (RL_STATE_EOF) and application-visible variable
160 (rl_eof_found) to allow applications to detect when readline reads EOF
161 before calling the deprep-terminal hook.
163 l. There is a new configuration option: --with-shared-termcap-library, which
164 forces linking the shared readline library with the shared termcap (or
165 curses/ncurses/termlib) library so applications don't have to do it.
167 m. Readline now checks for changes to locale settings (LC_ALL/LC_CTYPE/LANG)
168 each time it is called, and modifies the appropriate locale-specific display
169 and key binding variables when the locale changes.
171 -------------------------------------------------------------------------------
172 This is a terse description of the new features added to bash-5.1 since
173 the release of bash-5.0. As always, the manual page (doc/bash.1) is
174 the place to look for complete descriptions.
176 1. New Features in Bash
178 a. `bind -x' now supports different bindings for different editing modes and
181 b. Bash attempts to optimize the number of times it forks when executing
182 commands in subshells and from `bash -c'.
184 c. Here documents and here strings now use pipes for the expanded document if
185 it's smaller than the pipe buffer size, reverting to temporary files if it's
188 d. There are new loadable builtins: mktemp, accept, mkfifo, csv, cut/lcut
190 e. In posix mode, `trap -p' now displays signals whose disposition is SIG_DFL
191 and those that were SIG_IGN when the shell starts.
193 f. The shell now expands the history number (e.g., in PS1) even if it is not
194 currently saving commands to the history list.
196 g. `read -e' may now be used with arbitrary file descriptors (`read -u N').
198 h. The `select' builtin now runs traps if its internal call to the read builtin
199 is interrupted by a signal.
201 i. SRANDOM: a new variable that expands to a 32-bit random number that is not
202 produced by an LCRNG, and uses getrandom/getentropy, falling back to
203 /dev/urandom or arc4random if available. There is a fallback generator if
204 none of these are available.
206 j. shell-transpose-words: a new bindable readline command that uses the same
207 definition of word as shell-forward-word, etc.
209 k. The shell now adds default bindings for shell-forward-word,
210 shell-backward-word, shell-transpose-words, and shell-kill-word.
212 l. Bash now allows ARGV0 appearing in the initial shell environment to set $0.
214 m. If `unset' is executed without option arguments, bash tries to unset a shell
215 function if a name argument cannot be a shell variable name because it's not
218 n. The `test -N' operator uses nanosecond timestamp granularity if it's
221 o. Bash posix mode now treats assignment statements preceding shell function
222 definitions the same as in its default mode, since POSIX has changed and
223 no longer requires those assignments to persist after the function returns
226 p. BASH_REMATCH is no longer readonly.
228 q. wait: has a new -p VARNAME option, which stores the PID returned by `wait -n'
229 or `wait' without arguments.
231 r. Sorting the results of pathname expansion now uses byte-by-byte comparisons
232 if two strings collate equally to impose a total order; the result of a
233 POSIX interpretation.
235 s. Bash now allows SIGINT trap handlers to execute recursively.
237 t. Bash now saves and restores state around setting and unsetting posix mode,
238 instead of having unsetting posix mode set a known state.
240 u. Process substitution is now available in posix mode.
242 v. READLINE_MARK: a new variable available while executing commands bound with
243 `bind -x', contains the value of the mark.
245 w. Bash removes SIGCHLD from the set of blocked signals if it's blocked at shell
248 x. `test -v N' can now test whether or not positional parameter N is set.
250 y. `local' now honors the `-p' option to display all local variables at the
253 z. The `@a' variable transformation now prints attributes for unset array
256 aa. The `@A' variable transformation now prints a declare command that sets a
257 variable's attributes if the variable has attributes but is unset.
259 bb. `declare' and `local' now have a -I option that inherits attributes and
260 value from a variable with the same name at a previous scope.
262 cc. When run from a -c command, `jobs' now reports the status of completed jobs.
264 dd. New `U', `u', and `L' parameter transformations to convert to uppercase,
265 convert first character to uppercase, and convert to lowercase,
268 ee. PROMPT_COMMAND: can now be an array variable, each element of which can
269 contain a command to be executed like a string PROMPT_COMMAND variable.
271 ff. `ulimit' has a -R option to report and set the RLIMIT_RTTIME resource.
273 gg. Associative arrays may be assigned using a list of key-value pairs within
274 a compound assignment. Compound assignments where the words are not of
275 the form [key]=value are assumed to be key-value assignments. A missing or
276 empty key is an error; a missing value is treated as NULL. Assignments may
277 not mix the two forms.
279 hh. New `K' parameter transformation to display associative arrays as key-
282 ii. Writing history to syslog now handles messages longer than the syslog max
283 length by writing multiple messages with a sequence number.
285 jj. SECONDS and RANDOM may now be assigned using arithmetic expressions, since
286 they are nominally integer variables. LINENO is not an integer variable.
288 kk. Bash temporarily suppresses the verbose option when running the DEBUG trap
289 while running a command from the `fc' builtin.
291 ll. `wait -n' now accepts a list of job specifications as arguments and will
292 wait for the first one in the list to change state.
294 mm. The associative array implementation can now dynamically increase the
295 size of the hash table based on insertion patterns.
297 nn. HISTFILE is now readonly in a restricted shell.
299 oo. The bash malloc now returns memory that is 16-byte aligned on 64-bit
302 pp. If the hash builtin is listing hashed filenames portably, don't print
303 anything if the table is empty.
305 qq. GLOBIGNORE now ignores `.' and `..' as a terminal pathname component.
307 rr. Bash attempts to optimize away forks in the last command in a function body
308 under appropriate circumstances.
310 ss. The globbing code now uses fnmatch(3) to check collation elements (if
311 available) even in cases without multibyte characters.
313 tt. The `fg' and `bg' builtins now return an error in a command substitution
314 when asked to restart a job inherited from the parent shell.
316 uu. The shell now attempts to unlink all FIFOs on exit, whether a consuming
317 process has finished with them or not.
319 vv. There is a new contributed loadable builtin: asort.
321 2. New Features in Readline
323 a. If a second consecutive completion attempt produces matches where the first
324 did not, treat it as a new completion attempt and insert a match as
327 b. Bracketed paste mode works in more places: incremental search strings, vi
328 overstrike mode, character search, and reading numeric arguments.
330 c. Readline automatically switches to horizontal scrolling if the terminal has
333 d. Unbinding all key sequences bound to a particular readline function now
334 descends into keymaps for multi-key sequences.
336 e. rl-clear-display: new bindable command that clears the screen and, if
337 possible, the scrollback buffer (bound to emacs mode M-C-l by default).
339 f. New active mark and face feature: when enabled, it will highlight the text
340 inserted by a bracketed paste (the `active region') and the text found by
341 incremental and non-incremental history searches. This is tied to bracketed
342 paste and can be disabled by turning off bracketed paste.
344 g. Readline sets the mark in several additional commands.
346 h. Bracketed paste mode is enabled by default.
348 i. Readline tries to take advantage of the more regular structure of UTF-8
349 characters to identify the beginning and end of characters when moving
350 through the line buffer.
352 j. The bindable operate-and-get-next command (and its default bindings) are
353 now part of readline instead of a bash-specific addition.
355 k. The signal cleanup code now blocks SIGINT while processing after a SIGINT.
357 -------------------------------------------------------------------------------
358 This is a terse description of the new features added to bash-5.0 since
359 the release of bash-4.4. As always, the manual page (doc/bash.1) is
360 the place to look for complete descriptions.
362 1. New Features in Bash
364 a. The `wait' builtin can now wait for the last process substitution created.
366 b. There is an EPOCHSECONDS variable, which expands to the time in seconds
367 since the Unix epoch.
369 c. There is an EPOCHREALTIME variable, which expands to the time in seconds
370 since the Unix epoch with microsecond granularity.
372 d. New loadable builtins: rm, stat, fdflags.
374 e. BASH_ARGV0: a new variable that expands to $0 and sets $0 on assignment.
376 f. When supplied a numeric argument, the shell-expand-line bindable readline
377 command does not perform quote removal and suppresses command and process
380 g. `history -d' understands negative arguments: negative arguments offset from
381 the end of the history list.
383 h. The `name' argument to the `coproc' reserved word now undergoes word
384 expansion, so unique coprocs can be created in loops.
386 i. A nameref name resolution loop in a function now resolves to a variable by
387 that name in the global scope.
389 j. The `wait' builtin now has a `-f' option, which signifies to wait until the
390 specified job or process terminates, instead of waiting until it changes
393 k. There is a define in config-top.h that allows the shell to use a static
394 value for $PATH, overriding whatever is in the environment at startup, for
395 use by the restricted shell.
397 l. Process substitution does not inherit the `v' option, like command
400 m. If a non-interactive shell with job control enabled detects that a foreground
401 job died due to SIGINT, it acts as if it received the SIGINT.
403 n. The SIGCHLD trap is run once for each exiting child process even if job
404 control is not enabled when the shell is in Posix mode.
406 o. A new shopt option: localvar_inherit; if set, a local variable inherits the
407 value of a variable with the same name at the nearest preceding scope.
409 p. `bind -r' now checks whether a key sequence is bound before binding it to
410 NULL, to avoid creating keymaps for a multi-key sequence.
412 q. A numeric argument to the line editing `operate-and-get-next' command
413 specifies which history entry to use.
415 r. The positional parameters are now assigned before running the shell startup
416 files, so startup files can use $@.
418 s. There is a compile-time option that forces the shell to disable the check
419 for an inherited OLDPWD being a directory.
421 t. The `history' builtin can now delete ranges of history entries using
424 u. The `vi-edit-and-execute-command' bindable readline command now puts readline
425 back in vi insertion mode after executing commands from the edited file.
427 v. The command completion code now matches aliases and shell function names
428 case-insensitively if the readline completion-ignore-case variable is set.
430 w. There is a new `assoc_expand_once' shell option that attempts to expand
431 associative array subscripts only once.
433 x. The shell only sets up BASH_ARGV and BASH_ARGC at startup if extended
434 debugging mode is active. The old behavior of unconditionally setting them
435 is available as part of the shell compatibility options.
437 y. The `umask' builtin now allows modes and masks greater than octal 777.
439 z. The `times' builtin now honors the current locale when printing a decimal
442 aa. There is a new (disabled by default, undocumented) shell option to enable
443 and disable sending history to syslog at runtime.
445 bb. Bash no longer allows variable assignments preceding a special builtin that
446 changes variable attributes to propagate back to the calling environment
447 unless the compatibility level is 44 or lower.
449 cc. You can set the default value for $HISTSIZE at build time in config-top.h.
451 dd. The `complete' builtin now accepts a -I option that applies the completion
452 to the initial word on the line.
454 ee. The internal bash malloc now uses mmap (if available) to satisfy requests
455 greater than 128K bytes, so free can use mfree to return the pages to the
458 ff. The shell doesn't automatically set BASH_ARGC and BASH_ARGV at startup
459 unless it's in debugging mode, as the documentation has always said, but
460 will dynamically create them if a script references them at the top level
461 without having enabled debugging mode.
463 gg. The localvar_inherit option will not attempt to inherit a value from a
464 variable of an incompatible type (indexed vs. associative arrays, for
467 hh. The `globasciiranges' option is now enabled by default; it can be set to
468 off by default at configuration time.
470 ii. Associative and indexed arrays now allow subscripts consisting solely of
473 jj. `checkwinsize' is now enabled by default.
475 kk. The `localvar_unset' shopt option is now visible and documented.
477 ll. The `progcomp_alias' shopt option is now visible and documented.
479 mm. The signal name processing code now understands `SIGRTMIN+n' all the way
482 nn. There is a new `seq' loadable builtin.
484 oo. Trap execution now honors the (internal) max invocations of `eval', since
485 traps are supposed to be executed as if using `eval'.
487 pp. The $_ variable doesn't change when the shell executes a command that forks.
489 qq. The `kill' builtin now supports -sSIGNAME and -nSIGNUM, even though
490 conforming applications aren't supposed to use them.
492 rr. POSIX mode now enables the `shift_verbose' option.
494 2. New Features in Readline
496 a. Non-incremental vi-mode search (`N', `n') can search for a shell pattern, as
497 Posix specifies (uses fnmatch(3) if available).
499 b. There are new `next-screen-line' and `previous-screen-line' bindable
500 commands, which move the cursor to the same column in the next, or previous,
501 physical line, respectively.
503 c. There are default key bindings for control-arrow-key key combinations.
505 d. A negative argument (-N) to `quoted-insert' means to insert the next N
506 characters using quoted-insert.
508 e. New public function: rl_check_signals(), which allows applications to
509 respond to signals that readline catches while waiting for input using
510 a custom read function.
512 f. There is new support for conditionally testing the readline version in an
513 inputrc file, with a full set of arithmetic comparison operators available.
515 g. There is a simple variable comparison facility available for use within an
516 inputrc file. Allowable operators are equality and inequality; string
517 variables may be compared to a value; boolean variables must be compared to
518 either `on' or `off'; variable names are separated from the operator by
521 h. The history expansion library now understands command and process
522 substitution and extended globbing and allows them to appear anywhere in a
525 i. The history library has a new variable that allows applications to set the
526 initial quoting state, so quoting state can be inherited from a previous
529 j. Readline now allows application-defined keymap names; there is a new public
530 function, rl_set_keymap_name(), to do that.
532 k. The "Insert" keypad key, if available, now puts readline into overwrite
535 -------------------------------------------------------------------------------
536 This is a terse description of the new features added to bash-4.4 since
537 the release of bash-4.3. As always, the manual page (doc/bash.1) is
538 the place to look for complete descriptions.
540 1. New Features in Bash
542 a. There is now a settable configuration #define that will cause the shell
543 to exit if the shell is running setuid without the -p option and setuid
544 to the real uid fails.
546 b. Command and process substitutions now turn off the `-v' option when
547 executing, as other shells seem to do.
549 c. The default value for the `checkhash' shell option may now be set at
550 compile time with a #define.
552 d. The `mapfile' builtin now has a -d option to use an arbitrary character
553 as the record delimiter, and a -t option to strip the delimiter as
556 e. The maximum number of nested recursive calls to `eval' is now settable in
557 config-top.h; the default is no limit.
559 f. The `-p' option to declare and similar builtins will display attributes for
560 named variables even when those variables have not been assigned values
561 (which are technically unset).
563 g. The maximum number of nested recursive calls to `source' is now settable
564 in config-top.h; the default is no limit.
566 h. All builtin commands recognize the `--help' option and print a usage
569 i. Bash does not allow function names containing `/' and `=' to be exported.
571 j. The `ulimit' builtin has new -k (kqueues) and -P (pseudoterminals) options.
573 k. The shell now allows `time ; othercommand' to time null commands.
575 l. There is a new `--enable-function-import' configuration option to allow
576 importing shell functions from the environment; import is enabled by
579 m. `printf -v var ""' will now set `var' to the empty string, as if `var=""'
582 n. GLOBIGNORE, the pattern substitution word expansion, and programmable
583 completion match filtering now honor the value of the `nocasematch' option.
585 o. There is a new ${parameter@spec} family of operators to transform the
586 value of `parameter'.
588 p. Bash no longer attempts to perform compound assignment if a variable on the
589 rhs of an assignment statement argument to `declare' has the form of a
590 compound assignment (e.g., w='(word)' ; declare foo=$w); compound
591 assignments are accepted if the variable was already declared as an array,
594 q. The declare builtin no longer displays array variables using the compound
595 assignment syntax with quotes; that will generate warnings when re-used as
596 input, and isn't necessary.
598 r. Executing the rhs of && and || will no longer cause the shell to fork if
601 s. The `local' builtin takes a new argument: `-', which will cause it to save
602 and the single-letter shell options and restore their previous values at
605 t. `complete' and `compgen' have a new `-o nosort' option, which forces
606 readline to not sort the completion matches.
608 u. Bash now allows waiting for the most recent process substitution, since it
611 v. The `unset' builtin now unsets a scalar variable if it is subscripted with
612 a `0', analogous to the ${var[0]} expansion.
614 w. `set -i' is no longer valid, as in other shells.
616 x. BASH_SUBSHELL is now updated for process substitution and group commands
617 in pipelines, and is available with the same value when running any exit
620 y. Bash now checks $INSIDE_EMACS as well as $EMACS when deciding whether or
621 not bash is being run in a GNU Emacs shell window.
623 z. Bash now treats SIGINT received when running a non-builtin command in a
624 loop the way it has traditionally treated running a builtin command:
625 running any trap handler and breaking out of the loop.
627 aa. New variable: EXECIGNORE; a colon-separate list of patterns that will
628 cause matching filenames to be ignored when searching for commands.
630 bb. Aliases whose value ends in a shell metacharacter now expand in a way to
631 allow them to be `pasted' to the next token, which can potentially change
632 the meaning of a command (e.g., turning `&' into `&&').
634 cc. `make install' now installs the example loadable builtins and a set of
635 bash headers to use when developing new loadable builtins.
637 dd. `enable -f' now attempts to call functions named BUILTIN_builtin_load when
638 loading BUILTIN, and BUILTIN_builtin_unload when deleting it. This allows
639 loadable builtins to run initialization and cleanup code.
641 ee. There is a new BASH_LOADABLES_PATH variable containing a list of directories
642 where the `enable -f' command looks for shared objects containing loadable
645 ff. The `complete_fullquote' option to `shopt' changes filename completion to
646 quote all shell metacharacters in filenames and directory names.
648 gg. The `kill' builtin now has a `-L' option, equivalent to `-l', for
649 compatibility with Linux standalone versions of kill.
651 hh. BASH_COMPAT and FUNCNEST can be inherited and set from the shell's initial
654 ii. inherit_errexit: a new `shopt' option that, when set, causes command
655 substitutions to inherit the -e option. By default, those subshells disable
656 -e. It's enabled as part of turning on posix mode.
658 jj. New prompt string: PS0. Expanded and displayed by interactive shells after
659 reading a complete command but before executing it.
661 kk. Interactive shells now behave as if SIGTSTP/SIGTTIN/SIGTTOU are set to
662 SIG_DFL when the shell is started, so they are set to SIG_DFL in child
665 ll. Posix-mode shells now allow double quotes to quote the history expansion
668 mm. OLDPWD can be inherited from the environment if it names a directory.
670 nn. Shells running as root no longer inherit PS4 from the environment, closing
671 a security hole involving PS4 expansion performing command substitution.
673 oo. If executing an implicit `cd' when the `autocd' option is set, bash will
674 now invoke a function named `cd' if one exists before executing the `cd'
677 pp. Value conversions (arithmetic expansions, case modification, etc.) now
678 happen when assigning elements of an array using compound assignment.
680 qq. There is a new option settable in config-top.h that makes multiple
681 directory arguments to `cd' a fatal error.
683 rr. Bash now uses mktemp() when creating internal temporary files; it produces
684 a warning at build time on many Linux systems.
686 2. New Features in Readline
688 a. The history truncation code now uses the same error recovery mechanism as
689 the history writing code, and restores the old version of the history file
690 on error. The error recovery mechanism handles symlinked history files.
692 b. There is a new bindable variable, `enable-bracketed-paste', which enables
693 support for a terminal's bracketed paste mode.
695 c. The editing mode indicators can now be strings and are user-settable
696 (new `emacs-mode-string', `vi-cmd-mode-string' and `vi-ins-mode-string'
697 variables). Mode strings can contain invisible character sequences.
698 Setting mode strings to null strings restores the defaults.
700 d. Prompt expansion adds the mode string to the last line of a multi-line
701 prompt (one with embedded newlines).
703 e. There is a new bindable variable, `colored-completion-prefix', which, if
704 set, causes the common prefix of a set of possible completions to be
707 f. There is a new bindable command `vi-yank-pop', a vi-mode version of emacs-
710 g. The redisplay code underwent several efficiency improvements for multibyte
713 h. The insert-char function attempts to batch-insert all pending typeahead
714 that maps to self-insert, as long as it is coming from the terminal.
716 i. rl_callback_sigcleanup: a new application function that can clean up and
717 unset any state set by readline's callback mode. Intended to be used
720 j. If an incremental search string has its last character removed with DEL, the
721 resulting empty search string no longer matches the previous line.
723 k. If readline reads a history file that begins with `#' (or the value of
724 the history comment character) and has enabled history timestamps, the
725 history entries are assumed to be delimited by timestamps. This allows
726 multi-line history entries.
728 l. Readline now throws an error if it parses a key binding without a
729 terminating `:' or whitespace.
731 m. The default binding for ^W in vi mode now uses word boundaries specified
732 by Posix (vi-unix-word-rubout is bindable command name).
734 n. rl_clear_visible_line: new application-callable function; clears all
735 screen lines occupied by the current visible readline line.
737 o. rl_tty_set_echoing: application-callable function that controls whether
738 or not readline thinks it is echoing terminal output.
740 p. Handle >| and strings of digits preceding and following redirection
741 specifications as single tokens when tokenizing the line for history
744 q. Fixed a bug with displaying completions when the prefix display length
745 is greater than the length of the completions to be displayed.
747 r. The :p history modifier now applies to the entire line, so any expansion
748 specifying :p causes the line to be printed instead of expanded.
750 s. New application-callable function: rl_pending_signal(): returns the signal
751 number of any signal readline has caught but not yet handled.
753 t. New application-settable variable: rl_persistent_signal_handlers: if set
754 to a non-zero value, readline will enable the readline-6.2 signal handler
755 behavior in callback mode: handlers are installed when
756 rl_callback_handler_install is called and removed removed when a complete
759 -------------------------------------------------------------------------------
760 This is a terse description of the new features added to bash-4.3 since
761 the release of bash-4.2. As always, the manual page (doc/bash.1) is
762 the place to look for complete descriptions.
764 1. New Features in Bash
766 a. The `helptopic' completion action now maps to all the help topics, not just
769 b. The `help' builtin no longer does prefix substring matching first, so
770 `help read' does not match `readonly', but will do it if exact string
773 c. The shell can be compiled to not display a message about processes that
774 terminate due to SIGTERM.
776 d. Non-interactive shells now react to the setting of checkwinsize and set
777 LINES and COLUMNS after a foreground job exits.
779 e. There is a new shell option, `globasciiranges', which, when set to on,
780 forces globbing range comparisons to use character ordering as if they
781 were run in the C locale.
783 f. There is a new shell option, `direxpand', which makes filename completion
784 expand variables in directory names in the way bash-4.1 did.
786 g. In Posix mode, the `command' builtin does not change whether or not a
787 builtin it shadows is treated as an assignment builtin.
789 h. The `return' and `exit' builtins accept negative exit status arguments.
791 i. The word completion code checks whether or not a filename containing a
792 shell variable expands to a directory name and appends `/' to the word
793 as appropriate. The same code expands shell variables in command names
794 when performing command completion.
796 j. In Posix mode, it is now an error to attempt to define a shell function
797 with the same name as a Posix special builtin.
799 k. When compiled for strict Posix conformance, history expansion is disabled
802 l. The history expansion character (!) does not cause history expansion when
803 followed by the closing quote in a double-quoted string.
805 m. `complete' and its siblings compgen/compopt now takes a new `-o noquote'
806 option to inhibit quoting of the completions.
808 n. Setting HISTSIZE to a value less than zero causes the history list to be
809 unlimited (setting it 0 zero disables the history list).
811 o. Setting HISTFILESIZE to a value less than zero causes the history file size
812 to be unlimited (setting it to 0 causes the history file to be truncated
815 p. The `read' builtin now skips NUL bytes in the input.
817 q. There is a new `bind -X' option to print all key sequences bound to Unix
820 r. When in Posix mode, `read' is interruptible by a trapped signal. After
821 running the trap handler, read returns 128+signal and throws away any
822 partially-read input.
824 s. The command completion code skips whitespace and assignment statements
825 before looking for the command name word to be completed.
827 t. The build process has a new mechanism for constructing separate help files
828 that better reflects the current set of compilation options.
830 u. The -nt and -ot options to test now work with files with nanosecond
831 timestamp resolution.
833 v. The shell saves the command history in any shell for which history is
834 enabled and HISTFILE is set, not just interactive shells.
836 w. The shell has `nameref' variables and new -n(/+n) options to declare and
837 unset to use them, and a `test -R' option to test for them.
839 x. The shell now allows assigning, referencing, and unsetting elements of
840 indexed arrays using negative subscripts (a[-1]=2, echo ${a[-1]}) which
841 count back from the last element of the array.
843 y. The {x}<word redirection feature now allows words like {array[ind]} and
844 can use variables with special meanings to the shell (e.g., BASH_XTRACEFD).
846 z. There is a new CHILD_MAX special shell variable; its value controls the
847 number of exited child statues the shell remembers.
849 aa. There is a new configuration option (--enable-direxpand-default) that
850 causes the `direxpand' shell option to be enabled by default.
852 bb. Bash does not do anything special to ensure that the file descriptor
853 assigned to X in {x}<foo remains open after the block containing it
856 cc. The `wait' builtin has a new `-n' option to wait for the next child to
859 dd. The `printf' %(...)T format specifier now uses the current time if no
860 argument is supplied.
862 ee. There is a new variable, BASH_COMPAT, that controls the current shell
865 ff. The `popd' builtin now treats additional arguments as errors.
867 gg. The brace expansion code now treats a failed sequence expansion as a
868 simple string and will continue to expand brace terms in the remainder
871 hh. Shells started to run process substitutions now run any trap set on EXIT.
873 ii. The fc builtin now interprets -0 as the current command line.
875 jj. Completing directory names containing shell variables now adds a trailing
876 slash if the expanded result is a directory.
878 kk. `cd' has a new `-@' option to browse a file's extended attributes on
879 systems that support O_XATTR.
881 ll. The test/[/[[ `-v variable' binary operator now understands array
884 2. New Features in Readline
886 a. Readline is now more responsive to SIGHUP and other fatal signals when
887 reading input from the terminal or performing word completion but no
888 longer attempts to run any not-allowable functions from a signal handler
891 b. There are new bindable commands to search the history for the string of
892 characters between the beginning of the line and the point
893 (history-substring-search-forward, history-substring-search-backward)
895 c. Readline allows quoted strings as the values of variables when setting
896 them with `set'. As a side effect, trailing spaces and tabs are ignored
897 when setting a string variable's value.
899 d. The history library creates a backup of the history file when writing it
900 and restores the backup on a write error.
902 e. New application-settable variable: rl_filename_stat_hook: a function called
903 with a filename before using it in a call to stat(2). Bash uses it to
904 expand shell variables so things like $HOME/Downloads have a slash
907 f. New bindable function `print-last-kbd-macro', prints the most-recently-
908 defined keyboard macro in a reusable format.
910 g. New user-settable variable `colored-stats', enables use of colored text
911 to denote file types when displaying possible completions (colored analog
914 h. New user-settable variable `keyseq-timout', acts as an inter-character
915 timeout when reading input or incremental search strings.
917 i. New application-callable function: rl_clear_history. Clears the history list
918 and frees all readline-associated private data.
920 j. New user-settable variable, show-mode-in-prompt, adds a characters to the
921 beginning of the prompt indicating the current editing mode.
923 k. New application-settable variable: rl_input_available_hook; function to be
924 called when readline detects there is data available on its input file
927 l. Readline calls an application-set event hook (rl_event_hook) after it gets
928 a signal while reading input (read returns -1/EINTR but readline does not
929 handle the signal immediately) to allow the application to handle or
932 m. If the user-settable variable `history-size' is set to a value less than
933 0, the history list size is unlimited.
935 n. New application-settable variable: rl_signal_event_hook; function that is
936 called when readline is reading terminal input and read(2) is interrupted
937 by a signal. Currently not called for SIGHUP or SIGTERM.
939 o. rl_change_environment: new application-settable variable that controls
940 whether or not Readline modifies the environment (currently readline
941 modifies only LINES and COLUMNS).
943 -------------------------------------------------------------------------------
944 This is a terse description of the new features added to bash-4.2 since
945 the release of bash-4.1. As always, the manual page (doc/bash.1) is
946 the place to look for complete descriptions.
948 1. New Features in Bash
950 a. `exec -a foo' now sets $0 to `foo' in an executable shell script without a
953 b. Subshells begun to execute command substitutions or run shell functions or
954 builtins in subshells do not reset trap strings until a new trap is
955 specified. This allows $(trap) to display the caller's traps and the
956 trap strings to persist until a new trap is set.
958 c. `trap -p' will now show signals ignored at shell startup, though their
959 disposition still cannot be modified.
961 d. $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.
963 e. declare/typeset has a new `-g' option, which creates variables in the
964 global scope even when run in a shell function.
966 f. test/[/[[ have a new -v variable unary operator, which returns success if
967 `variable' has been set.
969 g. Posix parsing changes to allow `! time command' and multiple consecutive
970 instances of `!' (which toggle) and `time' (which have no cumulative
973 h. Posix change to allow `time' as a command by itself to print the elapsed
974 user, system, and real times for the shell and its children.
976 j. $((...)) is always parsed as an arithmetic expansion first, instead of as
977 a potential nested command substitution, as Posix requires.
979 k. A new FUNCNEST variable to allow the user to control the maximum shell
980 function nesting (recursive execution) level.
982 l. The mapfile builtin now supplies a third argument to the callback command:
983 the line about to be assigned to the supplied array index.
985 m. The printf builtin has a new %(fmt)T specifier, which allows time values
986 to use strftime-like formatting.
988 n. There is a new `compat41' shell option.
990 o. The cd builtin has a new Posix-mandated `-e' option.
992 p. Negative subscripts to indexed arrays, previously errors, now are treated
993 as offsets from the maximum assigned index + 1.
995 q. Negative length specifications in the ${var:offset:length} expansion,
996 previously errors, are now treated as offsets from the end of the variable.
998 r. Parsing change to allow `time -p --'.
1000 s. Posix-mode parsing change to not recognize `time' as a keyword if the
1001 following token begins with a `-'. This means no more Posix-mode
1002 `time -p'. Posix interpretation 267.
1004 t. There is a new `lastpipe' shell option that runs the last command of a
1005 pipeline in the current shell context. The lastpipe option has no
1006 effect if job control is enabled.
1008 u. History expansion no longer expands the `$!' variable expansion.
1010 v. Posix mode shells no longer exit if a variable assignment error occurs
1011 with an assignment preceding a command that is not a special builtin.
1013 w. Non-interactive mode shells exit if -u is enabled and an attempt is made
1014 to use an unset variable with the % or # expansions, the `//', `^', or
1015 `,' expansions, or the parameter length expansion.
1017 x. Posix-mode shells use the argument passed to `.' as-is if a $PATH search
1018 fails, effectively searching the current directory. Posix-2008 change.
1020 2. New Features in Readline
1022 a. The history library does not try to write the history filename in the
1023 current directory if $HOME is unset. This closes a potential security
1024 problem if the application does not specify a history filename.
1026 b. New bindable variable `completion-display-width' to set the number of
1027 columns used when displaying completions.
1029 c. New bindable variable `completion-case-map' to cause case-insensitive
1030 completion to treat `-' and `_' as identical.
1032 d. There are new bindable vi-mode command names to avoid readline's case-
1033 insensitive matching not allowing them to be bound separately.
1035 e. New bindable variable `menu-complete-display-prefix' causes the menu
1036 completion code to display the common prefix of the possible completions
1037 before cycling through the list, instead of after.
1039 -------------------------------------------------------------------------------
1040 This is a terse description of the new features added to bash-4.1 since
1041 the release of bash-4.0. As always, the manual page (doc/bash.1) is
1042 the place to look for complete descriptions.
1044 1. New Features in Bash
1046 a. Here-documents within $(...) command substitutions may once more be
1047 delimited by the closing right paren, instead of requiring a newline.
1049 b. Bash's file status checks (executable, readable, etc.) now take file
1050 system ACLs into account on file systems that support them.
1052 c. Bash now passes environment variables with names that are not valid
1053 shell variable names through into the environment passed to child
1056 d. The `execute-unix-command' readline function now attempts to clear and
1057 reuse the current line rather than move to a new one after the command
1060 e. `printf -v' can now assign values to array indices.
1062 f. New `complete -E' and `compopt -E' options that work on the "empty"
1063 completion: completion attempted on an empty command line.
1065 g. New complete/compgen/compopt -D option to define a `default' completion:
1066 a completion to be invoked on command for which no completion has been
1067 defined. If this function returns 124, programmable completion is
1068 attempted again, allowing a user to dynamically build a set of completions
1069 as completion is attempted by having the default completion function
1070 install individual completion functions each time it is invoked.
1072 h. When displaying associative arrays, subscripts are now quoted.
1074 i. Changes to dabbrev-expand to make it more `emacs-like': no space appended
1075 after matches, completions are not sorted, and most recent history entries
1076 are presented first.
1078 j. The [[ and (( commands are now subject to the setting of `set -e' and the
1081 k. The source/. builtin now removes NUL bytes from the file before attempting
1084 l. There is a new configuration option (in config-top.h) that forces bash to
1085 forward all history entries to syslog.
1087 m. A new variable $BASHOPTS to export shell options settable using `shopt' to
1090 n. There is a new configure option that forces the extglob option to be
1093 o. New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
1094 output to that file descriptor.
1096 p. If the optional left-hand-side of a redirection is of the form {var}, the
1097 shell assigns the file descriptor used to $var or uses $var as the file
1098 descriptor to move or close, depending on the redirection operator.
1100 q. The < and > operators to the [[ conditional command now do string
1101 comparison according to the current locale if the compatibility level
1104 r. Programmable completion now uses the completion for `b' instead of `a'
1105 when completion is attempted on a line like: a $(b c.
1107 s. Force extglob on temporarily when parsing the pattern argument to
1108 the == and != operators to the [[ command, for compatibility.
1110 t. Changed the behavior of interrupting the wait builtin when a SIGCHLD is
1111 received and a trap on SIGCHLD is set to be Posix-mode only.
1113 u. The read builtin has a new `-N nchars' option, which reads exactly NCHARS
1114 characters, ignoring delimiters like newline.
1116 v. The mapfile/readarray builtin no longer stores the commands it invokes via
1117 callbacks in the history list.
1119 w. There is a new `compat40' shopt option.
1121 2. New Features in Readline
1123 a. New bindable function: menu-complete-backward.
1125 b. In the vi insertion keymap, C-n is now bound to menu-complete by default,
1126 and C-p to menu-complete-backward.
1128 c. When in vi command mode, repeatedly hitting ESC now does nothing, even
1129 when ESC introduces a bound key sequence. This is closer to how
1130 historical vi behaves.
1132 d. New bindable function: skip-csi-sequence. Can be used as a default to
1133 consume key sequences generated by keys like Home and End without having
1136 e. New application-settable function: rl_filename_rewrite_hook. Can be used
1137 to rewrite or modify filenames read from the file system before they are
1138 compared to the word to be completed.
1140 f. New bindable variable: skip-completed-text, active when completing in the
1141 middle of a word. If enabled, it means that characters in the completion
1142 that match characters in the remainder of the word are "skipped" rather
1143 than inserted into the line.
1145 g. The pre-readline-6.0 version of menu completion is available as
1146 "old-menu-complete" for users who do not like the readline-6.0 version.
1148 h. New bindable variable: echo-control-characters. If enabled, and the
1149 tty ECHOCTL bit is set, controls the echoing of characters corresponding
1150 to keyboard-generated signals.
1152 i. New bindable variable: enable-meta-key. Controls whether or not readline
1153 sends the smm/rmm sequences if the terminal indicates it has a meta key
1154 that enables eight-bit characters.
1156 -------------------------------------------------------------------------------
1157 This is a terse description of the new features added to bash-4.0 since
1158 the release of bash-3.2. As always, the manual page (doc/bash.1) is
1159 the place to look for complete descriptions.
1161 1. New Features in Bash
1163 a. When using substring expansion on the positional parameters, a starting
1164 index of 0 now causes $0 to be prefixed to the list.
1166 b. The `help' builtin now prints its columns with entries sorted vertically
1167 rather than horizontally.
1169 c. There is a new variable, $BASHPID, which always returns the process id of
1172 d. There is a new `autocd' option that, when enabled, causes bash to attempt
1173 to `cd' to a directory name that is supplied as the first word of a
1176 e. There is a new `checkjobs' option that causes the shell to check for and
1177 report any running or stopped jobs at exit.
1179 f. The programmable completion code exports a new COMP_TYPE variable, set to
1180 a character describing the type of completion being attempted.
1182 g. The programmable completion code exports a new COMP_KEY variable, set to
1183 the character that caused the completion to be invoked (e.g., TAB).
1185 h. If creation of a child process fails due to insufficient resources, bash
1186 will try again several times before reporting failure.
1188 i. The programmable completion code now uses the same set of characters as
1189 readline when breaking the command line into a list of words.
1191 j. The block multiplier for the ulimit -c and -f options is now 512 when in
1192 Posix mode, as Posix specifies.
1194 k. Changed the behavior of the read builtin to save any partial input received
1195 in the specified variable when the read builtin times out. This also
1196 results in variables specified as arguments to read to be set to the empty
1197 string when there is no input available. When the read builtin times out,
1198 it returns an exit status greater than 128.
1200 l. The shell now has the notion of a `compatibility level', controlled by
1201 new variables settable by `shopt'. Setting this variable currently
1202 restores the bash-3.1 behavior when processing quoted strings on the rhs
1203 of the `=~' operator to the `[[' command.
1205 m. The `ulimit' builtin now has new -b (socket buffer size) and -T (number
1206 of threads) options.
1208 n. The -p option to `declare' now displays all variable values and attributes
1209 (or function values and attributes if used with -f).
1211 o. There is a new `compopt' builtin that allows completion functions to modify
1212 completion options for existing completions or the completion currently
1215 p. The `read' builtin has a new -i option which inserts text into the reply
1216 buffer when using readline.
1218 q. A new `-E' option to the complete builtin allows control of the default
1219 behavior for completion on an empty line.
1221 r. There is now limited support for completing command name words containing
1222 globbing characters.
1224 s. Changed format of internal help documentation for all builtins to roughly
1225 follow man page format.
1227 t. The `help' builtin now has a new -d option, to display a short description,
1228 and a -m option, to print help information in a man page-like format.
1230 u. There is a new `mapfile' builtin to populate an array with lines from a
1231 given file. The name `readarray' is a synonym.
1233 v. If a command is not found, the shell attempts to execute a shell function
1234 named `command_not_found_handle', supplying the command words as the
1237 w. There is a new shell option: `globstar'. When enabled, the globbing code
1238 treats `**' specially -- it matches all directories (and files within
1239 them, when appropriate) recursively.
1241 x. There is a new shell option: `dirspell'. When enabled, the filename
1242 completion code performs spelling correction on directory names during
1245 y. The `-t' option to the `read' builtin now supports fractional timeout
1248 z. Brace expansion now allows zero-padding of expanded numeric values and
1249 will add the proper number of zeroes to make sure all values contain the
1250 same number of digits.
1252 aa. There is a new bash-specific bindable readline function: `dabbrev-expand'.
1253 It uses menu completion on a set of words taken from the history list.
1255 bb. The command assigned to a key sequence with `bind -x' now sets two new
1256 variables in the environment of the executed command: READLINE_LINE_BUFFER
1257 and READLINE_POINT. The command can change the current readline line
1258 and cursor position by modifying READLINE_LINE_BUFFER and READLINE_POINT,
1261 cc. There is a new &>> redirection operator, which appends the standard output
1262 and standard error to the named file.
1264 dd. The parser now understands `|&' as a synonym for `2>&1 |', which redirects
1265 the standard error for a command through a pipe.
1267 ee. The new `;&' case statement action list terminator causes execution to
1268 continue with the action associated with the next pattern in the
1269 statement rather than terminating the command.
1271 ff. The new `;;&' case statement action list terminator causes the shell to
1272 test the next set of patterns after completing execution of the current
1273 action, rather than terminating the command.
1275 gg. The shell understands a new variable: PROMPT_DIRTRIM. When set to an
1276 integer value greater than zero, prompt expansion of \w and \W will
1277 retain only that number of trailing pathname components and replace
1278 the intervening characters with `...'.
1280 hh. There are new case-modifying word expansions: uppercase (^[^]) and
1281 lowercase (,[,]). They can work on either the first character or
1282 array element, or globally. They accept an optional shell pattern
1283 that determines which characters to modify. There is an optionally-
1284 configured feature to include capitalization operators.
1286 ii. The shell provides associative array variables, with the appropriate
1287 support to create, delete, assign values to, and expand them.
1289 jj. The `declare' builtin now has new -l (convert value to lowercase upon
1290 assignment) and -u (convert value to uppercase upon assignment) options.
1291 There is an optionally-configurable -c option to capitalize a value at
1294 kk. There is a new `coproc' reserved word that specifies a coprocess: an
1295 asynchronous command run with two pipes connected to the creating shell.
1296 Coprocs can be named. The input and output file descriptors and the
1297 PID of the coprocess are available to the calling shell in variables
1298 with coproc-specific names.
1300 ll. A value of 0 for the -t option to `read' now returns success if there is
1301 input available to be read from the specified file descriptor.
1303 mm. CDPATH and GLOBIGNORE are ignored when the shell is running in privileged
1306 nn. New bindable readline functions shell-forward-word and shell-backward-word,
1307 which move forward and backward words delimited by shell metacharacters
1308 and honor shell quoting.
1310 oo. New bindable readline functions shell-backward-kill-word and shell-kill-word
1311 which kill words backward and forward, but use the same word boundaries
1312 as shell-forward-word and shell-backward-word.
1314 2. New Features in Readline
1316 a. A new variable, rl_sort_completion_matches; allows applications to inhibit
1317 match list sorting (but beware: some things don't work right if
1318 applications do this).
1320 b. A new variable, rl_completion_invoking_key; allows applications to discover
1321 the key that invoked rl_complete or rl_menu_complete.
1323 c. The functions rl_block_sigint and rl_release_sigint are now public and
1324 available to calling applications who want to protect critical sections
1327 d. The functions rl_save_state and rl_restore_state are now public and
1328 available to calling applications; documented rest of readline's state
1331 e. A new user-settable variable, `history-size', allows setting the maximum
1332 number of entries in the history list.
1334 f. There is a new implementation of menu completion, with several improvements
1335 over the old; the most notable improvement is a better `completions
1338 g. The menu completion code now uses the rl_menu_completion_entry_function
1339 variable, allowing applications to provide their own menu completion
1342 h. There is support for replacing a prefix of a pathname with a `...' when
1343 displaying possible completions. This is controllable by setting the
1344 `completion-prefix-display-length' variable. Matches with a common prefix
1345 longer than this value have the common prefix replaced with `...'.
1347 i. There is a new `revert-all-at-newline' variable. If enabled, readline will
1348 undo all outstanding changes to all history lines when `accept-line' is
1351 j. If the kernel supports it, readline displays special characters
1352 corresponding to a keyboard-generated signal when the signal is received.
1354 -------------------------------------------------------------------------------
1355 This is a terse description of the new features added to bash-3.2 since
1356 the release of bash-3.1. As always, the manual page (doc/bash.1) is
1357 the place to look for complete descriptions.
1359 1. New Features in Bash
1361 a. Changed the parameter pattern replacement functions to not anchor the
1362 pattern at the beginning of the string if doing global replacement - that
1363 combination doesn't make any sense.
1365 b. When running in `word expansion only' mode (--wordexp option), inhibit
1366 process substitution.
1368 c. Loadable builtins now work on MacOS X 10.[34].
1370 d. Shells running in posix mode no longer set $HOME, as POSIX requires.
1372 e. The code that checks for binary files being executed as shell scripts now
1373 checks only for NUL rather than any non-printing character.
1375 f. Quoting the string argument to the [[ command's =~ operator now forces
1376 string matching, as with the other pattern-matching operators.
1378 2. New Features in Readline
1380 a. Calling applications can now set the keyboard timeout to 0, allowing
1383 b. The value of SYS_INPUTRC (configurable at compilation time) is now used as
1384 the default last-ditch startup file.
1386 c. The history file reading functions now allow windows-like \r\n line
1389 -------------------------------------------------------------------------------
1390 This is a terse description of the new features added to bash-3.1 since
1391 the release of bash-3.0. As always, the manual page (doc/bash.1) is
1392 the place to look for complete descriptions.
1394 1. New Features in Bash
1396 a. Bash now understands LC_TIME as a special variable so that time display
1397 tracks the current locale.
1399 b. BASH_ARGC, BASH_ARGV, BASH_SOURCE, and BASH_LINENO are no longer created
1400 as `invisible' variables and may not be unset.
1402 c. In POSIX mode, if `xpg_echo' option is enabled, the `echo' builtin doesn't
1403 try to interpret any options at all, as POSIX requires.
1405 d. The `bg' builtin now accepts multiple arguments, as POSIX seems to specify.
1407 e. Fixed vi-mode word completion and glob expansion to perform tilde
1410 f. The `**' mathematic exponentiation operator is now right-associative.
1412 g. The `ulimit' builtin has new options: -i (max number of pending signals),
1413 -q (max size of POSIX message queues), and -x (max number of file locks).
1415 h. A bare `%' once again expands to the current job when used as a job
1418 i. The `+=' assignment operator (append to the value of a string or array) is
1419 now supported for assignment statements and arguments to builtin commands
1420 that accept assignment statements.
1422 j. BASH_COMMAND now preserves its value when a DEBUG trap is executed.
1424 k. The `gnu_errfmt' option is enabled automatically if the shell is running
1425 in an emacs terminal window.
1427 l. New configuration option: --single-help-strings. Causes long help text
1428 to be written as a single string; intended to ease translation.
1430 m. The COMP_WORDBREAKS variable now causes the list of word break characters
1431 to be emptied when the variable is unset.
1433 n. An unquoted expansion of $* when $IFS is empty now causes the positional
1434 parameters to be concatenated if the expansion doesn't undergo word
1437 o. Bash now inherits $_ from the environment if it appears there at startup.
1439 p. New shell option: nocasematch. If non-zero, shell pattern matching ignores
1440 case when used by `case' and `[[' commands.
1442 q. The `printf' builtin takes a new option: -v var. That causes the output
1443 to be placed into var instead of on stdout.
1445 r. By default, the shell no longer reports processes dying from SIGPIPE.
1447 s. Bash now sets the extern variable `environ' to the export environment it
1448 creates, so C library functions that call getenv() (and can't use the
1449 shell-provided replacement) get current values of environment variables.
1451 t. A new configuration option, `--enable-strict-posix-default', which will
1452 build bash to be POSIX conforming by default.
1454 u. If compiled for strict POSIX conformance, LINES and COLUMNS may now
1455 override the true terminal size.
1457 2. New Features in Readline
1459 a. The key sequence sent by the keypad `delete' key is now automatically
1460 bound to delete-char.
1462 b. A negative argument to menu-complete now cycles backward through the
1465 c. A new bindable readline variable: bind-tty-special-chars. If non-zero,
1466 readline will bind the terminal special characters to their readline
1467 equivalents when it's called (on by default).
1469 d. New bindable command: vi-rubout. Saves deleted text for possible
1470 reinsertion, as with any vi-mode `text modification' command; `X' is bound
1471 to this in vi command mode.
1473 e. A new external application-controllable variable that allows the LINES
1474 and COLUMNS environment variables to set the window size regardless of
1475 what the kernel returns: rl_prefer_env_winsize
1477 -------------------------------------------------------------------------------
1478 This is a terse description of the new features added to bash-3.0 since
1479 the release of bash-2.05b. As always, the manual page (doc/bash.1) is
1480 the place to look for complete descriptions.
1482 1. New Features in Bash
1484 a. ANSI string expansion now implements the \x{hexdigits} escape.
1486 b. There is a new loadable `strftime' builtin.
1488 c. New variable, COMP_WORDBREAKS, which controls the readline completer's
1489 idea of word break characters.
1491 d. The `type' builtin no longer reports on aliases unless alias expansion
1492 will actually be performed.
1494 e. HISTCONTROL is now a colon-separated list of values, which permits
1495 more extensibility and backwards compatibility.
1497 f. HISTCONTROL may now include the `erasedups' option, which causes all lines
1498 matching a line being added to be removed from the history list.
1500 g. `configure' has a new `--enable-multibyte' argument that permits multibyte
1501 character support to be disabled even on systems that support it.
1503 h. New variables to support the bash debugger: BASH_ARGC, BASH_ARGV,
1504 BASH_SOURCE, BASH_LINENO, BASH_SUBSHELL, BASH_EXECUTION_STRING,
1507 i. FUNCNAME has been changed to support the debugger: it's now an array
1510 j. for, case, select, arithmetic commands now keep line number information
1513 k. There is a new `RETURN' trap executed when a function or sourced script
1514 returns (not inherited child processes; inherited by command substitution
1515 if function tracing is enabled and the debugger is active).
1517 l. New invocation option: --debugger. Enables debugging and turns on new
1518 `extdebug' shell option.
1520 m. New `functrace' and `errtrace' options to `set -o' cause DEBUG and ERR
1521 traps, respectively, to be inherited by shell functions. Equivalent to
1522 `set -T' and `set -E' respectively. The `functrace' option also controls
1523 whether or not the DEBUG trap is inherited by sourced scripts.
1525 n. The DEBUG trap is run before binding the variable and running the action
1526 list in a `for' command, binding the selection variable and running the
1527 query in a `select' command, and before attempting a match in a `case'
1530 o. New `--enable-debugger' option to `configure' to compile in the debugger
1533 p. `declare -F' now prints out extra line number and source file information
1534 if the `extdebug' option is set.
1536 q. If `extdebug' is enabled, a non-zero return value from a DEBUG trap causes
1537 the next command to be skipped, and a return value of 2 while in a
1538 function or sourced script forces a `return'.
1540 r. New `caller' builtin to provide a call stack for the bash debugger.
1542 s. The DEBUG trap is run just before the first command in a function body is
1543 executed, for the debugger.
1545 t. `for', `select', and `case' command heads are printed when `set -x' is
1548 u. There is a new {x..y} brace expansion, which is shorthand for {x.x+1,
1549 x+2,...,y}. x and y can be integers or single characters; the sequence
1550 may ascend or descend; the increment is always 1.
1552 v. New ksh93-like ${!array[@]} expansion, expands to all the keys (indices)
1555 w. New `force_fignore' shopt option; if enabled, suffixes specified by
1556 FIGNORE cause words to be ignored when performing word completion even
1557 if they're the only possibilities.
1559 x. New `gnu_errfmt' shopt option; if enabled, error messages follow the `gnu
1560 style' (filename:lineno:message) format.
1562 y. New `-o bashdefault' option to complete and compgen; if set, causes the
1563 whole set of bash completions to be performed if the compspec doesn't
1566 z. New `-o plusdirs' option to complete and compgen; if set, causes directory
1567 name completion to be performed and the results added to the rest of the
1568 possible completions.
1570 aa. `kill' is available as a builtin even when the shell is built without
1573 bb. New HISTTIMEFORMAT variable; value is a format string to pass to
1574 strftime(3). If set and not null, the `history' builtin prints out
1575 timestamp information according to the specified format when displaying
1576 history entries. If set, bash tells the history library to write out
1577 timestamp information when the history file is written.
1579 cc. The [[ ... ]] command has a new binary `=~' operator that performs
1580 extended regular expression (egrep-like) matching.
1582 dd. `configure' has a new `--enable-cond-regexp' option (enabled by default)
1583 to enable the =~ operator and regexp matching in [[ ... ]].
1585 ee. Subexpressions matched by the =~ operator are placed in the new
1586 BASH_REMATCH array variable.
1588 ff. New `failglob' option that causes an expansion error when pathname
1589 expansion fails to produce a match.
1591 gg. New `set -o pipefail' option that causes a pipeline to return a failure
1592 status if any of the processes in the pipeline fail, not just the last
1595 hh. printf builtin understands two new escape sequences: \" and \?.
1597 ii. `echo -e' understands two new escape sequences: \" and \?.
1599 jj. The GNU `gettext' package and libintl have been integrated; the shell's
1600 messages can be translated into different languages.
1602 kk. The `\W' prompt expansion now abbreviates $HOME as `~', like `\w'.
1604 ll. The error message printed when bash cannot open a shell script supplied
1605 as argument 1 now includes the name of the shell, to better identify
1606 the error as coming from bash.
1608 mm. The parameter pattern removal and substitution expansions are now much
1609 faster and more efficient when using multibyte characters.
1611 nn. The `jobs', `kill', and `wait' builtins now accept job control notation
1612 even if job control is not enabled.
1614 oo. The historical behavior of `trap' that allows a missing `action' argument
1615 to cause each specified signal's handling to be reset to its default is
1616 now only supported when `trap' is given a single non-option argument.
1618 2. New Features in Readline
1620 a. History expansion has a new `a' modifier equivalent to the `g' modifier
1621 for compatibility with the BSD csh.
1623 b. History expansion has a new `G' modifier equivalent to the BSD csh `g'
1624 modifier, which performs a substitution once per word.
1626 c. All non-incremental search operations may now undo the operation of
1627 replacing the current line with the history line.
1629 d. The text inserted by an `a' command in vi mode can be reinserted with
1632 e. New bindable variable, `show-all-if-unmodified'. If set, the readline
1633 completer will list possible completions immediately if there is more
1634 than one completion and partial completion cannot be performed.
1636 f. There is a new application-callable `free_history_entry()' function.
1638 g. History list entries now contain timestamp information; the history file
1639 functions know how to read and write timestamp information associated
1642 h. Four new key binding functions have been added:
1644 rl_bind_key_if_unbound()
1645 rl_bind_key_if_unbound_in_map()
1646 rl_bind_keyseq_if_unbound()
1647 rl_bind_keyseq_if_unbound_in_map()
1649 i. New application variable, rl_completion_quote_character, set to any
1650 quote character readline finds before it calls the application completion
1653 j. New application variable, rl_completion_suppress_quote, settable by an
1654 application completion function. If set to non-zero, readline does not
1655 attempt to append a closing quote to a completed word.
1657 k. New application variable, rl_completion_found_quote, set to a non-zero
1658 value if readline determines that the word to be completed is quoted.
1659 Set before readline calls any application completion function.
1661 l. New function hook, rl_completion_word_break_hook, called when readline
1662 needs to break a line into words when completion is attempted. Allows
1663 the word break characters to vary based on position in the line.
1665 m. New bindable command: unix-filename-rubout. Does the same thing as
1666 unix-word-rubout, but adds `/' to the set of word delimiters.
1668 n. When listing completions, directories have a `/' appended if the
1669 `mark-directories' option has been enabled.
1671 -------------------------------------------------------------------------------
1672 This is a terse description of the new features added to bash-2.05b since
1673 the release of bash-2.05a. As always, the manual page (doc/bash.1) is
1674 the place to look for complete descriptions.
1676 1. New Features in Bash
1678 a. If set, TMOUT is the default timeout for the `read' builtin.
1680 b. `type' has two new options: `-f' suppresses shell function lookup, and
1681 `-P' forces a $PATH search.
1683 c. New code to handle multibyte characters.
1685 d. `select' was changed to be more ksh-compatible, in that the menu is
1686 reprinted each time through the loop only if REPLY is set to NULL.
1687 The previous behavior is available as a compile-time option.
1689 e. `complete -d' and `complete -o dirnames' now force a slash to be
1690 appended to names which are symlinks to directories.
1692 f. There is now a bindable edit-and-execute-command readline command,
1693 like the vi-mode `v' command, bound to C-xC-e in emacs mode.
1695 g. Added support for ksh93-like [:word:] character class in pattern matching.
1697 h. The $'...' quoting construct now expands \cX to Control-X.
1699 i. A new \D{...} prompt expansion; passes the `...' to strftime and inserts
1700 the result into the expanded prompt.
1702 j. The shell now performs arithmetic in the largest integer size the
1703 machine supports (intmax_t), instead of long.
1705 k. If a numeric argument is supplied to one of the bash globbing completion
1706 functions, a `*' is appended to the word before expansion is attempted.
1708 l. The bash globbing completion functions now allow completions to be listed
1709 with double tabs or if `show-all-if-ambiguous' is set.
1711 m. New `-o nospace' option for `complete' and `compgen' builtins; suppresses
1712 readline's appending a space to the completed word.
1714 n. New `here-string' redirection operator: <<< word.
1716 o. When displaying variables, function attributes and definitions are shown
1717 separately, allowing them to be re-used as input (attempting to re-use
1718 the old output would result in syntax errors).
1720 p. There is a new configuration option `--enable-mem-scramble', controls
1721 bash malloc behavior of writing garbage characters into memory at
1722 allocation and free time.
1724 q. The `complete' and `compgen' builtins now have a new `-s/-A service'
1725 option to complete on names from /etc/services.
1727 r. `read' has a new `-u fd' option to read from a specified file descriptor.
1729 s. Fix the completion code so that expansion errors in a directory name
1730 don't cause a longjmp back to the command loop.
1732 t. Fixed word completion inside command substitution to work a little more
1735 u. The `printf' %q format specifier now uses $'...' quoting to print the
1736 argument if it contains non-printing characters.
1738 v. The `declare' and `typeset' builtins have a new `-t' option. When applied
1739 to functions, it causes the DEBUG trap to be inherited by the named
1740 function. Currently has no effect on variables.
1742 w. The DEBUG trap is now run *before* simple commands, ((...)) commands,
1743 [[...]] conditional commands, and for ((...)) loops.
1745 x. The expansion of $LINENO inside a shell function is only relative to the
1746 function start if the shell is interactive -- if the shell is running a
1747 script, $LINENO expands to the line number in the script. This is as
1748 POSIX-2001 requires.
1750 y. The bash debugger in examples/bashdb has been modified to work with the
1751 new DEBUG trap semantics, the command set has been made more gdb-like,
1752 and the changes to $LINENO make debugging functions work better. Code
1755 z. New [n]<&word- and [n]>&word- redirections from ksh93 -- move fds (dup
1758 aa. There is a new `-l' invocation option, equivalent to `--login'.
1760 bb. The `hash' builtin has a new `-l' option to list contents in a reusable
1761 format, and a `-d' option to remove a name from the hash table.
1763 cc. There is now support for placing the long help text into separate files
1764 installed into ${datadir}/bash. Not enabled by default; can be turned
1765 on with `--enable-separate-helpfiles' option to configure.
1767 dd. All builtins that take operands accept a `--' pseudo-option, except
1770 ee. The `echo' builtin now accepts \0xxx (zero to three octal digits following
1771 the `0') in addition to \xxx (one to three octal digits) for SUSv3/XPG6/
1772 POSIX.1-2001 compliance.
1775 2. New Features in Readline
1777 a. Support for key `subsequences': allows, e.g., ESC and ESC-a to both
1778 be bound to readline functions. Now the arrow keys may be used in vi
1781 b. When listing completions, and the number of lines displayed is more than
1782 the screen length, readline uses an internal pager to display the results.
1783 This is controlled by the `page-completions' variable (default on).
1785 c. New code to handle editing and displaying multibyte characters.
1787 d. The behavior introduced in bash-2.05a of deciding whether or not to
1788 append a slash to a completed name that is a symlink to a directory has
1789 been made optional, controlled by the `mark-symlinked-directories'
1790 variable (default is the 2.05a behavior).
1792 e. The `insert-comment' command now acts as a toggle if given a numeric
1793 argument: if the first characters on the line don't specify a
1794 comment, insert one; if they do, delete the comment text
1796 f. New application-settable completion variable:
1797 rl_completion_mark_symlink_dirs, allows an application's completion
1798 function to temporarily override the user's preference for appending
1799 slashes to names which are symlinks to directories.
1801 g. New function available to application completion functions:
1802 rl_completion_mode, to tell how the completion function was invoked
1803 and decide which argument to supply to rl_complete_internal (to list
1806 h. Readline now has an overwrite mode, toggled by the `overwrite-mode'
1807 bindable command, which could be bound to `Insert'.
1809 i. New application-settable completion variable:
1810 rl_completion_suppress_append, inhibits appending of
1811 rl_completion_append_character to completed words.
1813 j. New key bindings when reading an incremental search string: ^W yanks
1814 the currently-matched word out of the current line into the search
1815 string; ^Y yanks the rest of the current line into the search string,
1816 DEL or ^H deletes characters from the search string.
1818 -------------------------------------------------------------------------------
1819 This is a terse description of the new features added to bash-2.05a since
1820 the release of bash-2.05. As always, the manual page (doc/bash.1) is
1821 the place to look for complete descriptions.
1823 1. New Features in Bash
1825 a. Added support for DESTDIR installation root prefix, so you can do a
1826 `make install DESTDIR=bash-root' and do easier binary packaging.
1828 b. Added support for builtin printf "'" flag character as per latest POSIX
1831 c. Support for POSIX.2 printf(1) length specifiers `j', `t', and `z' (from
1834 d. New autoconf macro, RL_LIB_READLINE_VERSION, for use by other applications
1835 (bash doesn't use very much of what it returns).
1837 e. `set [-+]o nolog' is recognized as required by the latest POSIX drafts,
1840 f. New read-only `shopt' option: login_shell. Set to non-zero value if the
1841 shell is a login shell.
1843 g. New `\A' prompt string escape sequence; expands to time in 24 HH:MM format.
1845 h. New `-A group/-g' option to complete and compgen; does group name
1848 i. New `-t' option to `hash' to list hash values for each filename argument.
1850 j. New [-+]O invocation option to set and unset `shopt' options at startup.
1852 k. configure's `--with-installed-readline' option now takes an optional
1853 `=PATH' suffix to set the root of the tree where readline is installed
1856 l. The ksh-like `ERR' trap has been added. The `ERR' trap will be run
1857 whenever the shell would have exited if the -e option were enabled.
1858 It is not inherited by shell functions.
1860 m. `readonly', `export', and `declare' now print variables which have been
1861 given attributes but not set by assigning a value as just a command and
1862 a variable name (like `export foo') when listing, as the latest POSIX
1865 n. `bashbug' now requires that the subject be changed from the default.
1867 o. configure has a new `--enable-largefile' option, like other GNU utilities.
1869 p. `for' loops now allow empty word lists after `in', like the latest POSIX
1872 q. The builtin `ulimit' now takes two new non-numeric arguments: `hard',
1873 meaning the current hard limit, and `soft', meaning the current soft
1874 limit, in addition to `unlimited'
1876 r. `ulimit' now prints the option letter associated with a particular
1877 resource when printing more than one limit.
1879 s. `ulimit' prints `hard' or `soft' when a value is not `unlimited' but is
1880 one of RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively.
1882 t. The `printf' builtin now handles the %a and %A conversions if they're
1883 implemented by printf(3).
1885 u. The `printf' builtin now handles the %F conversion (just about like %f).
1887 v. The `printf' builtin now handles the %n conversion like printf(3). The
1888 corresponding argument is the name of a shell variable to which the
1891 2. New Features in Readline
1893 a. Added extern declaration for rl_get_termcap to readline.h, making it a
1894 public function (it was always there, just not in readline.h).
1896 b. New #defines in readline.h: RL_READLINE_VERSION, currently 0x0402,
1897 RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2.
1899 c. New readline variable: rl_readline_version, mirrors RL_READLINE_VERSION.
1901 d. New bindable boolean readline variable: match-hidden-files. Controls
1902 completion of files beginning with a `.' (on Unix). Enabled by default.
1904 e. The history expansion code now allows any character to terminate a
1905 `:first-' modifier, like csh.
1907 f. New bindable variable `history-preserve-point'. If set, the history
1908 code attempts to place the user at the same location on each history
1909 line retrieved with previous-history or next-history.
1911 -------------------------------------------------------------------------------
1912 This is a terse description of the new features added to bash-2.05 since
1913 the release of bash-2.04. As always, the manual page (doc/bash.1) is
1914 the place to look for complete descriptions.
1916 1. New Features in Bash
1918 a. Added a new `--init-file' invocation argument as a synonym for `--rcfile',
1919 per the new GNU coding standards.
1921 b. The /dev/tcp and /dev/udp redirections now accept service names as well as
1924 c. `complete' and `compgen' now take a `-o value' option, which controls some
1925 of the aspects of that compspec. Valid values are:
1927 default - perform bash default completion if programmable
1928 completion produces no matches
1929 dirnames - perform directory name completion if programmable
1930 completion produces no matches
1931 filenames - tell readline that the compspec produces filenames,
1932 so it can do things like append slashes to
1933 directory names and suppress trailing spaces
1935 d. A new loadable builtin, realpath, which canonicalizes and expands symlinks
1936 in pathname arguments.
1938 e. When `set' is called without options, it prints function definitions in a
1939 way that allows them to be reused as input. This affects `declare' and
1940 `declare -p' as well. This only happens when the shell is not in POSIX
1941 mode, since POSIX.2 forbids this behavior.
1943 f. Bash-2.05 once again honors the current locale setting when processing
1944 ranges within pattern matching bracket expressions (e.g., [A-Z]).
1946 2. New Features in Readline
1948 a. The blink timeout for paren matching is now settable by applications,
1949 via the rl_set_paren_blink_timeout() function.
1951 b. _rl_executing_macro has been renamed to rl_executing_macro, which means
1952 it's now part of the public interface.
1954 c. Readline has a new variable, rl_readline_state, which is a bitmap that
1955 encapsulates the current state of the library; intended for use by
1956 callbacks and hook functions.
1958 d. New application-callable function rl_set_prompt(const char *prompt):
1959 expands its prompt string argument and sets rl_prompt to the result.
1961 e. New application-callable function rl_set_screen_size(int rows, int cols):
1962 public method for applications to set readline's idea of the screen
1965 f. New function, rl_get_screen_size (int *rows, int *columns), returns
1966 readline's idea of the screen dimensions.
1968 g. The timeout in rl_gather_tyi (readline keyboard input polling function)
1969 is now settable via a function (rl_set_keyboard_input_timeout()).
1971 h. Renamed the max_input_history variable to history_max_entries; the old
1972 variable is maintained for backwards compatibility.
1974 i. The list of characters that separate words for the history tokenizer is
1975 now settable with a variable: history_word_delimiters. The default
1978 -------------------------------------------------------------------------------
1979 This is a terse description of the new features added to bash-2.04 since
1980 the release of bash-2.03. As always, the manual page (doc/bash.1) is
1981 the place to look for complete descriptions.
1983 1. New Features in Bash
1985 a. The history builtin has a `-d offset' option to delete the history entry
1986 at position `offset'.
1988 b. The prompt expansion code has two new escape sequences: \j, the number of
1989 active jobs; and \l, the basename of the shell's tty device name.
1991 c. The `bind' builtin has a new `-x' option to bind key sequences to shell
1994 d. There is a new shell option, no_empty_command_completion, which, when
1995 enabled, disables command completion when TAB is typed on an empty line.
1997 e. The `help' builtin has a `-s' option to just print a builtin's usage
2000 f. There are several new arithmetic operators: id++, id-- (variable
2001 post-increment/decrement), ++id, --id (variable pre-increment/decrement),
2002 expr1 , expr2 (comma operator).
2004 g. There is a new ksh-93 style arithmetic for command:
2005 for ((expr1 ; expr2; expr3 )); do list; done
2007 h. The `read' builtin has a number of new options:
2008 -t timeout only wait timeout seconds for input
2009 -n nchars only read nchars from input instead of a full line
2010 -d delim read until delim rather than newline
2011 -s don't echo input chars as they are read
2013 i. The redirection code now handles several filenames specially:
2014 /dev/fd/N, /dev/stdin, /dev/stdout, and /dev/stderr, whether or
2015 not they are present in the file system.
2017 j. The redirection code now recognizes pathnames of the form
2018 /dev/tcp/host/port and /dev/udp/host/port, and tries to open a socket
2019 of the appropriate type to the specified port on the specified host.
2021 k. The ksh-93 ${!prefix*} expansion, which expands to the names of all
2022 shell variables with prefix PREFIX, has been implemented.
2024 l. There is a new dynamic variable, FUNCNAME, which expands to the name of
2025 a currently-executing function. Assignments to FUNCNAME have no effect.
2027 m. The GROUPS variable is no longer readonly; assignments to it are silently
2028 discarded. This means it can be unset.
2030 n. A new programmable completion facility, with two new builtin commands:
2031 complete and compgen.
2033 o. configure has a new option, `--enable-progcomp', to compile in the
2034 programmable completion features (enabled by default).
2036 p. `shopt' has a new option, `progcomp', to enable and disable programmable
2037 completion at runtime.
2039 q. Unsetting HOSTFILE now clears the list of hostnames used for completion.
2041 r. configure has a new option, `--enable-bash-malloc', replacing the old
2042 `--with-gnu-malloc' (which is still present for backwards compatibility).
2044 s. There is a new manual page describing rbash, the restricted shell.
2046 t. `bashbug' has new `--help' and `--version' options.
2048 u. `shopt' has a new `xpg_echo' option, which controls the behavior of
2049 `echo' with respect to backslash-escaped characters at runtime.
2051 v. If NON_INTERACTIVE_LOGIN_SHELLS is defined, all login shells read the
2052 startup files, even if they are not interactive.
2054 w. The LC_NUMERIC variable is now treated specially, and used to set the
2055 LC_NUMERIC locale category for number formatting, e.g., when `printf'
2056 displays floating-point numbers.
2058 2. New features in Readline
2060 a. Parentheses matching is now always compiled into readline, and enabled
2061 or disabled when the value of the `blink-matching-paren' variable is
2064 b. MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename.
2066 c. MS-DOS systems now use ~/_history as the default history file.
2068 d. history-search-{forward,backward} now leave the point at the end of the
2069 line when the string to search for is empty, like
2070 {reverse,forward}-search-history.
2072 e. history-search-{forward,backward} now leave the last history line found
2073 in the readline buffer if the second or subsequent search fails.
2075 f. New function for use by applications: rl_on_new_line_with_prompt, used
2076 when an application displays the prompt itself before calling readline().
2078 g. New variable for use by applications: rl_already_prompted. An application
2079 that displays the prompt itself before calling readline() must set this to
2082 h. A new variable, rl_gnu_readline_p, always 1. The intent is that an
2083 application can verify whether or not it is linked with the `real'
2084 readline library or some substitute.
2086 -------------------------------------------------------------------------------
2087 This is a terse description of the new features added to bash-2.03 since
2088 the release of bash-2.02. As always, the manual page (doc/bash.1) is
2089 the place to look for complete descriptions.
2091 1. New Features in Bash
2093 a. New `shopt' option, `restricted_shell', indicating whether or not the
2094 shell was started in restricted mode, for use in startup files.
2096 b. Filename generation is now performed on the words between ( and ) in
2097 array assignments (which it probably should have done all along).
2099 c. OLDPWD is now auto-exported, as POSIX.2 seems to require.
2101 d. ENV and BASH_ENV are read-only variables in a restricted shell.
2103 e. A change was made to the startup file code so that any shell begun with
2104 the `--login' option, even non-interactive shells, will source the login
2105 shell startup files.
2107 2. New Features in Readline
2109 a. Many changes to the signal handling:
2110 o Readline now catches SIGQUIT and cleans up the tty before returning;
2111 o A new variable, rl_catch_signals, is available to application writers
2112 to indicate to readline whether or not it should install its own
2113 signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP,
2114 SIGTTIN, and SIGTTOU;
2115 o A new variable, rl_catch_sigwinch, is available to application
2116 writers to indicate to readline whether or not it should install its
2117 own signal handler for SIGWINCH, which will chain to the calling
2118 applications's SIGWINCH handler, if one is installed;
2119 o There is a new function, rl_free_line_state, for application signal
2120 handlers to call to free up the state associated with the current
2121 line after receiving a signal;
2122 o There is a new function, rl_cleanup_after_signal, to clean up the
2123 display and terminal state after receiving a signal;
2124 o There is a new function, rl_reset_after_signal, to reinitialize the
2125 terminal and display state after an application signal handler
2126 returns and readline continues
2128 b. There is a new function, rl_resize_terminal, to reset readline's idea of
2129 the screen size after a SIGWINCH.
2131 c. New public functions: rl_save_prompt and rl_restore_prompt. These were
2132 previously private functions with a `_' prefix.
2134 d. New function hook: rl_pre_input_hook, called just before readline starts
2135 reading input, after initialization.
2137 e. New function hook: rl_display_matches_hook, called when readline would
2138 display the list of completion matches. The new function
2139 rl_display_match_list is what readline uses internally, and is available
2140 for use by application functions called via this hook.
2142 f. New bindable function, delete-char-or-list, like tcsh.
2144 g. A new variable, rl_erase_empty_line, which, if set by an application using
2145 readline, will cause readline to erase, prompt and all, lines on which the
2146 only thing typed was a newline.
2148 h. New bindable variable: `isearch-terminators'.
2150 i. New bindable function: `forward-backward-delete-char' (unbound by default).
2152 -------------------------------------------------------------------------------
2153 This is a terse description of the new features added to bash-2.02 since
2154 the release of bash-2.01.1. As always, the manual page (doc/bash.1) is
2155 the place to look for complete descriptions.
2157 1. New Features in Bash
2159 a. A new version of malloc, based on the older GNU malloc, that has many
2160 changes, is more page-based, is more conservative with memory usage,
2161 and does not `orphan' large blocks when they are freed.
2163 b. A new version of gmalloc, based on the old GLIBC malloc, with many
2164 changes and range checking included by default.
2166 c. A new implementation of fnmatch(3) that includes full POSIX.2 Basic
2167 Regular Expression matching, including character classes, collating
2168 symbols, equivalence classes, and support for case-insensitive pattern
2171 d. ksh-88 egrep-style extended pattern matching ([@+*?!](patlist)) has been
2172 implemented, controlled by a new `shopt' option, `extglob'.
2174 e. There is a new ksh-like `[[' compound command, which implements
2175 extended `test' functionality.
2177 f. There is a new `printf' builtin, implemented according to the POSIX.2
2180 g. There is a new feature for command substitution: $(< filename) now expands
2181 to the contents of `filename', with any trailing newlines removed
2182 (equivalent to $(cat filename)).
2184 h. There are new tilde prefixes which expand to directories from the
2187 i. There is a new `**' arithmetic operator to do exponentiation.
2189 j. There are new configuration options to control how bash is linked:
2190 `--enable-profiling', to allow bash to be profiled with gprof, and
2191 `--enable-static-link', to allow bash to be linked statically.
2193 k. There is a new configuration option, `--enable-cond-command', which
2194 controls whether or not the `[[' command is included. It is on by
2197 l. There is a new configuration option, `--enable-extended-glob', which
2198 controls whether or not the ksh extended globbing feature is included.
2199 It is enabled by default.
2201 m. There is a new configuration #define in config.h.top that, when enabled,
2202 will cause all login shells to source /etc/profile and one of the user-
2203 specific login shell startup files, whether or not the shell is
2206 n. There is a new invocation option, `--dump-po-strings', to dump
2207 a shell script's translatable strings ($"...") in GNU `po' format.
2209 o. There is a new `shopt' option, `nocaseglob', to enable case-insensitive
2210 pattern matching when globbing filenames and using the `case' construct.
2212 p. There is a new `shopt' option, `huponexit', which, when enabled, causes
2213 the shell to send SIGHUP to all jobs when an interactive login shell
2216 q. `bind' has a new `-u' option, which takes a readline function name as an
2217 argument and unbinds all key sequences bound to that function in a
2220 r. `disown' now has `-a' and `-r' options, to limit operation to all jobs
2221 and running jobs, respectively.
2223 s. The `shopt' `-p' option now causes output to be displayed in a reusable
2226 t. `test' has a new `-N' option, which returns true if the filename argument
2227 has been modified since it was last accessed.
2229 u. `umask' now has a `-p' option to print output in a reusable format.
2231 v. A new escape sequence, `\xNNN', has been added to the `echo -e' and $'...'
2232 translation code. It expands to the character whose ascii code is NNN
2235 w. The prompt string expansion code has a new `\r' escape sequence.
2237 x. The shell may now be cross-compiled for the CYGWIN32 environment on
2240 2. New Features in Readline
2242 a. There is now an option for `iterative' yank-last-arg handline, so a user
2243 can keep entering `M-.', yanking the last argument of successive history
2246 b. New variable, `print-completions-horizontally', which causes completion
2247 matches to be displayed across the screen (like `ls -x') rather than up
2248 and down the screen (like `ls').
2250 c. New variable, `completion-ignore-case', which causes filename completion
2251 and matching to be performed case-insensitively.
2253 d. There is a new bindable command, `magic-space', which causes history
2254 expansion to be performed on the current readline buffer and a space to
2255 be inserted into the result.
2257 e. There is a new bindable command, `menu-complete', which enables tcsh-like
2258 menu completion (successive executions of menu-complete insert a single
2259 completion match, cycling through the list of possible completions).
2261 f. There is a new bindable command, `paste-from-clipboard', for use on Win32
2262 systems, to insert the text from the Win32 clipboard into the editing
2265 g. The key sequence translation code now understands printf-style backslash
2266 escape sequences, including \NNN octal escapes. These escape sequences
2267 may be used in key sequence definitions or macro values.
2269 h. An `$include' inputrc file parser directive has been added.
2271 -------------------------------------------------------------------------------
2272 This is a terse description of the new features added to bash-2.01 since
2273 the release of bash-2.0. As always, the manual page (doc/bash.1) is the
2274 place to look for complete descriptions.
2276 1. New Features in Bash
2278 a. There is a new builtin array variable: GROUPS, the set of groups to which
2279 the user belongs. This is used by the test suite.
2281 2. New Features in Readline
2283 a. If a key sequence bound to `universal-argument' is read while reading a
2284 numeric argument started with `universal-argument', it terminates the
2285 argument but is otherwise ignored. This provides a way to insert multiple
2286 instances of a digit string, and is how GNU emacs does it.
2288 -------------------------------------------------------------------------------
2289 This is a terse description of the new features added to bash-2.0 since
2290 the release of bash-1.14.7. As always, the manual page (doc/bash.1) is
2291 the place to look for complete descriptions.
2293 1. New Features in Bash
2295 a. There is a new invocation option, -D, that dumps translatable strings
2298 b. The `long' invocation options must now be prefixed with `--'.
2300 c. New long invocation options: --dump-strings, --help, --verbose
2302 d. The `nolineediting' invocation option was renamed to `noediting'.
2304 e. The `nobraceexpansion' and `quiet' long invocation options were removed.
2306 f. The `--help' and `--version' long options now work as the GNU coding
2309 g. If invoked as `sh', bash now enters posix mode after reading the
2310 startup files, and reads and executes commands from the file named
2311 by $ENV if interactive (as POSIX.2 specifies). A login shell invoked
2312 as `sh' reads $ENV after /etc/profile and ~/.profile.
2314 h. There is a new reserved word, `time', for timing pipelines, builtin
2315 commands, and shell functions. It uses the value of the TIMEFORMAT
2316 variable as a format string describing how to print the timing
2319 i. The $'...' quoting syntax expands ANSI-C escapes in ... and leaves the
2320 result single-quoted.
2322 j. The $"..." quoting syntax performs locale-specific translation of ...
2323 and leaves the result double-quoted.
2325 k. LINENO now works correctly in functions.
2327 l. New variables: DIRSTACK, PIPESTATUS, BASH_VERSINFO, HOSTNAME, SHELLOPTS,
2328 MACHTYPE. The first three are array variables.
2330 m. The BASH_VERSION and BASH_VERSINFO variables now include the shell's
2331 `release status' (alpha[N], beta[N], release).
2333 n. Some variables have been removed: MAIL_WARNING, notify, history_control,
2334 command_oriented_history, glob_dot_filenames, allow_null_glob_expansion,
2335 nolinks, hostname_completion_file, noclobber, no_exit_on_failed_exec, and
2336 cdable_vars. Most of them are now implemented with the new `shopt'
2337 builtin; others were already implemented by `set'.
2339 o. Bash now uses some new variables: LC_ALL, LC_MESSAGES, LC_CTYPE,
2340 LC_COLLATE, LANG, GLOBIGNORE, HISTIGNORE.
2342 p. The shell now supports integer-indexed arrays of unlimited length,
2343 with a new compound assignment syntax and changes to the appropriate
2344 builtin commands (declare/typeset, read, readonly, etc.). The array
2345 index may be an arithmetic expression.
2347 q. ${!var}: indirect variable expansion, equivalent to eval \${$var}.
2349 r. ${parameter:offset[:length]}: variable substring extraction.
2351 s. ${parameter/pattern[/[/]string]}: variable pattern substitution.
2353 t. The $[...] arithmetic expansion syntax is no longer supported, in
2356 u. Aliases can now be expanded in shell scripts with a shell option
2357 (shopt expand_aliases).
2359 v. History and history expansion can now be used in scripts with
2360 set -o history and set -H.
2362 w. All builtins now return an exit status of 2 for incorrect usage.
2364 x. Interactive shells resend SIGHUP to all running or stopped children
2365 if (and only if) they exit due to a SIGHUP.
2367 y. New prompting expansions: \a, \e, \H, \T, \@, \v, \V.
2369 z. Variable expansion in prompt strings is now controllable via a shell
2370 option (shopt promptvars).
2372 aa. Bash now defaults to using command-oriented history.
2374 bb. The history file ($HISTFILE) is now truncated to $HISTFILESIZE after
2377 cc. The POSIX.2 conditional arithmetic evaluation syntax (expr ? expr : expr)
2378 has been implemented.
2380 dd. Each builtin now accepts `--' to signify the end of the options, except
2381 as documented (echo, etc.).
2383 ee. All builtins use -p to display values in a re-readable format where
2384 appropriate, except as documented (echo, type, etc.).
2386 ff. The `alias' builtin has a new -p option.
2388 gg. Changes to the `bind' builtin:
2389 o has new options: -psPSVr.
2390 o the `-d' option was renamed to `-p'
2391 o the `-v' option now dumps variables; the old `-v' is now `-P'
2393 hh. The `bye' synonym for `exit' was removed.
2395 ii. The -L and -P options to `cd' and `pwd' have been documented.
2397 jj. The `cd' builtin now does spelling correction on the directory name
2398 by default. This is settable with a shell option (shopt cdspell).
2400 kk. The `declare' builtin has new options: -a, -F, -p.
2402 ll. The `dirs' builtin has new options: -c, -p, -v.
2404 mm. The new `disown' builtin removes jobs from the shell's jobs table
2405 or inhibits the resending of SIGHUP when the shell receives a
2408 nn. The `echo' builtin has a new escape character: \e.
2410 oo. The `enable' builtin can now load new builtins dynamically from shared
2411 objects on systems with the dlopen/dlsym interface. There are a number
2412 of examples in the examples/loadables directory. There are also
2413 new options: -d, -f, -s, -p.
2415 pp. The `-all' option to `enable' was removed in favor of `-a'.
2417 qq. The `exec' builtin has new options: -l, -c, -a.
2419 rr. The `hash' builtin has a new option: -p.
2421 ss. The `history' builtin has new options: -c, -p, -s.
2423 tt. The `jobs' builtin has new options: -r, -s.
2425 uu. The `kill' builtin has new options: -n signum, -l signame.
2427 vv. The `pushd' and `popd' builtins have a new option: -n.
2429 ww. The `read' builtin has new options: -p prompt, -e, -a.
2431 xx. The `readonly' builtin has a new -a option, and the -n option was removed.
2433 yy. Changes to the `set' builtin:
2434 o new options: -B, -o keyword, -o onecmd, -o history
2435 o options removed: -l, -d, -o nohash
2436 o options changed: +o, -h, -o hashall
2437 o now displays variables in a format that can be re-read as input
2439 zz. The new `shopt' builtin controls shell optional behavior previously
2440 done by setting and unsetting certain shell variables.
2442 aaa. The `test' builtin has new operators: -o option, s1 == s2, s1 < s2,
2443 and s1 > s2, where s1 and s2 are strings.
2445 bbb. There is a new trap, DEBUG, executed after every simple command.
2447 ccc. The `trap' builtin has a new -p option.
2449 ddd. The `ulimit' builtin has a new -l option on 4.4BSD-based systems.
2451 eee. The PS1, PS2, PATH, and IFS variables may now be unset.
2453 fff. The restricted shell mode has been expanded and is now documented.
2455 ggg. Security improvements:
2456 o functions are not imported from the environment if running setuid
2458 o no startup files are sourced if running setuid or with -p
2460 hhh. The documentation has been overhauled: the texinfo manual was
2461 expanded, and HTML versions of the man page and texinfo manual
2464 iii. Changes to Posix mode:
2465 o Command lookup now finds special builtins before shell functions.
2466 o Failure of a special builtin causes a non-interactive shell to
2467 exit. Failures are defined in the POSIX.2 specification.
2468 o If the `cd' builtin finds a directory to change to using $CDPATH,
2469 the value assigned to PWD when `cd' completes does not contain
2471 o A non-interactive shell exits if a variable assignment error
2472 occurs when no command name follows the assignment statements.
2473 o A non-interactive shell exits if the iteration variable in a
2474 `for' statement or the selection variable in a `select' statement
2475 is read-only or another variable assignment error occurs.
2476 o The `<>' redirection operator now opens a file for both stdin and
2477 stdout by default, not just when in posix mode.
2478 o Assignment statements preceding special builtins now persist in
2479 the shell's environment when the builtin completes.
2481 Posix mode is now completely POSIX.2-compliant (modulo bugs). When
2482 invoked as sh, bash should be completely POSIX.2-compliant.
2484 jjj. The default value of PS1 is now "\s-\v\$ ".
2486 kkk. The ksh-like ((...)) arithmetic command syntax has been implemented.
2487 This is exactly equivalent to `let "..."'.
2489 lll. Integer constants have been extended to base 64.
2491 mmm. The `ulimit' builtin now sets both hard and soft limits and reports the
2492 soft limit by default.
2494 2. New Features in Readline
2496 a. New variables: enable-keypad, input-meta (new name for meta-flag),
2497 mark-directories, visible-stats (now documented), disable-completion,
2500 b. New bindable commands: kill-region, copy-region-as-kill,
2501 copy-backward-word, copy-forward-word, set-mark, exchange-point-and-mark,
2502 character-search, character-search-backward, insert-comment,
2503 glob-expand-word, glob-list-expansions, dump-variables, dump-macros.
2505 c. New emacs keybindings: delete-horizontal-space (M-\),
2506 insert-completions (M-*), possible-completions (M-=).
2508 d. The history-search-backward and history-search-forward commands were
2509 modified to be the same as previous-line and next-line if point is at
2510 the start of the line.
2512 e. More file types are available for the visible-stats mode.
2514 3. Changes of interest in the Bash implementation
2516 a. There is a new autoconf-based configuration mechanism.
2518 b. More things have been moved from Posix mode to standard shell behavior.
2520 c. The trace output (set -x) now inserts quotes where necessary so it can
2523 d. There is a compile-time option for a system-wide interactive shell
2524 startup file (disabled by default).
2526 e. The YACC grammar is smaller and tighter, and all 66 shift-reduce
2527 conflicts are gone. Several parsing bugs have been fixed.
2529 f. Builtin option parsing has been regularized (using internal_getopt()),
2530 with the exception of `echo', `type', and `set'.
2532 g. Builtins now return standard usage messages constructed from the
2533 `short doc' used by the help builtin.
2535 h. Completion now quotes using backslashes by default, but honors
2536 user-supplied quotes.
2538 i. The GNU libc malloc is available as a configure-time option.
2540 j. There are more internationalization features; bash uses gettext if
2541 it is available. The $"..." translation syntax uses the current
2544 k. There is better reporting of job termination when the shell is not
2547 l. The shell is somewhat more efficient: it uses a little less memory and
2548 makes fewer system calls.
2550 4. Changes of interest in the Readline implementation
2552 a. There is now support for readline `callback' functions.
2554 b. There is now support for user-supplied input, redisplay, and terminal
2555 preparation functions.
2557 c. Most of the shell-specific code in readline has been generalized or
2560 d. Most of the annoying redisplay bugs have been fixed, notably the problems
2561 with incremental search and excessive redrawing when special characters
2562 appear in the prompt string.
2564 e. There are new library functions and variables available to application
2565 writers, most having to do with completion and quoting.
2567 f. The NEWLINE character (^J) is now treated as a search terminator by the
2568 incremental search functions.
2569 -------------------------------------------------------------------------------
2571 Copying and distribution of this file, with or without modification,
2572 are permitted in any medium without royalty provided the copyright
2573 notice and this notice are preserved. This file is offered as-is,
2574 without any warranty.