| 1 |
BASH - The Bourne-Again Shell |
| 2 |
|
| 3 |
Bash is the shell, or command language interpreter, that will appear |
| 4 |
in the GNU operating system. Bash is an sh-compatible shell that |
| 5 |
incorporates useful features from the Korn shell (ksh) and C shell |
| 6 |
(csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 |
| 7 |
Shell and Tools standard. It offers functional improvements over sh |
| 8 |
for both programming and interactive use. In addition, most sh scripts |
| 9 |
can be run by Bash without modification. |
| 10 |
|
| 11 |
Bash is quite portable. It uses a configuration system that discovers |
| 12 |
characteristics of the compilation platform at build time, and may |
| 13 |
therefore be built on nearly every version of UNIX. Ports to |
| 14 |
UNIX-like systems such as QNX and Minix and to non-UNIX systems such |
| 15 |
as OS/2, Windows 95, and Windows NT are available. |
| 16 |
|
| 17 |
Bash includes the following features: |
| 18 |
|
| 19 |
Editing and Completion |
| 20 |
|
| 21 |
Bash offers a command-line editing facility which permits users to |
| 22 |
edit command lines using familiar emacs or vi-style editing commands. |
| 23 |
Editing allows corrections to be made without having to erase back |
| 24 |
to the point of error or start the command line anew. The editing |
| 25 |
facilities include a feature that allows users to complete command and |
| 26 |
file names. |
| 27 |
|
| 28 |
The Bash line editing library is fully customizable. Users may define |
| 29 |
their own key bindings -- the action taken when a key is pressed. A |
| 30 |
number of variables to fine-tune editing behavior are also available. |
| 31 |
|
| 32 |
History and Command Re-entry |
| 33 |
|
| 34 |
The Bash history feature remembers commands entered to the shell and |
| 35 |
allows them to be recalled and re-executed. The history list may be |
| 36 |
of unlimited size. Bash allows users to search for previous commands |
| 37 |
and reuse portions of those commands when composing new ones. The |
| 38 |
history list may be saved across shell sessions. |
| 39 |
|
| 40 |
Bash allows users to control which commands are saved on the history |
| 41 |
list. |
| 42 |
|
| 43 |
Job Control |
| 44 |
|
| 45 |
On systems that support it, Bash provides an interface to the |
| 46 |
operating system's job control facilities, which allow processes |
| 47 |
to be suspended and restarted, and moved between the foreground |
| 48 |
and background. Bash allows users to selectively `forget' about |
| 49 |
background jobs. |
| 50 |
|
| 51 |
Shell Functions and Aliases |
| 52 |
|
| 53 |
These mechanisms are available to bind a user-selected identifier to a |
| 54 |
list of commands that will be executed when the identifier is used as |
| 55 |
a command name. Functions allow local variables and recursion, and |
| 56 |
have access to the environment of the calling shell. Aliases may be |
| 57 |
used to create a mnemonic for a command name, expand a single word to |
| 58 |
a complex command, or ensure that a command is called with a basic set |
| 59 |
of options. |
| 60 |
|
| 61 |
Arrays |
| 62 |
|
| 63 |
Bash-2.0 supports indexed arrays of unlimited size. The subscript for |
| 64 |
an array is an arithmetic expression. Arrays may be assigned to with |
| 65 |
a new compound assignment syntax, and several builtins have options to |
| 66 |
operate on array variables. Bash includes a number of built-in array |
| 67 |
variables. |
| 68 |
|
| 69 |
Arithmetic |
| 70 |
|
| 71 |
Bash allows users to perform integer arithmetic in any base from two |
| 72 |
to sixty-four. Nearly all of the C language arithmetic operators are |
| 73 |
available with the same syntax and precedence as in C. Arithmetic |
| 74 |
expansion allows an arithmetic expression to be evaluated and the |
| 75 |
result substituted into the command line. Shell variables can be used |
| 76 |
as operands, and the value of an expression may be assigned to a |
| 77 |
variable. |
| 78 |
|
| 79 |
An arithmetic expression may be used as a command; the exit status of |
| 80 |
the command is the value of the expression. |
| 81 |
|
| 82 |
ANSI-C Quoting |
| 83 |
|
| 84 |
There is a new quoting syntax that allows backslash-escaped characters |
| 85 |
in strings to be expanded according to the ANSI C standard. |
| 86 |
|
| 87 |
Tilde Expansion |
| 88 |
|
| 89 |
Users' home directories may be expanded using this feature. Words |
| 90 |
beginning with a tilde may also be expanded to the current or previous |
| 91 |
working directory. |
| 92 |
|
| 93 |
Brace Expansion |
| 94 |
|
| 95 |
Brace expansion is a convenient way to generate a list of strings that |
| 96 |
share a common prefix or suffix. |
| 97 |
|
| 98 |
Substring Capabilities |
| 99 |
|
| 100 |
Bash allows new strings to be created by removing leading or trailing |
| 101 |
substrings from existing variable values, or by specifying a starting |
| 102 |
offset and length. Portions of variable values may be matched against |
| 103 |
shell patterns and the matching portion removed or a new value |
| 104 |
substituted. |
| 105 |
|
| 106 |
Indirect Variable Expansion |
| 107 |
|
| 108 |
Bash makes it easy to find the value of a shell variable whose name is |
| 109 |
the value of another variable. |
| 110 |
|
| 111 |
Expanded I/O Capabilities |
| 112 |
|
| 113 |
Bash provides several input and output features not available in sh, |
| 114 |
including the ability to: |
| 115 |
|
| 116 |
o specify a file or file descriptor for both input and output |
| 117 |
o read from or write to asynchronous processes using named pipes |
| 118 |
o read lines ending in backslash |
| 119 |
o display a prompt on the terminal before a read |
| 120 |
o format menus and interpret responses to them |
| 121 |
o echo lines exactly as input without escape processing |
| 122 |
|
| 123 |
Control of Builtin Commands |
| 124 |
|
| 125 |
Bash implements several builtin commands to give users more control |
| 126 |
over which commands are executed. The enable builtin allows other |
| 127 |
builtin commands to be selectively enabled or disabled. The command |
| 128 |
and builtin builtins change the order in which the shell searches for |
| 129 |
commands. |
| 130 |
|
| 131 |
On systems that provide dynamic loading, new builtins may be loaded |
| 132 |
into a running shell from a shared object file. These new builtins |
| 133 |
have access to all of the shell facilities. |
| 134 |
|
| 135 |
Help |
| 136 |
|
| 137 |
Bash includes a built-in help facility. |
| 138 |
|
| 139 |
Shell Optional Behavior |
| 140 |
|
| 141 |
There is a great deal of customizable shell behavior. The shopt |
| 142 |
builtin command provides a unified interface that allows users to |
| 143 |
alter shell defaults. |
| 144 |
|
| 145 |
Prompt Customization |
| 146 |
|
| 147 |
Bash allows the primary and secondary prompts to be customized by |
| 148 |
interpreting a number of backslash-escaped special characters. |
| 149 |
Parameter and variable expansion is also performed on the values of |
| 150 |
the primary and secondary prompt strings before they are displayed. |
| 151 |
|
| 152 |
Security |
| 153 |
|
| 154 |
Bash provides a restricted shell environment. It is also possible to |
| 155 |
control the execution of setuid/setgid scripts. |
| 156 |
|
| 157 |
Directory Stack |
| 158 |
|
| 159 |
Bash provides a `directory stack', to which directories may be added |
| 160 |
and removed. The current directory may be changed to any directory in |
| 161 |
the stack. It is easy to toggle between two directories in the stack. |
| 162 |
The directory stack may be saved and restored across different shell |
| 163 |
invocations. |
| 164 |
|
| 165 |
POSIX Mode |
| 166 |
|
| 167 |
Bash is nearly completely conformant to POSIX.2. POSIX mode changes |
| 168 |
those few areas where the Bash default behavior differs from the |
| 169 |
standard to match the standard. In POSIX mode, Bash is POSIX.2 |
| 170 |
compliant. |
| 171 |
|
| 172 |
Internationalization |
| 173 |
|
| 174 |
Bash provides a new quoting syntax that allows strings to be |
| 175 |
translated according to the current locale. The locale in which the |
| 176 |
shell itself runs may also be changed, so that the shell messages |
| 177 |
themselves may be language-specific. |
| 178 |
|
| 179 |
The command-line editing facilities allow the input of eight-bit |
| 180 |
characters, so most of the ISO-8859 family of character sets are |
| 181 |
supported. |
| 182 |
|
| 183 |
Command Timing |
| 184 |
|
| 185 |
Bash allows external commands, shell builtin commands and shell functions |
| 186 |
to be timed. The format used to display the timing information may be |
| 187 |
changed by the user. |