scripting:bashchanges

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
scripting:bashchanges [2019/07/07 05:27]
thebonsai [Table] localvar_inherit changes
scripting:bashchanges [2020/06/28 06:51] (current)
thebonsai [Table]
Line 3: Line 3:
 This article is an **incomplete overview** of changes to Bash over time. Not all changes are listed, just the ones most likely to be useful for normal scripting. The overviews are categorized by topic and ordered by version. This article is an **incomplete overview** of changes to Bash over time. Not all changes are listed, just the ones most likely to be useful for normal scripting. The overviews are categorized by topic and ordered by version.
  
-If you have more detailed information,​ or historical information about Bash versions earlier than V2, feel free to mail me, or use the discussion below.+A useful starting point is the [[https://​github.com/​bminor/​bash/​blob/​master/​NEWS|NEWS file]] in bash sources. ​If you have more detailed information,​ or historical information about Bash versions earlier than V2, feel free to mail me, or use the discussion below.
  
-Status: ​4.(Release)+Status: ​5.(beta2)
  
 ===== Shell options ===== ===== Shell options =====
Line 53: Line 53:
 | ''​globasciiranges'' ​               | 5.0-beta ​                 | New default: on (default may be configured at compile time)                      | | ''​globasciiranges'' ​               | 5.0-beta ​                 | New default: on (default may be configured at compile time)                      |
 | ''​localvar_inherit'' ​              | 5.0-beta ​                 | guard code against inheriting from an incompatible data type                     | | ''​localvar_inherit'' ​              | 5.0-beta ​                 | guard code against inheriting from an incompatible data type                     |
 +| ''​checkwinsize'' ​                  | 5.0-beta2 ​                | New default: on                                                                  |
 +| ''​shift_verbose'' ​                 | 5.0-beta2 ​                | Default on when in POSIX mode                                                    |
  
 ==== General (all/many builtins) ==== ==== General (all/many builtins) ====
Line 76: Line 78:
 | escape sequences ''​\"''​ and ''​\?'' ​                            | 3.0-beta1 ​                ​| ​                                              | | escape sequences ''​\"''​ and ''​\?'' ​                            | 3.0-beta1 ​                ​| ​                                              |
 | modified option ''​-v''​ to assign to individual array elements ​ | 4.1-alpha ​                ​| ​                                              | | modified option ''​-v''​ to assign to individual array elements ​ | 4.1-alpha ​                ​| ​                                              |
-| conversion ''​(...)T'' ​                                         | 4.2-alpha ​                | support stftime(3) date/time format ​          ​|+| conversion ''​(...)T'' ​                                         | 4.2-alpha ​                | support stftime(3) date/time format; uses current time |
 | ''​\uNNNN''​ and ''​\UNNNNNNNN''​ escape sequences ​                | 4.2-alpha ​                | for: ''​printf'',​ ''​echo -e'',​ ''​%%$'​...'​%%'' ​ | | ''​\uNNNN''​ and ''​\UNNNNNNNN''​ escape sequences ​                | 4.2-alpha ​                | for: ''​printf'',​ ''​echo -e'',​ ''​%%$'​...'​%%'' ​ |
-| conversion ''​(...)T'' ​                                         | 4.2-alpha ​                | uses current time if                          | 
- 
  
  
Line 100: Line 100:
 | ''​test''/''​%%[%%''/''​%%[[%%'':​ ''​-v'' ​                                      | 4.2-alpha ​                | check if a variable is set                                                           | | ''​test''/''​%%[%%''/''​%%[[%%'':​ ''​-v'' ​                                      | 4.2-alpha ​                | check if a variable is set                                                           |
 | ''​test''/''​%%[%%''/''​%%[[%%'':​ ''​-v'' ​                                      | 4.2-alpha ​                | support array syntax to check for elements ​                                          | | ''​test''/''​%%[%%''/''​%%[[%%'':​ ''​-v'' ​                                      | 4.2-alpha ​                | support array syntax to check for elements ​                                          |
 +| ''​test''/''​%%[%%''/''​%%[[%%'':​ ''​-N''​ accepts nanoseconds ​                  | 5.1-alpha ​                ​| ​                                                                                     |
 +| ''​test''/''​%%[%%''/''​%%[[%%'':​ ''​-v''​ accepts positional parameters ​        | 5.1-alpha ​                ​| ​                                                                                     |
  
 ==== Other builtins and keywords ==== ==== Other builtins and keywords ====
Line 150: Line 152:
 | ''​cd'' ​                      | new option ''​-@''​ to browse a file's extended attributes (on systems that support ''​O_XATTR''​) ​                                                   | 4.3-rc1 ​                  ​| ​                                                                                                     | | ''​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 ​                 |                                                                                                      | | ''​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 ​                ​| ​                                                                                                     |+| ''​mapfile'' ​                 | new option ​''​-d'' ​                                                                                                                                | 4.4-alpha ​                ​| ​                                                                                                     |
 | ''​wait'' ​                    | new option ''​-f'' ​                                                                                                                                | 5.0-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 ​                ​| ​                                                                                                     | | ''​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 ​                ​| ​                                                                                                     | | ''​umask'' ​                   | allows modes greater than octal 777                                                                                                               | 5.0-alpha ​                ​| ​                                                                                                     |
 | ''​times'' ​                   | honors current locale settings when printing decimal points ​                                                                                      | 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 ​                | [[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 ​                ​| ​                                                                                                     |
  
  
 ===== Builtin variables ===== ===== Builtin variables =====
-^ Feature or change description ​                          ^ Appeared in Bash version ​ ^ See also                                                                          +^ Feature or change description ​                          ^ Appeared in Bash version ​ ^ See also                                                                            
-| ''​HISTCMD'' ​                                            | 1.14.0 ​                   | interactive usage                                                                 ​+| ''​HISTCMD'' ​                                            | 1.14.0 ​                   | interactive usage                                                                   ​
-| ''​PS1'',​ ''​PS2'',​ ''​PATH'',​ and ''​IFS''​ are unsettable ​ | 2.0                       ​| ​                                                                                  ​+| ''​PS1'',​ ''​PS2'',​ ''​PATH'',​ and ''​IFS''​ are unsettable ​ | 2.0                       ​| ​                                                                                    ​
-| ''​DIRSTACK''​ array variable ​                            | 2.0                       ​| ​                                                                                  ​+| ''​DIRSTACK''​ array variable ​                            | 2.0                       ​| ​                                                                                    ​
-| ''​PIPESTATUS''​ array variable ​                          | 2.0                       ​| ​                                                                                  ​+| ''​PIPESTATUS''​ array variable ​                          | 2.0                       ​| ​                                                                                    ​
-| ''​BASH_VERSINFO''​ array variable ​                       | 2.0                       ​| ​                                                                                  ​+| ''​BASH_VERSINFO''​ array variable ​                       | 2.0                       ​| ​                                                                                    ​
-| ''​HOSTNAME'' ​                                           | 2.0                       ​| ​                                                                                  ​+| ''​HOSTNAME'' ​                                           | 2.0                       ​| ​                                                                                    ​
-| ''​SHELLOPTS'' ​                                          | 2.0                       ​| ​                                                                                  ​+| ''​SHELLOPTS'' ​                                          | 2.0                       ​| ​                                                                                    ​
-| ''​MACHTYPE'' ​                                           | 2.0                       ​| ​                                                                                  ​+| ''​MACHTYPE'' ​                                           | 2.0                       ​| ​                                                                                    ​
-| ''​GLOBIGNORE'' ​                                         | 2.0                       ​| ​                                                                                  ​+| ''​GLOBIGNORE'' ​                                         | 2.0                       ​| ​                                                                                    ​
-| ''​HISTIGNORE'' ​                                         | 2.0                       ​| ​                                                                                  ​+| ''​HISTIGNORE'' ​                                         | 2.0                       ​| ​                                                                                    ​
-| respect ''​LC_ALL'' ​                                     | 2.0                       ​| ​                                                                                  ​+| respect ''​LC_ALL'' ​                                     | 2.0                       ​| ​                                                                                    ​
-| respect ''​LC_MESSAGES'' ​                                | 2.0                       ​| ​                                                                                  ​+| respect ''​LC_MESSAGES'' ​                                | 2.0                       ​| ​                                                                                    ​
-| respect ''​LC_CTYPE'' ​                                   | 2.0                       ​| ​                                                                                  ​+| respect ''​LC_CTYPE'' ​                                   | 2.0                       ​| ​                                                                                    ​
-| respect ''​LC_COLLATE'' ​                                 | 2.0                       ​| ​                                                                                  ​+| respect ''​LC_COLLATE'' ​                                 | 2.0                       ​| ​                                                                                    ​
-| respect ''​LANG'' ​                                       | 2.0                       ​| ​                                                                                  ​+| respect ''​LANG'' ​                                       | 2.0                       ​| ​                                                                                    ​
-| ''​GROUPS''​ array variable ​                              | 2.01                      |                                                                                   ​+| ''​GROUPS''​ array variable ​                              | 2.01                      |                                                                                     ​
-| ''​GROUPS''​ unsettable/​takes (discarded) assignments ​    | 2.04                      |                                                                                   ​+| ''​GROUPS''​ unsettable/​takes (discarded) assignments ​    | 2.04                      |                                                                                     ​
-| ''​FUNCNAME'' ​                                           | 2.04                      |                                                                                   ​+| ''​FUNCNAME'' ​                                           | 2.04                      |                                                                                     ​
-| respect ''​LC_NUMERIC'' ​                                 | 2.04                      |                                                                                   ​+| respect ''​LC_NUMERIC'' ​                                 | 2.04                      |                                                                                     ​
-| ''​TMOUT'' ​                                              | 2.05b                     ​| ​                                                                                  ​+| ''​TMOUT'' ​                                              | 2.05b                     ​| ​                                                                                    ​
-| ''​BASH_REMATCH'' ​                                       | 3.0                       | together with regex support in ''​%%[[...]]%%'' ​                                   +| ''​BASH_REMATCH'' ​                                       | 3.0                       | together with regex support in ''​%%[[...]]%%'' ​                                     
-| ''​BASH_ARGC'' ​                                          | 3.0                       | debugger support ​                                                                 +| ''​BASH_ARGC'' ​                                          | 3.0                       | debugger support ​                                                                   
-| ''​BASH_ARGV'' ​                                          | 3.0                       | debugger support ​                                                                 +| ''​BASH_ARGV'' ​                                          | 3.0                       | debugger support ​                                                                   
-| ''​BASH_SOURCE'' ​                                        | 3.0                       | debugger support ​                                                                 +| ''​BASH_SOURCE'' ​                                        | 3.0                       | debugger support ​                                                                   
-| ''​BASH_LINENO'' ​                                        | 3.0                       | debugger support ​                                                                 +| ''​BASH_LINENO'' ​                                        | 3.0                       | debugger support ​                                                                   
-| ''​BASH_SUBSHELL'' ​                                      | 3.0                       | debugger support ​                                                                 +| ''​BASH_SUBSHELL'' ​                                      | 3.0                       | debugger support ​                                                                   
-| ''​BASH_EXECUTION_STRING'' ​                              | 3.0                       | debugger support ​                                                                 +| ''​BASH_EXECUTION_STRING'' ​                              | 3.0                       | debugger support ​                                                                   
-| ''​BASH_COMMAND'' ​                                       | 3.0                       | debugger support ​                                                                 +| ''​BASH_COMMAND'' ​                                       | 3.0                       | debugger support ​                                                                   
-| ''​HISTTIMEFORMAT'' ​                                     | 3.0                       ​| ​                                                                                  ​+| ''​HISTTIMEFORMAT'' ​                                     | 3.0                       ​| ​                                                                                    ​
-| ''​COMP_WORDBREAKS'' ​                                    | 3.0                       ​| ​                                                                                  ​+| ''​COMP_WORDBREAKS'' ​                                    | 3.0                       ​| ​                                                                                    ​
-| respect ''​LC_TIME'' ​                                    | 3.1                       ​| ​                                                                                  ​+| respect ''​LC_TIME'' ​                                    | 3.1                       ​| ​                                                                                    ​
-| ''​BASHPID'' ​                                            | 4.0-alpha ​                | Added to mksh R41.                                                                +| ''​BASHPID'' ​                                            | 4.0-alpha ​                | Added to mksh R41.                                                                  
-| ''​PROMPT_DIRTRIM'' ​                                     | 4.0                       ​| ​                                                                                  ​+| ''​PROMPT_DIRTRIM'' ​                                     | 4.0                       ​| ​                                                                                    ​
-| ''​BASH_XTRACEFD'' ​                                      | 4.1-alpha ​                ​| ​                                                                                  ​+| ''​BASH_XTRACEFD'' ​                                      | 4.1-alpha ​                ​| ​                                                                                    ​
-| ''​BASHOPTS'' ​                                           | 4.1-alpha ​                ​| ​                                                                                  ​+| ''​BASHOPTS'' ​                                           | 4.1-alpha ​                ​| ​                                                                                    ​
-| ''​FUNCNEST'' ​                                           | 4.2-alpha ​                ​| ​                                                                                  ​+| ''​FUNCNEST'' ​                                           | 4.2-alpha ​                ​| ​                                                                                    ​
-| ''​HISTSIZE'' ​                                           | 4.3-alpha ​                | can be set to negative values for unlimited history length ​                       +| ''​HISTSIZE'' ​                                           | 4.3-alpha ​                | can be set to negative values for unlimited history length ​                         
-| ''​HISTFILESIZE'' ​                                       | 4.3-alpha ​                | can be set to negative values for unlimit history file size                       ​+| ''​HISTFILESIZE'' ​                                       | 4.3-alpha ​                | can be set to negative values for unlimit history file size                         ​
-| ''​CHILD_MAX'' ​                                          | 4.3-alpha ​                | max. number of exit status of children the shell remembers ​                       +| ''​CHILD_MAX'' ​                                          | 4.3-alpha ​                | max. number of exit status of children the shell remembers ​                         
-| ''​BASH_COMPAT'' ​                                        | 4.3-alpha ​                | set shell compatiblity levels ​                                                    ​+| ''​BASH_COMPAT'' ​                                        | 4.3-alpha ​                | set shell compatiblity levels ​                                                      ​
-| ''​EPOCHSECONDS'' ​                                       | 5.0-alpha ​                | expands to the time in seconds since Unix epoch                                   ​+| ''​EPOCHSECONDS'' ​                                       | 5.0-alpha ​                | expands to the time in seconds since Unix epoch                                     ​
-| ''​EPOCHREALTIME'' ​                                      | 5.0-alpha ​                | expands to the time in seconds since Unix epoch with microsecond granularity ​     +| ''​EPOCHREALTIME'' ​                                      | 5.0-alpha ​                | expands to the time in seconds since Unix epoch with microsecond granularity ​       
-| ''​BASH_ARGV0'' ​                                         | 5.0-alpha ​                | get/set ''​$0'' ​                                                                   +| ''​BASH_ARGV0'' ​                                         | 5.0-alpha ​                | get/set ''​$0'' ​                                                                     
-| ''​PATH'' ​                                               | 5.0-alpha ​                | Possibility to set a static path for use in a restricted shell (at compile time)  +| ''​PATH'' ​                                               | 5.0-alpha ​                | Possibility to set a static path for use in a restricted shell (at compile time)    
-| ''​HISTSIZE'' ​                                           | 5.0-beta ​                 | Default can now be set at runtime ​                                                ​|+| ''​HISTSIZE'' ​                                           | 5.0-beta ​                 | Default can now be set at runtime ​                                                  | 
 +| ''​SRANDOM'' ​                                            | 5.1-alpha ​                | New random generator for 32bit numbers (using various methods in the backend) ​      | 
 +| ''​ARGV0'' ​                                              | 5.1-alpha ​                | Respected when set in initial shell environment,​ then initially used to set ''​$0'' ​ | 
 +| ''​BASH_REMATCH'' ​                                       | 5.1-alpha ​                | Not readonly anymore ​                                                               | 
 +| ''​PROMPT_COMMANDS'' ​                                    | 5.1-alpha ​                | New array variable. List of commands to be executed like ''​PROMPT_COMMAND'' ​        | 
 +| ''​SECONDS'' ​                                            | 5.1-alpha ​                | Assignment using arithmetic expressions (is nominally an integer variabnle) ​        | 
 +| ''​RANDOM'' ​                                             | 5.1-alpha ​                | Assignment using arithmetic expressions (is nominally an integer variabnle) ​        | 
 +| ''​LINENO'' ​                                             | 5.1-alpha ​                | Not an integer variabe ​                                                             ​|
  
 ===== Quoting, expansions, substitutions and related ===== ===== Quoting, expansions, substitutions and related =====
Line 238: Line 256:
 | ''​%%${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]}''​. ​ | | ''​%%${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 ​                 |                                                                                                                  | | Word expansions like ''​${foo##​bar}''​ understand indirect variable references ​                                 | 4.3-beta ​                 |                                                                                                                  |
 +| Transofrmations ​                                                                                              | 4.4                       ​| ​                                                                                                                 |
 +| Process substitution now works in POSIX mode                                                                  | 5.1-alpha ​                ​| ​                                                                                                                 |
 +| New transformations:​ ''​U'',​ ''​u'',​ ''​L'' ​                                                                     | 5.1-alpha ​                | Case-transformation ​                                                                                             |
 +| New transformation:​ ''​K'' ​                                                                                    | 5.1-alpha ​                | Display associative arrays as key/value pairs                                                                    |
  
  
Line 289: Line 311:
 | process substitution does not inherit the ''​v''​ flag                                                             | 5.0-alpha ​                ​| ​                                                                                                                                           | | process substitution does not inherit the ''​v''​ flag                                                             | 5.0-alpha ​                ​| ​                                                                                                                                           |
 | ''​ERR''​ trap                                                                                                     | 5.0-alpha ​                | Reports more reliable line numbers ​                                                                                                        | | ''​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   |
  
  • scripting/bashchanges.1562477272.txt
  • Last modified: 2019/07/07 05:27
  • by thebonsai