BASH - The Bourne-Again Shell

Bash is the shell, or command language interpreter, that will appear in the GNU operating system. Bash is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard. It offers functional improvements over sh for both programming and interactive use. In addition, most sh scripts can be run by Bash without modification. Bash is quite portable. It uses a configuration system that discovers characteristics of the compilation platform at build time, and may therefore be built on nearly every version of UNIX. Ports to UNIX-like systems such as QNX and Minix and to non-UNIX systems such as OS/2, Windows 95/98, and Windows NT are available. Bash includes the following features:

Editing and Completion

Bash offers a command-line editing facility which permits users to edit command lines using familiar emacs or vi-style editing commands. Editing allows corrections to be made without having to erase back to the point of error or start the command line anew. The editing facilities include a feature that allows users to complete command and file names.

The Bash line editing library is fully customizable. Users may define their own key bindings -- the action taken when a key is pressed. A number of variables to fine-tune editing behavior are also available.

History and Command Re-entry

The Bash history feature remembers commands entered to the shell and allows them to be recalled and re-executed. The history list may be of unlimited size. Bash allows users to search for previous commands and reuse portions of those commands when composing new ones. The history list may be saved across shell sessions.

Bash allows users to control which commands are saved on the history list.

Job Control

On systems that support it, Bash provides an interface to the operating system's job control facilities, which allow processes to be suspended and restarted, and moved between the foreground and background. Bash allows users to selectively `forget' about background jobs.

Shell Functions and Aliases

These mechanisms are available to bind a user-selected identifier to a list of commands that will be executed when the identifier is used as a command name. Functions allow local variables and recursion, and have access to the environment of the calling shell. Aliases may be used to create a mnemonic for a command name, expand a single word to a complex command, or ensure that a command is called with a basic set of options.


Bash versions newer than bash-2.0 supports indexed arrays of unlimited size. The subscript for an array is an arithmetic expression. Arrays may be assigned to with a new compound assignment syntax, and several builtins have options to operate on array variables. Bash includes a number of built-in array variables.


Bash allows users to perform integer arithmetic in any base from two to sixty-four. Nearly all of the C language arithmetic operators are available with the same syntax and precedence as in C. Arithmetic expansion allows an arithmetic expression to be evaluated and the result substituted into the command line. Shell variables can be used as operands, and the value of an expression may be assigned to a variable.

An arithmetic expression may be used as a command; the exit status of the command is the value of the expression.

ANSI-C Quoting

There is a new quoting syntax that allows backslash-escaped characters in strings to be expanded according to the ANSI C standard.

Tilde Expansion

Users' home directories may be expanded using this feature. Words beginning with a tilde may also be expanded to the current or previous working directory.

Brace Expansion

Brace expansion is a convenient way to generate a list of strings that share a common prefix or suffix.

Substring Capabilities

Bash allows new strings to be created by removing leading or trailing substrings from existing variable values, or by specifying a starting offset and length. Portions of variable values may be matched against shell patterns and the matching portion removed or a new value substituted.

Indirect Variable Expansion

Bash makes it easy to find the value of a shell variable whose name is the value of another variable.

Expanded I/O Capabilities

Bash provides several input and output features not available in sh, including the ability to:

Control of Builtin Commands

Bash implements several builtin commands to give users more control over which commands are executed. The enable builtin allows other builtin commands to be selectively enabled or disabled. The command and builtin builtins change the order in which the shell searches for commands.

On systems that provide dynamic loading, new builtins may be loaded into a running shell from a shared object file. These new builtins have access to all of the shell facilities.


Bash includes a built-in help facility.

Shell Optional Behavior

There is a great deal of customizable shell behavior. The shopt builtin command provides a unified interface that allows users to alter shell defaults.

Prompt Customization

Bash allows the primary and secondary prompts to be customized by interpreting a number of backslash-escaped special characters. Parameter and variable expansion is also performed on the values of the primary and secondary prompt strings before they are displayed.


Bash provides a restricted shell environment. It is also possible to control the execution of setuid/setgid scripts.

Directory Stack

Bash provides a `directory stack', to which directories may be added and removed. The current directory may be changed to any directory in the stack. It is easy to toggle between two directories in the stack. The directory stack may be saved and restored across different shell invocations.


Bash is nearly completely conformant to POSIX.2. POSIX mode changes those few areas where the Bash default behavior differs from the standard to match the standard. In POSIX mode, Bash is POSIX.2 compliant.


Bash provides a new quoting syntax that allows strings to be translated according to the current locale. The locale in which the shell itself runs may also be changed, so that the shell messages themselves may be language-specific.

The command-line editing facilities allow the input of eight-bit characters, so most of the ISO-8859 family of character sets are supported.

Command Timing

Bash allows external commands, shell builtin commands and shell functions to be timed. The format used to display the timing information may be changed by the user.

User-contributed translations of this page

There are several user-contributed translations of this page. I welcome others.

Chet Ramey <>