| 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. |