diff --git a/docs/bash4.md b/docs/bash4.md index 5565392..839be57 100644 --- a/docs/bash4.md +++ b/docs/bash4.md @@ -1,12 +1,9 @@ # Bash 4 - a rough overview -:V4: - -\Attention: Since Bash 4 has been around for quite some time now -(4.3 will come soon), I consider it to be \"standard\". This page is not -maintained anymore and is left here to keep your links working. See the -[bashchanges](/scripting/bashchanges) page for new stuff -introduced.\ +!!! warning "Attention" + Since Bash 4 has been around for quite some time now (4.3 will come soon), I consider it to be "standard". + This page is not maintained anymore and is left here to keep your links working. + See the [bashchanges](/scripting/bashchanges) page for new stuff introduced. Besides many bugfixes since Bash 3.2, Bash 4 will bring some interesting new features for shell users and scripters. See also @@ -15,23 +12,19 @@ more details. Not all of the changes and news are included here, just the biggest or most interesting ones. The changes to completion, and the readline -component are not covered. **Though, if you\'re familiar with these -parts of Bash (and Bash 4), feel free to write a chapter here.** +component are not covered. **Though, if you're familiar with these parts of Bash (and Bash 4), feel free to write a chapter here.** The complete list of fixes and changes is in the CHANGES or NEWS file of your Bash 4 distribution. -\ The current available **stable** -version is 4.4.18 release (February 03, 2018): +The current available **stable** version is 4.4.18 release (February 03, 2018): -- -- - -\ +- +- ## New or changed commands and keywords -### The new \"coproc\" keyword +### The new "coproc" keyword Bash 4 introduces the concepts of coprocesses, a well known feature of other shells. The basic concept is simple: It will start any command in @@ -43,7 +36,7 @@ communicate with its input and output data streams. See [The coproc keyword](/syntax/keywords/coproc) -### The new \"mapfile\" builtin +### The new "mapfile" builtin The `mapfile` builtin is able to map the lines of a file directly into an array. This avoids having to fill an array yourself using a loop. It @@ -52,7 +45,7 @@ callback, for example to display a progress bar. See: [mapfile](/commands/builtin/mapfile) -### Changes to the \"case\" keyword +### Changes to the "case" keyword The `case` construct understands two new action list terminators: @@ -64,7 +57,7 @@ pattern instead of terminating the whole execution. See [case](/syntax/ccmd/case) -### Changes to the \"declare\" builtin +### Changes to the "declare" builtin The `-p` option now prints all attributes and values of declared variables (or functions, when used with `-f`). The output is fully @@ -77,7 +70,7 @@ assignment. `declare -A` declares associative arrays (see below). -### Changes to the \"read\" builtin +### Changes to the "read" builtin The `read` builtin command has some interesting new features. @@ -95,7 +88,7 @@ able to change the text, or press return to accept it. See [read](/commands/builtin/read) -### Changes to the \"help\" builtin +### Changes to the "help" builtin The builtin itself didn\'t change much, but the data displayed is more structured now. The help texts are in a better format, much easier to @@ -104,7 +97,7 @@ read. There are two new options: `-d` displays the summary of a help text, `-m` displays a manpage-like format. -### Changes to the \"ulimit\" builtin +### Changes to the "ulimit" builtin Besides the use of the 512 bytes blocksize everywhere in POSIX mode, `ulimit` supports two new limits: `-b` for max socket buffer size and @@ -135,13 +128,15 @@ When using substring expansion on the positional parameters, a starting index of 0 now causes \$0 to be prepended to the list (if the positional parameters are used). Before, this expansion started with \$1: - # this should display $0 on Bash v4, $1 on Bash v3 - echo ${@:0:1} +```bash +# this should display $0 on Bash v4, $1 on Bash v3 +echo ${@:0:1} +``` ### Globbing -There\'s a new shell option `globstar`. When enabled, Bash will perform -recursive globbing on `**` \-- this means it matches all directories and +There's a new shell option `globstar`. When enabled, Bash will perform +recursive globbing on `**` – this means it matches all directories and files from the current position in the filesystem, rather than only the current level. @@ -158,11 +153,13 @@ associative arrays. An associative array is an array indexed by an arbitrary string, something like - declare -A ASSOC +```bash +declare -A ASSOC - ASSOC[First]="first element" - ASSOC[Hello]="second element" - ASSOC[Peter Pan]="A weird guy" +ASSOC[First]="first element" +ASSOC[Hello]="second element" +ASSOC[Peter Pan]="A weird guy" +``` See [arrays](/syntax/arrays) @@ -179,11 +176,11 @@ See [redirection](/syntax/redirection) ## Interesting new shell variables - Variable Description - ---------------------------------------------------- -------------------------------------------------------------------------------- - [BASHPID](/syntax/shellvars#BASHPID) contains the PID of the current shell (this is different than what `$$` does!) - [PROMPT_DIRTRIM](/syntax/shellvars#PROMPT_DIRTRIM) specifies the max. level of unshortened pathname elements in the prompt - [FUNCNEST](/syntax/shellvars#FUNCNEST) control the maximum number of shell function recursions +| Variable | Description | +| -------------------------------------------------- | ------------------------------------------------------------------------------- | +| [BASHPID](/syntax/shellvars#BASHPID) | contains the PID of the current shell (this is different than what `$$` does!) | +| [PROMPT_DIRTRIM](/syntax/shellvars#PROMPT_DIRTRIM) | specifies the max. level of unshortened pathname elements in the prompt | +| [FUNCNEST](/syntax/shellvars#FUNCNEST) | control the maximum number of shell function recursions | See [shellvars](/syntax/shellvars) @@ -192,28 +189,28 @@ See [shellvars](/syntax/shellvars) The mentioned shell options are **off by default** unless otherwise mentioned. - Option Description - ------------- -------------------------------------------------------------------------------------------------------- - `checkjobs` check for and report any running jobs at shell exit - `compat*` set compatiblity modes for older shell versions (influences regular expression matching in `[[ ... ]]` - `dirspell` enables spelling corrections on directory names during globbing - `globstar` enables recursive globbing with `**` - `lastpipe` (4.2) to execute the last command in a pipeline in the current environment +| Option | Description | +| ----------- | ------------------------------------------------------------------------------------------------------ | +| `checkjobs` | check for and report any running jobs at shell exit | +| `compat*` | set compatiblity modes for older shell versions (influences regular expression matching in `[[ ... ]]` | +| `dirspell` | enables spelling corrections on directory names during globbing | +| `globstar` | enables recursive globbing with `**` | +| `lastpipe` | (4.2) to execute the last command in a pipeline in the current environment | See [shell_options](/internals/shell_options) ## Misc -- If a command is not found, the shell attempts to execute a shell - function named `command_not_found_handle`, supplying the command - words as the function arguments. This can be used to display - userfriendly messages or perform different command searches -- The behaviour of the `set -e` (`errexit`) mode was changed, it now - acts more intuitive (and is better documented in the manpage). -- The output target for the `xtrace` (`set -x`/`set +x`) feature is - configurable **since Bash 4.1** (previously, it was fixed to - `stderr`): a variable named - [BASH_XTRACEFD](/syntax/shellvars#BASH_XTRACEFD) can be set to the - filedescriptor that should get the output -- Bash 4.1 is able to log the history to syslog (only to be enabled at - compile time in `config-top.h`) +- If a command is not found, the shell attempts to execute a shell + function named `command_not_found_handle`, supplying the command + words as the function arguments. This can be used to display + userfriendly messages or perform different command searches +- The behaviour of the `set -e` (`errexit`) mode was changed, it now + acts more intuitive (and is better documented in the manpage). +- The output target for the `xtrace` (`set -x`/`set +x`) feature is + configurable **since Bash 4.1** (previously, it was fixed to + `stderr`): a variable named + [BASH_XTRACEFD](/syntax/shellvars#BASH_XTRACEFD) can be set to the + filedescriptor that should get the output +- Bash 4.1 is able to log the history to syslog (only to be enabled at + compile time in `config-top.h`)