Differences between revisions 48 and 85 (spanning 37 versions)
Revision 48 as of 2017-07-14 14:02:23
Size: 7546
Editor: geirha
Comment: ^ is special to moin syntax
Revision 85 as of 2023-10-28 01:44:11
Size: 9810
Editor: larryv
Comment: replaced bash-hackers URL with Wayback Machine version
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
Line 6: Line 5:
 * [[http://cnswww.cns.cwru.edu/~chet/bash/NEWS|NEWS]]: a file tersely listing the notable changes between the current and previous versions
 * [[http://cnswww.cns.cwru.edu/~chet/bash/CHANGES|CHANGES]]: a "complete" bash change history (back to 2.0 only)
 * [[http://cnswww.cns.cwru.edu/~chet/bash/COMPAT|COMPAT]]: compatibility issues between bash3 and previous versions
 * [[http://tiswww.case.edu/php/chet/bash/NEWS|NEWS]]: a file tersely listing the notable changes between the current and previous versions
 * [[http://tiswww.case.edu/php/chet/bash/CHANGES|CHANGES]]: a "complete" bash change history (back to 2.0 only)
 * [[http://tiswww.case.edu/php/chet/bash/COMPAT|COMPAT]]: compatibility issues between bash3 and previous versions
Line 10: Line 9:
A more extensive list than the one below can be found at http://wiki.bash-hackers.org/scripting/bashchanges A more extensive list than the one below can be found at https://web.archive.org/web/20230401195427/https://wiki.bash-hackers.org/scripting/bashchanges
Line 14: Line 13:
|| READLINE_ARGUMENT (variable) || 5.2 (2022) || ||
|| varredir_close (shopt) || 5.2 (2022) || ||
|| printf %Q || 5.2 (2022) || ||
|| noexpand_translations (shopt) || 5.2 (2022) || ||
|| ${var@k} || 5.2 (2022) || ||
|| patsub_replacement (shopt) || 5.2 (2022) || ||
|| globskipdots (shopt) || 5.2 (2022) || ||
||BASH_REMATCH is no longer readonly || 5.1 (2020) || ||
||PROMPT_COMMAND may be an array || 5.1 (2020) || ||
||SRANDOM (variable) || 5.1 (2020) || ||
||wait -p varname || 5.1 (2020) || ||
||declare -I || 5.1 (2020) || ||
||${var@U}, ${var@u}, ${var@L}, ${var@K} || 5.1 (2020) || ||
||BASH_ARGV0 (variable) || 5.0 (2019) || ||
||EPOCHSECONDS, EPOCHREALTIME (variables) ||5.0 (2019) ||zsh (2003, 2011) ||
||wait -f ||5.0 (2019) || ||
||history -d allows negative offsets ||5.0 (2019) || ||
||assoc_expand_once (shopt) ||5.0 (2019) || ||
||localvar_inherit (shopt) ||5.0 (2019) || ||
||--pretty-print (invocation option) ||5.0 (2019) ||native ||
||assoc=(key1 value1 key2 value2) assoc+=(key value) || 5.0 (2019) || ||
Line 16: Line 36:
||mapfile/readarray -d ||4.4 (2016) ||zsh (1999) || ||mapfile/readarray -d ||4.4 (2016) ||native ||
Line 18: Line 38:
||${var@spec} ||4.4 (2016) ||mksh (2012) for the syntax, zsh (1990s) for the feature ||
||local - ||4.4 (2016) ||zsh (set -o localoptions) (1995) ||
||${var@a}, ${var@A}, ${var@E}, ${var@P}, ${var@Q}||4.4 (2016) ||mksh (2012) for the syntax, zsh (1990s) for the feature ||
||local - ||4.4 (2016) ||Almquist shell (1989) ||
Line 23: Line 43:
||test -v 'array[element]' (bug fix) ||4.3 (2014) ||ksh93 (1993) ||
Line 25: Line 46:
||printf %(fmt)T uses -1 as default argument instead of 0 ||4.3 (2011) ||ksh93 (1999) ||
||quotes in the replacement part of ${var/pat/"$rep"} are no longer literal ||4.3 (2011) || ||
Line 34: Line 57:
||BASH_XTRACEFD ||4.1 (2010) ||native || ||complete -D (allowing dynamically loaded completions) ||4.1 (2010)|| ||
||BASH_XTRACEFD (variable) ||4.1 (2010) ||native ||
||${@:offset[:length]} includes $0 ||4.0 (2009) ||ksh ||
Line 39: Line 64:
||compopt (builtin) || 4.0 (2009) || ||
Line 42: Line 68:
||${var,[,]} and ${var^[^]} ||4.0 (2009) ||native || ||${var,} ${var,,} ${var^} ${var^^} ||4.0 (2009) ||native ||
Line 45: Line 71:
||read -t 0 (test input availability) ||4.0 (2009) || ||
Line 52: Line 79:
||\xXX sequences in $'...' ||3.0 (2004) || ||
Line 53: Line 81:
||BASH_REMATCH ||3.0 (2004) ||native ||
||RETURN (trap) ||3.0 (2004) ||native ||
||pipefail (option) ||3.0 (2004) ||ksh93 ||
||failglob (shopt) ||3.0 (2004) ||native ||
Line 54: Line 86:
||<<< ||2.05b (2002) ||zsh (1990s) || ||[n]>&word- and [n]<&word- ||2.05b (2002) ||ksh93 ||
||<<< ||2.05b (2002) ||zsh (1991) ||
||printf %n ||2.05a (2001) ||ksh93 ||
Line 57: Line 91:
||/dev/fd/N, /dev/tcp/host/port, etc. ||2.04 (2000) ||ksh93 (1990s) || ||/dev/fd/N, /dev/tcp/host/port, etc. ||2.04 (2000) ||ksh93 (1993) ||
Line 64: Line 98:
||** (exponentiation) ||2.02 (1998) ||native || ||** (exponentiation) ||2.02 (1998) ||zsh (1994) ||
Line 67: Line 101:
||arrays ||2.0 (1996) ||ksh (1980s) || ||arrays ||2.0 (1996) ||csh (1979), zsh (1991) for array=(assignment) syntax ||
Line 73: Line 107:
||bash-5.2 ||[[https://lists.gnu.org/archive/html/bug-bash/2022-09/msg00056.html|2022-09-26]] ||
||bash-5.1 ||[[https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00002.html|2020-12-07]] ||
||bash-5.0 ||[[http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html|2019-01-07]] ||
Line 106: Line 143:
||bash-0.99 ||First mention found at [[https://groups.google.com/d/msg/gnu.bash.bug/dliLANZUdwI/X-lY_E-bDRMJ|1989-06-11]] || ||bash-0.99 || First beta release [[https://groups.google.com/g/gnu.announce/c/hvhlR1Vn1P0/m/NYwp-4_0CaUJ|1989-06-7]] ||

Is there a list of which features were added to specific releases (versions) of Bash?

Here are some links to official Bash documentation:

  • NEWS: a file tersely listing the notable changes between the current and previous versions

  • CHANGES: a "complete" bash change history (back to 2.0 only)

  • COMPAT: compatibility issues between bash3 and previous versions

A more extensive list than the one below can be found at https://web.archive.org/web/20230401195427/https://wiki.bash-hackers.org/scripting/bashchanges

Notable changes in released bash versions

Feature

Added in version

Copied/inspired from

READLINE_ARGUMENT (variable)

5.2 (2022)

varredir_close (shopt)

5.2 (2022)

printf %Q

5.2 (2022)

noexpand_translations (shopt)

5.2 (2022)

${var@k}

5.2 (2022)

patsub_replacement (shopt)

5.2 (2022)

globskipdots (shopt)

5.2 (2022)

BASH_REMATCH is no longer readonly

5.1 (2020)

PROMPT_COMMAND may be an array

5.1 (2020)

SRANDOM (variable)

5.1 (2020)

wait -p varname

5.1 (2020)

declare -I

5.1 (2020)

${var@U}, ${var@u}, ${var@L}, ${var@K}

5.1 (2020)

BASH_ARGV0 (variable)

5.0 (2019)

EPOCHSECONDS, EPOCHREALTIME (variables)

5.0 (2019)

zsh (2003, 2011)

wait -f

5.0 (2019)

history -d allows negative offsets

5.0 (2019)

assoc_expand_once (shopt)

5.0 (2019)

localvar_inherit (shopt)

5.0 (2019)

--pretty-print (invocation option)

5.0 (2019)

native

assoc=(key1 value1 key2 value2) assoc+=(key value)

5.0 (2019)

PS0 (variable)

4.4 (2016)

native

loadable builtin deployment infrastructure

4.4 (2016)

ksh93 (1993)

mapfile/readarray -d

4.4 (2016)

native

--help for builtins

4.4 (2016)

ksh93 (2001, possibly earlier)

${var@a}, ${var@A}, ${var@E}, ${var@P}, ${var@Q}

4.4 (2016)

mksh (2012) for the syntax, zsh (1990s) for the feature

local -

4.4 (2016)

Almquist shell (1989)

$! and wait for process substitutions

4.4 (2016)

native

wait -n

4.3 (2014)

native

test -R

4.3 (2014)

ksh93 (1993)

test -v 'array[element]' (bug fix)

4.3 (2014)

ksh93 (1993)

declare/typeset -n and associated changes to ${!ref} and for..in

4.3 (2014)

ksh93 (1993)

array[-idx] (in assignments, read, unset, etc)

4.3 (2014)

zsh (1990s)

printf %(fmt)T uses -1 as default argument instead of 0

4.3 (2011)

ksh93 (1999)

quotes in the replacement part of ${var/pat/"$rep"} are no longer literal

4.3 (2011)

\uXXXX and \UXXXXXXXX

4.2 (2011)

zsh (2001)

declare -g

4.2 (2011)

zsh (1990s)

test -v

4.2 (2011)

ksh93 (2009)

printf %(fmt)T

4.2 (2011)

ksh93 (1999)

${array[-idx]} and ${var:start:-len}

4.2 (2011)

zsh (1990s) and native

lastpipe (shopt)

4.2 (2011)

ksh (1980s) default behaviour there

read -N

4.1 (2010)

ksh93 (2003)

{var}> or {var}< etc. (FD variable assignment)

4.1 (2010)

developed jointly with ksh93 and zsh

syslog history (compile option)

4.1 (2010)

native

complete -D (allowing dynamically loaded completions)

4.1 (2010)

BASH_XTRACEFD (variable)

4.1 (2010)

native

${@:offset[:length]} includes $0

4.0 (2009)

ksh

;& and ;;& fall-throughs for case

4.0 (2009)

ksh93 (1993)

associative arrays

4.0 (2009)

ksh93 (1993)

&>> and |&

4.0 (2009)

native and csh (1970s)

command_not_found_handle (function)

4.0 (2009)

native

compopt (builtin)

4.0 (2009)

coproc (keyword)

4.0 (2009)

ksh (1980s), zsh (1990) for the coproc keyword

globstar (shopt)

4.0 (2009)

zsh (1992), ksh93 (2005) for the name of the option

mapfile/readarray (builtin)

4.0 (2009)

native

${var,} ${var,,} ${var^} ${var^^}

4.0 (2009)

native

{009..012} (leading zeros in brace expansions)

4.0 (2009)

zsh (1995)

{x..y..incr}

4.0 (2009)

ksh93 (2005)

read -t 0 (test input availability)

4.0 (2009)

read -t 0.5

4.0 (2009)

zsh (2003)

read -i

4.0 (2009)

zsh (vared) (1990s)

x+=string array+=(string)

3.1 (2005)

ksh93 (2000)

printf -v var

3.1 (2005)

native

nocasematch (shopt)

3.1 (2005)

native

{x..y}

3.0 (2004)

zsh (1995)

${!array[@]}

3.0 (2004)

ksh93 (1993)

\xXX sequences in $'...'

3.0 (2004)

[[ =~

3.0 (2004)

native

BASH_REMATCH

3.0 (2004)

native

RETURN (trap)

3.0 (2004)

native

pipefail (option)

3.0 (2004)

ksh93

failglob (shopt)

3.0 (2004)

native

printf %q produces $'...'

2.05b (2002)

ksh93 (1993)

[n]>&word- and [n]<&word-

2.05b (2002)

ksh93

<<<

2.05b (2002)

zsh (1991)

printf %n

2.05a (2001)

ksh93

i++

2.04 (2000)

ksh93 (1993)

for ((;;))

2.04 (2000)

ksh93 (1993)

/dev/fd/N, /dev/tcp/host/port, etc.

2.04 (2000)

ksh93 (1993)

read -t, -n, -d and -s

2.04 (2000)

ksh93 (1993)

a=(*.txt) file expansion

2.03 (1999)

ksh93 (1993)

extglob (shopt)

2.02 (1998)

ksh (1980s)

[[

2.02 (1998)

ksh (1980s)

printf (builtin)

2.02 (1998)

ksh (1980s)

$(< filename)

2.02 (1998)

ksh (1980s)

** (exponentiation)

2.02 (1998)

zsh (1994)

\xNN

2.02 (1998)

zsh (1994 or earlier)

(( ))

2.0 (1996)

ksh (1980s)

arrays

2.0 (1996)

csh (1979), zsh (1991) for array=(assignment) syntax

$'...' (new quoting syntax)

2.0 (1996)

ksh93 (1993)

List of bash releases and other notable events

Release

Date

bash-5.2

2022-09-26

bash-5.1

2020-12-07

bash-5.0

2019-01-07

bash-4.4

2016-09-16

Shellshock patches are released for bash-2.05b through bash-4.3

2014-09-24 to 2014-10-05

bash-4.3

2014-02-27

bash-4.2

2011-02-14

bash-4.1

2010-01-02

bash-4.0

2009-02-23

bash-3.2

2006-10-12

bash-3.1

2005-12-09

bash-3.0

2004-07-27

bash-2.05b

2002-07-17

bash-2.05a

2001-11-15

bash-2.05

2001-04-09

bash-2.04

http://ftp.gnu.org/gnu/bash puts it around 2000-03-21

bash-2.03

1999-02-19

bash-2.02

1998-04-20

bash-2.01

1997-06-06

bash-2.0

1996-12-23

bash-1.14

1994-06-02

bash-1.13

1993-09-03

Looks like Chet Ramey takes over as maintainer between 1.12 and 1.13

bash-1.12

1992-01-26

bash-1.11

1992-01-10

bash-1.10

First mention found at 1991-10-07, so some time before that

bash-1.09

First mention found at 1991-06-02

bash-1.08

1991-05-22

bash-1.07

likely 1991-02-01

bash-1.06

This is a tough one. There was apparently a "bootleg" version of 1.06, so this requires more digging

bash-1.05

1990-03-03

bash-1.04

First mention found at 1989-11-07

bash-1.03

1989-09-02

bash-1.02

First mention found at 1989-07-09

bash-1.01

1989-06-23

bash-1.00

Hard to search for ...

bash-0.99

First beta release 1989-06-7

BashFAQ/061 (last edited 2024-04-14 22:29:57 by emanuele6)