Bash is the Bourne-again shell. It is part of the GNU project, and the default shell of choice on Linux systems, and usually one of the first third party pieces of software installed by system administrators on commerical Unices.

The bash shell combines the standard features of the original Bourne shell with the most useful features from ksh, csh and tcsh.

Most noticably, bash has a command line editor that allows editing and history browsing with the standard editing keys. Filenames can be automatically completed by pressing tab. Emacs and vi key bindings are also available. The bash line editing component is its own standalone library, readline, that is reused in many other command oriented programs.

csh features

The C shell introduced the idea of using commands entered in the past as shortcuts for entering new commands. Bash follows suit by including all the csh history commands, including the 'history' builtin plus ! and ^ expansion.

Other shortcuts, like csh tilde expansion, brace expansion and the directory stack (pushd, popd) are included, too.

ksh features

Like csh, ksh improves upon the Bourne shell in many ways. The significant ksh features included in bash are related to scripting. The Posix '$()' form of command substitution is implemented as a replacement for backquote command substitution. This makes quoting and nesting of commands less problematic. The let builtin allows numerical calculations to be performed without resorting to expr. The RANDOM variable evalutes to a random number.

Bash also steals command aliases through the alias and unalias builtins.