|`declare`|new options `-l` and `-u`|4.0-alpha|together with case-changing expansion forms|
|`case`|new action list terminators '';;& and '';&|4.0-alpha|ksh93: only `;&`. zsh and mksh: `;|`. mksh: all 4, (`;;&` is undocumented Bash compatibility)|
|`return`|accept negative values as return value (e.g. `return -1` will show as (8 bit) 255 in the caller)|4.3-alpha||
|`exit`|accept negative values as return value (e.g. `return -1` will show as (8 bit) 255 in the caller)|4.3-alpha||
|`read`|`read` skips `NUL` (ASCII Code 0) in input|4.3-alpha||
|`declare`|new option `-n`/`+n` to support nameref variable type|4.3-alpha||
|`wait`|new option `-n` to wait for the next background job to finish, returning its exit status.|4.3-alpha||
|`read`|`read` checks first variable argument for validity before trying to read inout|4.3-beta||
|`help`|attempts substring matching (as it did through bash-4.2) if exact string matching fails|4.3-beta2||
|`fc`|interprets option `-0` (zero) as the current command line|4.3-beta2||
|`cd`|new option `-@` to browse a file's extended attributes (on systems that support `O_XATTR`)|4.3-rc1||
|`kill`|new option `-L` (upper case ell) to list signals like the normal lowercase option `-l` (compatiblity with some standalone `kill` commands)|4.4-beta||
|`mapfile`|new option `-d`|4.4-alpha||
|`wait`|new option `-f`|5.0-alpha||
|`history`|option `-d` allows negative numbers to index from the end of the history list|5.0-alpha||
|`umask`|allows modes greater than octal 777|5.0-alpha||
|`times`|honors current locale settings when printing decimal points|5.0-alpha||
|`kill`|New options `-n SIGNUMBER` and `-s SIGNAME`|5.0-beta2|[kill](/commands/builtin/kill)|
|`select`|Support for an empty wordlist following `in`|5.0-beta2||
|`read`|Option `-e` (use ReadLine to obtain input) now works with arbitrary file descriptors (given by `-u` option)|5.1-alpha||
|`trap`|`-p` option prints signals with SIG_DFL/SIG_IGN on shell start (POSIX mode)|5.1-alpha||
|`unset`|automatically tries to unset a function if the given name is an invalid variable name|5.1-aplha||
|`wait`|option `-n` now accepts a list of jobs|5.1-alpha||
|`wait`|new option `-p NAME` to store PID/JobID (useful when waiting for a list of jobs)|5.1-alpha||
|`local`|new option `-p` to print local variables in the current scope|5.1-alpha||
|`ulimit`|new option `-R` to get/set `RLIMIT_RTTIME` resource|5.1-alpha||
|`$'...\'...'` escaped single quote inside ANSI-C-like strings|2.04-devel|KSH93|
|`${!PREFIX*}` (parameter name expansion)|2.04|KSH93|
|`$'...'` expands `\cx` (Control-x)|2.05b||
|`[:class:]` syntax for pattern matching|2.05b|KSH93|
|`${!ARRAY[@]}` (array index expansion)|3.0-alpha|KSH93|
|`{x..y}` (range brace expansion)|3.0-alpha||
|`$'...'` expands `\xNNN` (Hexdigits)|3.0||
|`+=` operator for arrays and strings|3.1-alpha1||
|`${PARAMETER//PATTERN/REPLACEMENT}` behaviour changed|3.2-alpha|anchoring for global substitution is no longer allowed, changes the way old syntax may work|
|`${@:0:x}` includes `$0`|4.0-alpha||
|Support for associative arrays|4.0-alpha|relevant builtins also got associative array support|
|case modification operators for expansions|4.0-alpha||
|numerically indexed arrays can be accessed (on expansion time) from the end using negative indexes|4.1-alpha||
|`\uNNNN` and `\uNNNNNNNN` in `$'...'`|4.2-alpha|for: `printf`, `echo -e`, `$'...'`|
|`${PARAMETER:OFFSET:LENGTH}`: Negative `LENGTH` values are used as offset from the end of the string|4.2-alpha|Substrings only for Bash and ksh93. Works also for argument expansions in zsh. ksh93 can use `${arr[n..-m]}`.|
|Word expansions like `${foo##bar}` understand indirect variable references|4.3-beta||
|Transformations|4.4||
|Process substitution now works in POSIX mode|5.1-alpha||
|official introduction of switchable "compatiblity levels"|4.0-alpha|`compat31` was introduced in a 3.2 version, mainly because of the incompatibilities that were introduced by the changed `=~` operator|
|`[[...]]` and `((...))` conditional commands are subject to the `ERR` trap and `set -e` feature|4.1-alpha||
|ACL support for file status checks|4.1-alpha||
|Assignment to negative array indices|4.3-alpha|ksh93, zsh|
|`declare`/`typeset -n`|4.3-alpha|Support for nameref variable type, a variable referencing another one by name|
|shells started to run process substitutions now run any trap set on `EXIT`|4.3-beta||
|process substitution does not inherit the `v` flag|5.0-alpha||
|`ERR` trap|5.0-alpha|Reports more reliable line numbers|
|Variable assignment|5.0-beta|Assignments preceeding a special builtin that chages variable attributes are not propagated back unless compatiblity mode is 44 or lower|