mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-27 15:43:18 +02:00
185 lines
7.4 KiB
Groff
185 lines
7.4 KiB
Groff
This is a terse description of the new features added to bash-5.1 since
|
|
the release of bash-5.0. As always, the manual page (doc/bash.1) is
|
|
the place to look for complete descriptions.
|
|
|
|
1. New Features in Bash
|
|
|
|
a. `bind -x' now supports different bindings for different editing modes and
|
|
keymaps.
|
|
|
|
b. Bash attempts to optimize the number of times it forks when executing
|
|
commands in subshells and from `bash -c'.
|
|
|
|
c. Here documents and here strings now use pipes for the expanded document if
|
|
it's smaller than the pipe buffer size, reverting to temporary files if it's
|
|
larger.
|
|
|
|
d. There are new loadable builtins: mktemp, accept, mkfifo, csv, cut/lcut
|
|
|
|
e. In posix mode, `trap -p' now displays signals whose disposition is SIG_DFL
|
|
and those that were SIG_IGN when the shell starts.
|
|
|
|
f. The shell now expands the history number (e.g., in PS1) even if it is not
|
|
currently saving commands to the history list.
|
|
|
|
g. `read -e' may now be used with arbitrary file descriptors (`read -u N').
|
|
|
|
h. The `select' builtin now runs traps if its internal call to the read builtin
|
|
is interrupted by a signal.
|
|
|
|
i. SRANDOM: a new variable that expands to a 32-bit random number that is not
|
|
produced by an LCRNG, and uses getrandom/getentropy, falling back to
|
|
/dev/urandom or arc4random if available. There is a fallback generator if
|
|
none of these are available.
|
|
|
|
j. shell-transpose-words: a new bindable readline command that uses the same
|
|
definition of word as shell-forward-word, etc.
|
|
|
|
k. The shell now adds default bindings for shell-forward-word,
|
|
shell-backward-word, shell-transpose-words, and shell-kill-word.
|
|
|
|
l. Bash now allows ARGV0 appearing in the initial shell environment to set $0.
|
|
|
|
m. If `unset' is executed without option arguments, bash tries to unset a shell
|
|
function if a name argument cannot be a shell variable name because it's not
|
|
an identifier.
|
|
|
|
n. The `test -N' operator uses nanosecond timestamp granularity if it's
|
|
available.
|
|
|
|
o. Bash posix mode now treats assignment statements preceding shell function
|
|
definitions the same as in its default mode, since POSIX has changed and
|
|
no longer requires those assignments to persist after the function returns
|
|
(POSIX interp 654).
|
|
|
|
p. BASH_REMATCH is no longer readonly.
|
|
|
|
q. wait: has a new -p VARNAME option, which stores the PID returned by `wait -n'
|
|
or `wait' without arguments.
|
|
|
|
r. Sorting the results of pathname expansion now uses byte-by-byte comparisons
|
|
if two strings collate equally to impose a total order; the result of a
|
|
POSIX interpretation.
|
|
|
|
s. Bash now allows SIGINT trap handlers to execute recursively.
|
|
|
|
t. Bash now saves and restores state around setting and unsetting posix mode,
|
|
instead of having unsetting posix mode set a known state.
|
|
|
|
u. Process substitution is now available in posix mode.
|
|
|
|
v. READLINE_MARK: a new variable available while executing commands bound with
|
|
`bind -x', contains the value of the mark.
|
|
|
|
w. Bash removes SIGCHLD from the set of blocked signals if it's blocked at shell
|
|
startup.
|
|
|
|
x. `test -v N' can now test whether or not positional parameter N is set.
|
|
|
|
y. `local' now honors the `-p' option to display all local variables at the
|
|
current context.
|
|
|
|
z. The `@a' variable transformation now prints attributes for unset array
|
|
variables.
|
|
|
|
aa. The `@A' variable transformation now prints a declare command that sets a
|
|
variable's attributes if the variable has attributes but is unset.
|
|
|
|
bb. `declare' and `local' now have a -I option that inherits attributes and
|
|
value from a variable with the same name at a previous scope.
|
|
|
|
cc. When run from a -c command, `jobs' now reports the status of completed jobs.
|
|
|
|
dd. New `U', `u', and `L' parameter transformations to convert to uppercase,
|
|
convert first character to uppercase, and convert to lowercase,
|
|
respectively.
|
|
|
|
ee. PROMPT_COMMAND: can now be an array variable, each element of which can
|
|
contain a command to be executed like a string PROMPT_COMMAND variable.
|
|
|
|
ff. `ulimit' has a -R option to report and set the RLIMIT_RTTIME resource.
|
|
|
|
gg. Associative arrays may be assigned using a list of key-value pairs within
|
|
a compound assignment. Compound assignments where the words are not of
|
|
the form [key]=value are assumed to be key-value assignments. A missing or
|
|
empty key is an error; a missing value is treated as NULL. Assignments may
|
|
not mix the two forms.
|
|
|
|
hh. New `K' parameter transformation to display associative arrays as key-
|
|
value pairs.
|
|
|
|
ii. Writing history to syslog now handles messages longer than the syslog max
|
|
length by writing multiple messages with a sequence number.
|
|
|
|
jj. SECONDS and RANDOM may now be assigned using arithmetic expressions, since
|
|
they are nominally integer variables. LINENO is not an integer variable.
|
|
|
|
kk. Bash temporarily suppresses the verbose option when running the DEBUG trap
|
|
while running a command from the `fc' builtin.
|
|
|
|
ll. `wait -n' now accepts a list of job specifications as arguments and will
|
|
wait for the first one in the list to change state.
|
|
|
|
mm. The associative array implementation can now dynamically increase the
|
|
size of the hash table based on insertion patterns.
|
|
|
|
nn. HISTFILE is now readonly in a restricted shell.
|
|
|
|
oo. The bash malloc now returns memory that is 16-byte aligned on 64-bit
|
|
systems.
|
|
|
|
pp. If the hash builtin is listing hashed filenames portably, don't print
|
|
anything if the table is empty.
|
|
|
|
qq. GLOBIGNORE now ignores `.' and `..' as a terminal pathname component.
|
|
|
|
rr. Bash attempts to optimize away forks in the last command in a function body
|
|
under appropriate circumstances.
|
|
|
|
ss. The globbing code now uses fnmatch(3) to check collation elements (if
|
|
available) even in cases without multibyte characters.
|
|
|
|
tt. The `fg' and `bg' builtins now return an error in a command substitution
|
|
when asked to restart a job inherited from the parent shell.
|
|
|
|
uu. The shell now attempts to unlink all FIFOs on exit, whether a consuming
|
|
process has finished with them or not.
|
|
|
|
vv. There is a new contributed loadable builtin: asort.
|
|
|
|
2. New Features in Readline
|
|
|
|
a. If a second consecutive completion attempt produces matches where the first
|
|
did not, treat it as a new completion attempt and insert a match as
|
|
appropriate.
|
|
|
|
b. Bracketed paste mode works in more places: incremental search strings, vi
|
|
overstrike mode, character search, and reading numeric arguments.
|
|
|
|
c. Readline automatically switches to horizontal scrolling if the terminal has
|
|
only one line.
|
|
|
|
d. Unbinding all key sequences bound to a particular readline function now
|
|
descends into keymaps for multi-key sequences.
|
|
|
|
e. rl-clear-display: new bindable command that clears the screen and, if
|
|
possible, the scrollback buffer (bound to emacs mode M-C-l by default).
|
|
|
|
f. New active mark and face feature: when enabled, it will highlight the text
|
|
inserted by a bracketed paste (the `active region') and the text found by
|
|
incremental and non-incremental history searches. This is tied to bracketed
|
|
paste and can be disabled by turning off bracketed paste.
|
|
|
|
g. Readline sets the mark in several additional commands.
|
|
|
|
h. Bracketed paste mode is enabled by default.
|
|
|
|
i. Readline tries to take advantage of the more regular structure of UTF-8
|
|
characters to identify the beginning and end of characters when moving
|
|
through the line buffer.
|
|
|
|
j. The bindable operate-and-get-next command (and its default bindings) are
|
|
now part of readline instead of a bash-specific addition.
|
|
|
|
k. The signal cleanup code now blocks SIGINT while processing after a SIGINT.
|