summaryrefslogtreecommitdiff
path: root/doc/bashref.info
diff options
context:
space:
mode:
Diffstat (limited to 'doc/bashref.info')
-rw-r--r--doc/bashref.info6513
1 files changed, 6513 insertions, 0 deletions
diff --git a/doc/bashref.info b/doc/bashref.info
new file mode 100644
index 00000000..6e4ecc12
--- /dev/null
+++ b/doc/bashref.info
@@ -0,0 +1,6513 @@
+This is Info file bashref.info, produced by Makeinfo-1.64 from the
+input file ./bashref.texi.
+
+This text is a brief description of the features that are present in
+the Bash shell.
+
+This is Edition 2.0, last updated 25 November 1996,
+of `The GNU Bash Reference Manual',
+for `Bash', Version 2.0.
+
+Copyright (C) 1991, 1993, 1996 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+
+
+File: bashref.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+Bash Features
+*************
+
+ This text is a brief description of the features that are present in
+the Bash shell.
+
+ This is Edition 2.0, last updated 25 November 1996, of `The GNU Bash
+Reference Manual', for `Bash', Version 2.0.
+
+ Copyright (C) 1991, 1993, 1996 Free Software Foundation, Inc.
+
+ Bash contains features that appear in other popular shells, and some
+features that only appear in Bash. Some of the shells that Bash has
+borrowed concepts from are the Bourne Shell (`sh'), the Korn Shell
+(`ksh'), and the C-shell (`csh' and its successor, `tcsh'). The
+following menu breaks the features up into categories based upon which
+one of these other shells inspired the feature.
+
+ This manual is meant as a brief introduction to features found in
+Bash. The Bash manual page should be used as the definitive reference
+on shell behavior.
+
+* Menu:
+
+* Introduction:: An introduction to the shell.
+
+* Definitions:: Some definitions used in the rest of this
+ manual.
+
+* Basic Shell Features:: The shell "building blocks".
+
+* Bourne Shell Features:: Features similar to those found in the
+ Bourne shell.
+
+* Csh Features:: Features originally found in the
+ Berkeley C-Shell.
+
+* Korn Shell Features:: Features originally found in the Korn
+ Shell.
+
+* Bash Features:: Features found only in Bash.
+
+* Job Control:: A chapter describing what job control is
+ and how Bash allows you to use it.
+
+* Using History Interactively:: Chapter dealing with history expansion
+ rules.
+
+* Command Line Editing:: Chapter describing the command line
+ editing features.
+
+* Installing Bash:: How to build and install Bash on your system.
+
+* Reporting Bugs:: How to report bugs in Bash.
+
+* Builtin Index:: Index of Bash builtin commands.
+
+* Reserved Word Index:: Index of Bash reserved words.
+
+* Variable Index:: Quick reference helps you find the
+ variable you want.
+
+* Function Index:: Index of bindable Readline functions.
+
+* Concept Index:: General index for concepts described in
+ this manual.
+
+
+File: bashref.info, Node: Introduction, Next: Definitions, Prev: Top, Up: Top
+
+Introduction
+************
+
+* Menu:
+
+* What is Bash?:: A short description of Bash.
+
+* What is a shell?:: A brief introduction to shells.
+
+
+File: bashref.info, Node: What is Bash?, Next: What is a shell?, Up: Introduction
+
+What is Bash?
+=============
+
+ Bash is the shell, or command language interpreter, that will appear
+in the GNU operating system. The name is an acronym for the
+`Bourne-Again SHell', a pun on Steve Bourne, the author of the direct
+ancestor of the current Unix shell `/bin/sh', which appeared in the
+Seventh Edition Bell Labs Research version of Unix.
+
+ Bash is an `sh'-compatible shell that incorporates useful features
+from the Korn shell `ksh' and the C shell `csh'. It is ultimately
+intended to be a conformant implementation of the IEEE POSIX Shell and
+Tools specification (IEEE Working Group 1003.2). It offers functional
+improvements over `sh' for both interactive and programming use.
+
+ While the GNU operating system will include a version of `csh', Bash
+will be the default shell. Like other GNU software, Bash is quite
+portable. It currently runs on nearly every version of Unix and a few
+other operating systems - independently-supported ports exist for OS/2
+and Windows NT.
+
+
+File: bashref.info, Node: What is a shell?, Prev: What is Bash?, Up: Introduction
+
+What is a shell?
+================
+
+ At its base, a shell is simply a macro processor that executes
+commands. A Unix shell is both a command interpreter, which provides
+the user interface to the rich set of Unix utilities, and a programming
+language, allowing these utilitites to be combined. The shell reads
+commands either from a terminal or a file. Files containing commands
+can be created, and become commands themselves. These new commands
+have the same status as system commands in directories like `/bin',
+allowing users or groups to establish custom environments.
+
+ A shell allows execution of Unix commands, both synchronously and
+asynchronously. The "redirection" constructs permit fine-grained
+control of the input and output of those commands, and the shell allows
+control over the contents of their environment. Unix shells also
+provide a small set of built-in commands ("builtins") implementing
+functionality impossible (e.g., `cd', `break', `continue', and `exec'),
+or inconvenient (`history', `getopts', `kill', or `pwd', for example)
+to obtain via separate utilities. Shells may be used interactively or
+non-interactively: they accept input typed from the keyboard or from a
+file. All of the shell builtins are described in subsequent sections.
+
+ While executing commands is essential, most of the power (and
+complexity) of shells is due to their embedded programming languages.
+Like any high-level language, the shell provides variables, flow
+control constructs, quoting, and functions.
+
+ Shells have begun offering features geared specifically for
+interactive use rather than to augment the programming language. These
+interactive features include job control, command line editing, history
+and aliases. Each of these features is described in this manual.
+
+
+File: bashref.info, Node: Definitions, Next: Basic Shell Features, Prev: Introduction, Up: Top
+
+Definitions
+***********
+
+ These definitions are used throughout the remainder of this manual.
+
+`POSIX'
+ A family of open system standards based on Unix. Bash is
+ concerned with POSIX 1003.2, the Shell and Tools Standard.
+
+`blank'
+ A space or tab character.
+
+`builtin'
+ A command that is implemented internally by the shell itself,
+ rather than by an executable program somewhere in the file system.
+
+`control operator'
+ A `word' that performs a control function. It is a `newline' or
+ one of the following: `||', `&&', `&', `;', `;;', `|', `(', or `)'.
+
+`exit status'
+ The value returned by a command to its caller.
+
+`field'
+ A unit of text that is the result of one of the shell expansions.
+ After expansion, when executing a command, the resulting fields
+ are used as the command name and arguments.
+
+`filename'
+ A string of characters used to identify a file.
+
+`job'
+ A set of processes comprising a pipeline, and any processes
+ descended from it, that are all in the same process group.
+
+`job control'
+ A mechanism by which users can selectively start and stop execution
+ of processes.
+
+`metacharacter'
+ A character that, when unquoted, separates words. A metacharacter
+ is a `blank' or one of the following characters: `|', `&', `;',
+ `(', `)', `<', or `>'.
+
+`name'
+ A `word' consisting solely of letters, numbers, and underscores,
+ and beginning with a letter or underscore. `Name's are used as
+ shell variable and function names. Also referred to as an
+ `identifier'.
+
+`operator'
+ A `control operator' or a `redirection operator'. *Note
+ Redirections::, for a list of redirection operators.
+
+`process group'
+ A collection of related processes each having the same process
+ group ID.
+
+`process group ID'
+ A unique identifer that represents a `process group' during its
+ lifetime.
+
+`reserved word'
+ A `word' that has a special meaning to the shell. Most reserved
+ words introduce shell flow control constructs, such as `for' and
+ `while'.
+
+`return status'
+ A synonym for `exit status'.
+
+`signal'
+ A mechanism by which a process may be notified by the kernal of an
+ event occurring in the system.
+
+`special builtin'
+ A shell builtin command that has been classified as special by the
+ POSIX.2 standard.
+
+`token'
+ A sequence of characters considered a single unit by the shell.
+ It is either a `word' or an `operator'.
+
+`word'
+ A `token' that is not an `operator'.
+
+
+File: bashref.info, Node: Basic Shell Features, Next: Bourne Shell Features, Prev: Definitions, Up: Top
+
+Basic Shell Features
+********************
+
+ Bash is an acronym for `Bourne-Again SHell'. The Bourne shell is
+the traditional Unix shell originally written by Stephen Bourne. All
+of the Bourne shell builtin commands are available in Bash, and the
+rules for evaluation and quoting are taken from the POSIX 1003.2
+specification for the `standard' Unix shell.
+
+ This chapter briefly summarizes the shell's "building blocks":
+commands, control structures, shell functions, shell parameters, shell
+expansions, redirections, which are a way to direct input and output
+from and to named files, and how the shell executes commands.
+
+* Menu:
+
+* Shell Syntax:: What your input means to the shell.
+* Simple Commands:: The most common type of command.
+* Pipelines:: Connecting the input and output of several
+ commands.
+* Lists:: How to execute commands sequentially.
+* Looping Constructs:: Shell commands for iterative action.
+* Conditional Constructs:: Shell commands for conditional execution.
+* Command Grouping:: Ways to group commands.
+* Shell Functions:: Grouping commands by name.
+* Shell Parameters:: Special shell variables.
+* Shell Expansions:: How Bash expands variables and the various
+ expansions available.
+* Redirections:: A way to control where input and output go.
+* Executing Commands:: What happens when you run a command.
+* Shell Scripts:: Executing files of shell commands.
+
+
+File: bashref.info, Node: Shell Syntax, Next: Simple Commands, Up: Basic Shell Features
+
+Shell Syntax
+============
+
+* Menu:
+
+* Shell Operation:: The basic operation of the shell.
+
+* Quoting:: How to remove the special meaning from characters.
+
+* Comments:: How to specify comments.
+
+
+File: bashref.info, Node: Shell Operation, Next: Quoting, Up: Shell Syntax
+
+Shell Operation
+---------------
+
+ The following is a brief description of the shell's operation when it
+reads and executes a command. Basically, the shell does the following:
+
+ 1. Reads its input from a file (*note Shell Scripts::.), from a string
+ supplied as an argument to the `-c' invocation option (*note
+ Invoking Bash::.), or from the user's terminal.
+
+ 2. Breaks the input into words and operators, obeying the quoting
+ rules described in *Note Quoting::. Tokens are separated by
+ `metacharacters'. Alias expansion is performed by this step
+ (*note Aliases::.).
+
+ 3. Parses the tokens into simple and compound commands.
+
+ 4. Performs the various shell expansions (*note Shell Expansions::.),
+ breaking the expanded tokens into lists of filenames (*note
+ Filename Expansion::.) and commands and arguments.
+
+ 5. Performs any necessary redirections (*note Redirections::.) and
+ removes the redirection operators and their operands from the
+ argument list.
+
+ 6. Executes the command (*note Executing Commands::.).
+
+ 7. Optionally waits for the command to complete and collects its exit
+ status.
+
+
+
+File: bashref.info, Node: Quoting, Next: Comments, Prev: Shell Operation, Up: Shell Syntax
+
+Quoting
+-------
+
+* Menu:
+
+* Escape Character:: How to remove the special meaning from a single
+ character.
+* Single Quotes:: How to inhibit all interpretation of a sequence
+ of characters.
+* Double Quotes:: How to suppress most of the interpretation of a
+ sequence of characters.
+* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
+
+* Locale Translation:: How to translate strings into different languages.
+
+ Quoting is used to remove the special meaning of certain characters
+or words to the shell. Quoting can be used to disable special
+treatment for special characters, to prevent reserved words from being
+recognized as such, and to prevent parameter expansion.
+
+ Each of the shell `metacharacters' (*note Definitions::.) has
+special meaning to the shell and must be quoted if they are to
+represent themselves. There are three quoting mechanisms: the ESCAPE
+CHARACTER, single quotes, and double quotes.
+
+
+File: bashref.info, Node: Escape Character, Next: Single Quotes, Up: Quoting
+
+Escape Character
+................
+
+ A non-quoted backslash `\' is the Bash escape character. It
+preserves the literal value of the next character that follows, with
+the exception of `newline'. If a `\newline' pair appears, and the
+backslash is not quoted, the `\newline' is treated as a line
+continuation (that is, it is effectively ignored).
+
+
+File: bashref.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Character, Up: Quoting
+
+Single Quotes
+.............
+
+ Enclosing characters in single quotes preserves the literal value of
+each character within the quotes. A single quote may not occur between
+single quotes, even when preceded by a backslash.
+
+
+File: bashref.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quotes, Up: Quoting
+
+Double Quotes
+.............
+
+ Enclosing characters in double quotes preserves the literal value of
+all characters within the quotes, with the exception of `$', ``', and
+`\'. The characters `$' and ``' retain their special meaning within
+double quotes. The backslash retains its special meaning only when
+followed by one of the following characters: `$', ``', `"', `\', or
+`newline'. A double quote may be quoted within double quotes by
+preceding it with a backslash.
+
+ The special parameters `*' and `@' have special meaning when in
+double quotes (*note Shell Parameter Expansion::.).
+
+
+File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double Quotes, Up: Quoting
+
+ANSI-C Quoting
+..............
+
+ Words of the form `$'STRING'' are treated specially. The word
+expands to STRING, with backslash-escaped characters replaced as
+specifed by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+
+`\a'
+ alert (bell)
+
+`\b'
+ backspace
+
+`\e'
+ an escape character (not ANSI C)
+
+`\f'
+ form feed
+
+`\n'
+ newline
+
+`\r'
+ carriage return
+
+`\t'
+ horizontal tab
+
+`\v'
+ vertical tab
+
+`\\'
+ backslash
+
+`\NNN'
+ the character whose `ASCII' code is NNN in octal
+
+The result is single-quoted, as if the dollar sign had not been present.
+
+
+File: bashref.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting
+
+Locale-Specific Translation
+...........................
+
+ A double-quoted string preceded by a dollar sign (`$') will cause
+the string to be translated according to the current locale. If the
+current locale is `C' or `POSIX', the dollar sign is ignored. If the
+string is translated and replaced, the replacement is double-quoted.
+
+
+File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax
+
+Comments
+--------
+
+ In a non-interactive shell, or an interactive shell in which the
+`interactive_comments' option to the `shopt' builtin is enabled (*note
+Bash Builtins::.), a word beginning with `#' causes that word and all
+remaining characters on that line to be ignored. An interactive shell
+without the `interactive_comments' option enabled does not allow
+comments. The `interactive_comments' option is on by default in
+interactive shells.
+
+
+File: bashref.info, Node: Simple Commands, Next: Pipelines, Prev: Shell Syntax, Up: Basic Shell Features
+
+Simple Commands
+===============
+
+ A simple command is the kind of command you'll encounter most often.
+It's just a sequence of words separated by `blank's, terminated by one
+of the shell control operators (*note Definitions::.). The first word
+generally specifies a command to be executed.
+
+ The return status (*note Exit Status::.) of a simple command is its
+exit status as provided by the POSIX.1 `waitpid' function, or 128+N if
+the command was terminated by signal N.
+
+
+File: bashref.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: Basic Shell Features
+
+Pipelines
+=========
+
+ A `pipeline' is a sequence of simple commands separated by `|'.
+
+ The format for a pipeline is
+ [`time' [`-p']] [`!'] COMMAND1 [`|' COMMAND2 ...]
+
+The output of each command in the pipeline is connected to the input of
+the next command. That is, each command reads the previous command's
+output.
+
+ The reserved word `time' causes timing statistics to be printed for
+the pipeline once it finishes. The `-p' option changes the output
+format to that specified by POSIX. The `TIMEFORMAT' variable may be
+set to a format string that specifies how the timing information should
+be displayed. *Note Bash Variables::, for a description of the
+available formats.
+
+ Each command in a pipeline is executed in its own subshell. The exit
+status of a pipeline is the exit status of the last command in the
+pipeline. If the reserved word `!' precedes the pipeline, the exit
+status is the logical NOT of the exit status of the last command.
+
+
+File: bashref.info, Node: Lists, Next: Looping Constructs, Prev: Pipelines, Up: Basic Shell Features
+
+Lists of Commands
+=================
+
+ A `list' is a sequence of one or more pipelines separated by one of
+the operators `;', `&', `&&', or `||', and optionally terminated by one
+of `;', `&', or a `newline'.
+
+ Of these list operators, `&&' and `||' have equal precedence,
+followed by `;' and `&', which have equal precedence.
+
+ If a command is terminated by the control operator `&', the shell
+executes the command in the BACKGROUND in a subshell. The shell does
+not wait for the command to finish, and the return status is 0 (true).
+Commands separated by a `;' are executed sequentially; the shell waits
+for each command to terminate in turn. The return status is the exit
+status of the last command executed.
+
+ The control operators `&&' and `||' denote AND lists and OR lists,
+respectively. An AND list has the form
+ COMMAND && COMMAND2
+
+COMMAND2 is executed if, and only if, COMMAND returns an exit status of
+zero.
+
+ An OR list has the form
+ COMMAND || COMMAND2
+
+COMMAND2 is executed if and only if COMMAND returns a non-zero exit
+status.
+
+ The return status of AND and OR lists is the exit status of the last
+command executed in the list.
+
+
+File: bashref.info, Node: Looping Constructs, Next: Conditional Constructs, Prev: Lists, Up: Basic Shell Features
+
+Looping Constructs
+==================
+
+ Note that wherever you see a `;' in the description of a command's
+syntax, it may be replaced indiscriminately with one or more newlines.
+
+ Bash supports the following looping constructs.
+
+`until'
+ The syntax of the `until' command is:
+ until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
+ Execute CONSEQUENT-COMMANDS as long as the final command in
+ TEST-COMMANDS has an exit status which is not zero.
+
+`while'
+ The syntax of the `while' command is:
+ while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
+
+ Execute CONSEQUENT-COMMANDS as long as the final command in
+ TEST-COMMANDS has an exit status of zero.
+
+`for'
+ The syntax of the `for' command is:
+
+ for NAME [in WORDS ...]; do COMMANDS; done
+ Execute COMMANDS for each member in WORDS, with NAME bound to the
+ current member. If `in WORDS' is not present, `in "$@"' is
+ assumed.
+
+ The `break' and `continue' builtins (*note Bourne Shell Builtins::.)
+may be used to control loop execution.
+
+
+File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Prev: Looping Constructs, Up: Basic Shell Features
+
+Conditional Constructs
+======================
+
+`if'
+ The syntax of the `if' command is:
+
+ if TEST-COMMANDS; then
+ CONSEQUENT-COMMANDS;
+ [elif MORE-TEST-COMMANDS; then
+ MORE-CONSEQUENTS;]
+ [else ALTERNATE-CONSEQUENTS;]
+ fi
+
+ Execute CONSEQUENT-COMMANDS only if the final command in
+ TEST-COMMANDS has an exit status of zero. Otherwise, each `elif'
+ list is executed in turn, and if its exit status is zero, the
+ corresponding MORE-CONSEQUENTS is executed and the command
+ completes. If `else ALTERNATE-CONSEQUENTS' is present, and the
+ final command in the final `if' or `elif' clause has a non-zero
+ exit status, then execute ALTERNATE-CONSEQUENTS.
+
+`case'
+ The syntax of the `case' command is:
+
+ `case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac'
+
+ Selectively execute COMMANDS based upon WORD matching PATTERN.
+ The `|' is used to separate multiple patterns.
+
+ Here is an example using `case' in a script that could be used to
+ describe one interesting feature of an animal:
+
+ echo -n "Enter the name of an animal: "
+ read ANIMAL
+ echo -n "The $ANIMAL has "
+ case $ANIMAL in
+ horse | dog | cat) echo -n "four";;
+ man | kangaroo ) echo -n "two";;
+ *) echo -n "an unknown number of";;
+ esac
+ echo " legs."
+
+`((...))'
+ (( EXPRESSION ))
+
+ The EXPRESSION is evaluated according to the rules described below
+ ((*note Arithmetic Evaluation::.). If the value of the expression
+ is non-zero, the return status is 0; otherwise the return status
+ is 1. This is exactly equivalent to
+ let "EXPRESSION"
+
+ The `select' construct, which allows users to choose from a list of
+items presented as a menu, is also available. *Note Korn Shell
+Constructs::, for a full description of `select'.
+
+
+File: bashref.info, Node: Command Grouping, Next: Shell Functions, Prev: Conditional Constructs, Up: Basic Shell Features
+
+Grouping Commands
+=================
+
+ Bash provides two ways to group a list of commands to be executed as
+a unit. When commands are grouped, redirections may be applied to the
+entire command list. For example, the output of all the commands in
+the list may be redirected to a single stream.
+
+`()'
+ ( LIST )
+
+ Placing a list of commands between parentheses causes a subshell
+ to be created, and each of the commands to be executed in that
+ subshell. Since the LIST is executed in a subshell, variable
+ assignments do not remain in effect after the subshell completes.
+
+`{}'
+ { LIST; }
+
+ Placing a list of commands between curly braces causes the list to
+ be executed in the current shell context. No subshell is created.
+ The semicolon following LIST is required.
+
+ In addition to the creation of a subshell, there is a subtle
+difference between these two constructs due to historical reasons. The
+braces are `reserved words', so they must be separated from the LIST by
+`blank's. The parentheses are `operators', and are recognized as
+separate tokens by the shell even if they are not separated from `list'
+by whitespace.
+
+ The exit status of both of these constructs is the exit status of
+LIST.
+
+
+File: bashref.info, Node: Shell Functions, Next: Shell Parameters, Prev: Command Grouping, Up: Basic Shell Features
+
+Shell Functions
+===============
+
+ Shell functions are a way to group commands for later execution
+using a single name for the group. They are executed just like a
+"regular" command. Shell functions are executed in the current shell
+context; no new process is created to interpret them.
+
+ Functions are declared using this syntax:
+ [ `function' ] NAME () { COMMAND-LIST; }
+
+ This defines a shell function named NAME. The reserved word
+`function' is optional. The BODY of the function is the COMMAND-LIST
+between { and }. This list is executed whenever NAME is specified as
+the name of a command. The exit status of a function is the exit
+status of the last command executed in the body.
+
+ When a function is executed, the arguments to the function become
+the positional parameters during its execution (*note Positional
+Parameters::.). The special parameter `#' that gives the number of
+positional parameters is updated to reflect the change. Positional
+parameter `0' is unchanged.
+
+ If the builtin command `return' is executed in a function, the
+function completes and execution resumes with the next command after
+the function call. When a function completes, the values of the
+positional parameters and the special parameter `#' are restored to the
+values they had prior to function execution. If a numeric argument is
+given to `return', that is the function return status.
+
+ Variables local to the function may be declared with the `local'
+builtin. These variables are visible only to the function and the
+commands it invokes.
+
+ Functions may be recursive. No limit is placed on the number of
+recursive calls.
+
+
+File: bashref.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell Functions, Up: Basic Shell Features
+
+Shell Parameters
+================
+
+* Menu:
+
+* Positional Parameters:: The shell's command-line arguments.
+* Special Parameters:: Parameters with special meanings.
+
+ A PARAMETER is an entity that stores values. It can be a `name', a
+number, or one of the special characters listed below. For the shell's
+purposes, a VARIABLE is a parameter denoted by a `name'.
+
+ A parameter is set if it has been assigned a value. The null string
+is a valid value. Once a variable is set, it may be unset only by using
+the `unset' builtin command.
+
+ A variable may be assigned to by a statement of the form
+ NAME=[VALUE]
+
+If VALUE is not given, the variable is assigned the null string. All
+VALUEs undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal (detailed
+below). If the variable has its `-i' attribute set (see the
+description of the `declare' builtin in *Note Bash Builtins::), then
+VALUE is subject to arithmetic expansion even if the `$((...))' syntax
+does not appear (*note Arithmetic Expansion::.). Word splitting is not
+performed, with the exception of `"$@"' as explained below. Filename
+expansion is not performed.
+
+
+File: bashref.info, Node: Positional Parameters, Next: Special Parameters, Up: Shell Parameters
+
+Positional Parameters
+---------------------
+
+ A POSITIONAL PARAMETER is a parameter denoted by one or more digits,
+other than the single digit `0'. Positional parameters are assigned
+from the shell's arguments when it is invoked, and may be reassigned
+using the `set' builtin command. Positional parameters may not be
+assigned to with assignment statements. The positional parameters are
+temporarily replaced when a shell function is executed (*note Shell
+Functions::.).
+
+ When a positional parameter consisting of more than a single digit
+is expanded, it must be enclosed in braces.
+
+
+File: bashref.info, Node: Special Parameters, Prev: Positional Parameters, Up: Shell Parameters
+
+Special Parameters
+------------------
+
+ The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+
+`*'
+ Expands to the positional parameters, starting from one. When the
+ expansion occurs within double quotes, it expands to a single word
+ with the value of each parameter separated by the first character
+ of the `IFS' special variable. That is, `"$*"' is equivalent to
+ `"$1C$2C..."', where C is the first character of the value of the
+ `IFS' variable. If `IFS' is null or unset, the parameters are
+ separated by spaces.
+
+`@'
+ Expands to the positional parameters, starting from one. When the
+ expansion occurs within double quotes, each parameter expands as a
+ separate word. That is, `"$@"' is equivalent to `"$1" "$2" ...'.
+ When there are no positional parameters, `"$@"' and `$@' expand to
+ nothing (i.e., they are removed).
+
+`#'
+ Expands to the number of positional parameters in decimal.
+
+`?'
+ Expands to the exit status of the most recently executed foreground
+ pipeline.
+
+`-'
+ Expands to the current option flags as specified upon invocation,
+ by the `set' builtin command, or those set by the shell itself
+ (such as the `-i' option).
+
+`$'
+ Expands to the process ID of the shell. In a `()' subshell, it
+ expands to the process ID of the current shell, not the subshell.
+
+`!'
+ Expands to the process ID of the most recently executed background
+ (asynchronous) command.
+
+`0'
+ Expands to the name of the shell or shell script. This is set at
+ shell initialization. If Bash is invoked with a file of commands,
+ `$0' is set to the name of that file. If Bash is started with the
+ `-c' option, then `$0' is set to the first argument after the
+ string to be executed, if one is present. Otherwise, it is set to
+ the filename used to invoke Bash, as given by argument zero.
+
+`_'
+ At shell startup, set to the absolute filename of the shell or
+ shell script being executed as passed in the argument list.
+ Subsequently, expands to the last argument to the previous command,
+ after expansion. Also set to the full filename of each command
+ executed and placed in the environment exported to that command.
+ When checking mail, this parameter holds the name of the mail file.
+
+
+File: bashref.info, Node: Shell Expansions, Next: Redirections, Prev: Shell Parameters, Up: Basic Shell Features
+
+Shell Expansions
+================
+
+ Expansion is performed on the command line after it has been split
+into `token's. There are seven kinds of expansion performed:
+ * brace expansion
+
+ * tilde expansion
+
+ * parameter and variable expansion
+
+ * command substitution
+
+ * arithmetic expansion
+
+ * word splitting
+
+ * filename expansion
+
+* Menu:
+
+* Shell Parameter Expansion:: How Bash expands variables to their values.
+* Command Substitution:: Using the output of a command as an argument.
+* Process Substitution:: A way to write and read to and from a
+ command.
+* Word Splitting:: How the results of expansion are split into separate
+ arguments.
+* Filename Expansion:: A shorthand for specifying filenames matching patterns.
+* Quote Removal:: How and when quote characters are removed from
+ words.
+
+ Brace expansion, tilde expansion, and arithmetic expansion are
+described in other sections. For brace expansion, see *Note Brace
+Expansion::; for tilde expansion, see *Note Tilde Expansion::; and for
+arithmetic expansion, see *Note Arithmetic Expansion::.
+
+ The order of expansions is: brace expansion, tilde expansion,
+parameter, variable, and arithmetic expansion and command substitution
+(done in a left-to-right fashion), word splitting, and filename
+expansion.
+
+ On systems that can support it, there is an additional expansion
+available: PROCESS SUBSTITUTION. This is performed at the same time as
+parameter, variable, and arithemtic expansion and command substitution.
+
+ Only brace expansion, word splitting, and filename expansion can
+change the number of words of the expansion; other expansions expand a
+single word to a single word. The only exceptions to this are the
+expansions of `"$@"' (*note Special Parameters::.) and `"${[@]}"'
+(*note Arrays::.).
+
+ After all expansions, `quote removal' (*note Quote Removal::.) is
+performed.
+
+
+File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitution, Up: Shell Expansions
+
+Shell Parameter Expansion
+-------------------------
+
+ The `$' character introduces parameter expansion, command
+substitution, or arithmetic expansion. The parameter name or symbol to
+be expanded may be enclosed in braces, which are optional but serve to
+protect the variable to be expanded from characters immediately
+following it which could be interpreted as part of the name.
+
+ The basic form of parameter expansion is ${PARAMETER}. The value of
+PARAMETER is substituted. The braces are required when PARAMETER is a
+positional parameter with more than one digit, or when PARAMETER is
+followed by a character that is not to be interpreted as part of its
+name.
+
+ If the first character of PARAMETER is an exclamation point, a level
+of variable indirection is introduced. Bash uses the value of the
+variable formed from the rest of PARAMETER as the name of the variable;
+this variable is then expanded and that value used in the rest of the
+substitution, rather than the value of PARAMETER itself. This is known
+as `indirect expansion'.
+
+ In each of the cases below, WORD is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+When not performing substring expansion, Bash tests for a parameter
+that is unset or null; omitting the colon results in a test only for a
+parameter that is unset.
+
+`${PARAMETER:-WORD}'
+ If PARAMETER is unset or null, the expansion of WORD is
+ substituted. Otherwise, the value of PARAMETER is substituted.
+
+`${PARAMETER:=WORD}'
+ If PARAMETER is unset or null, the expansion of WORD is assigned
+ to PARAMETER. The value of PARAMETER is then substituted.
+ Positional parameters and special parameters may not be assigned
+ to in this way.
+
+`${PARAMETER:?WORD}'
+ If PARAMETER is null or unset, the expansion of WORD (or a message
+ to that effect if WORD is not present) is written to the standard
+ error and the shell, if it is not interactive, exits. Otherwise,
+ the value of PARAMETER is substituted.
+
+`${PARAMETER:+WORD}'
+ If PARAMETER is null or unset, nothing is substituted, otherwise
+ the expansion of WORD is substituted.
+
+`${PARAMETER:OFFSET}'
+`${PARAMETER:OFFSET:LENGTH}'
+ Expands to up to LENGTH characters of PARAMETER, starting at
+ OFFSET. If LENGTH is omitted, expands to the substring of
+ PARAMETER, starting at the character specified by OFFSET. LENGTH
+ and OFFSET are arithmetic expressions (*note Arithmetic
+ Evaluation::.). This is referred to as Substring Expansion.
+
+ LENGTH must evaluate to a number greater than or equal to zero.
+ If OFFSET evaluates to a number less than zero, the value is used
+ as an offset from the end of the value of PARAMETER. If PARAMETER
+ is `@', the result is LENGTH positional parameters beginning at
+ OFFSET. If PARAMETER is an array name indexed by `@' or `*', the
+ result is the LENGTH members of the array beginning with
+ ${PARAMETER[OFFSET]}. Substring indexing is zero-based unless the
+ positional parameters are used, in which case the indexing starts
+ at 1.
+
+`${#PARAMETER}'
+ The length in characters of the value of PARAMETER is substituted.
+ If PARAMETER is `*' or `@', the length substituted is the number
+ of positional parameters. If PARAMETER is an array name
+ subscripted by `*' or `@', the length substituted is the number of
+ elements in the array.
+
+`${PARAMETER#WORD}'
+`${PARAMETER##WORD}'
+ The WORD is expanded to produce a pattern just as in filename
+ expansion (*note Filename Expansion::.). If the pattern matches
+ the beginning of the value of PARAMETER, then the expansion is the
+ value of PARAMETER with the shortest matching pattern (the `#'
+ case) or the longest matching pattern (the `##' case) deleted. If
+ PARAMETER is `@' or `*', the pattern removal operation is applied
+ to each positional parameter in turn, and the expansion is the
+ resultant list. If PARAMETER is an array variable subscripted with
+ `@' or `*', the pattern removal operation is applied to each
+ member of the array in turn, and the expansion is the resultant
+ list.
+
+`${PARAMETER%WORD}'
+`${PARAMETER%%WORD}'
+ The WORD is expanded to produce a pattern just as in filename
+ expansion. If the pattern matches a trailing portion of the value
+ of PARAMETER, then the expansion is the value of PARAMETER with
+ the shortest matching pattern (the `%' case) or the longest
+ matching pattern (the `%%' case) deleted. If PARAMETER is `@' or
+ `*', the pattern removal operation is applied to each positional
+ parameter in turn, and the expansion is the resultant list. If
+ PARAMETER is an array variable subscripted with `@' or `*', the
+ pattern removal operation is applied to each member of the array
+ in turn, and the expansion is the resultant list.
+
+`${PARAMETER/PATTERN/STRING}'
+`${PARAMETER//PATTERN/STRING}'
+ The PATTERN is expanded to produce a pattern just as in filename
+ expansion. PARAMETER is expanded and the longest match of PATTERN
+ against its value is replaced with STRING. In the first form,
+ only the first match is replaced. The second form causes all
+ matches of PATTERN to be replaced with STRING. If PATTERN begins
+ with `#', it must match at the beginning of STRING. If PATTERN
+ begins with `%', it must match at the end of STRING. If STRING is
+ null, matches of PATTERN are deleted and the `/' following PATTERN
+ may be omitted. If PARAMETER is `@' or `*', the substitution
+ operation is applied to each positional parameter in turn, and the
+ expansion is the resultant list. If PARAMETER is an array
+ variable subscripted with `@' or `*', the substitution operation
+ is applied to each member of the array in turn, and the expansion
+ is the resultant list.
+
+
+File: bashref.info, Node: Command Substitution, Next: Process Substitution, Prev: Shell Parameter Expansion, Up: Shell Expansions
+
+Command Substitution
+--------------------
+
+ Command substitution allows the output of a command to replace the
+command name. There are two forms:
+ $(COMMAND)
+
+or
+ `COMMAND`
+
+Bash performs the expansion by executing COMMAND and replacing the
+command substitution with the standard output of the command, with any
+trailing newlines deleted.
+
+ When the old-style backquote form of substitution is used, backslash
+retains its literal meaning except when followed by `$', ``', or `\'.
+When using the `$(COMMAND)' form, all characters between the
+parentheses make up the command; none are treated specially.
+
+ Command substitutions may be nested. To nest when using the old
+form, escape the inner backquotes with backslashes.
+
+ If the substitution appears within double quotes, word splitting and
+filename expansion are not performed on the results.
+
+
+File: bashref.info, Node: Process Substitution, Next: Word Splitting, Prev: Command Substitution, Up: Shell Expansions
+
+Process Substitution
+--------------------
+
+ Process substitution is supported on systems that support named
+pipes (FIFOs) or the `/dev/fd' method of naming open files. It takes
+the form of
+ <(LIST)
+
+or
+ >(LIST)
+
+The process LIST is run with its input or output connected to a FIFO or
+some file in `/dev/fd'. The name of this file is passed as an argument
+to the current command as the result of the expansion. If the
+`>(LIST)' form is used, writing to the file will provide input for
+LIST. If the `<(LIST)' form is used, the file passed as an argument
+should be read to obtain the output of LIST.
+
+ On systems that support it, process substitution is performed
+simultaneously with parameter and variable expansion, command
+substitution, and arithmetic expansion.
+
+
+File: bashref.info, Node: Word Splitting, Next: Filename Expansion, Prev: Process Substitution, Up: Shell Expansions
+
+Word Splitting
+--------------
+
+ The shell scans the results of parameter expansion, command
+substitution, and arithmetic expansion that did not occur within double
+quotes for word splitting.
+
+ The shell treats each character of `$IFS' as a delimiter, and splits
+the results of the other expansions into words on these characters. If
+`IFS' is unset, or its value is exactly `<space><tab><newline>', the
+default, then any sequence of `IFS' characters serves to delimit words.
+If `IFS' has a value other than the default, then sequences of the
+whitespace characters `space' and `tab' are ignored at the beginning
+and end of the word, as long as the whitespace character is in the
+value of `IFS' (an `IFS' whitespace character). Any character in `IFS'
+that is not `IFS' whitespace, along with any adjacent `IFS' whitespace
+characters, delimits a field. A sequence of `IFS' whitespace
+characters is also treated as a delimiter. If the value of `IFS' is
+null, no word splitting occurs.
+
+ Explicit null arguments (`""' or `''') are retained. Unquoted
+implicit null arguments, resulting from the expansion of PARAMETERs
+that have no values, are removed. If a parameter with no value is
+expanded within double quotes, a null argument results and is retained.
+
+ Note that if no expansion occurs, no splitting is performed.
+
+
+File: bashref.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word Splitting, Up: Shell Expansions
+
+Filename Expansion
+------------------
+
+ After word splitting, unless the `-f' option has been set (*note The
+Set Builtin::.), Bash scans each word for the characters `*', `?', and
+`['. If one of these characters appears, then the word is regarded as
+a PATTERN, and replaced with an alphabetically sorted list of file
+names matching the pattern. If no matching file names are found, and
+the shell option `nullglob' is disabled, the word is left unchanged. If
+the option is set, and no matches are found, the word is removed. When
+a pattern is used for filename generation, the character `.' at the
+start of a filename or immediately following a slash must be matched
+explicitly, unless the shell option `dotglob' is set. The slash
+character must always be matched explicitly. In other cases, the `.'
+character is not treated specially. See the description of `shopt' in
+*Note Bash Builtins::, for a description of the `nullglob' and
+`dotglob' options.
+
+ The `GLOBIGNORE' shell variable may be used to restrict the set of
+filenames matching a PATTERN. If `GLOBIGNORE' is set, each matching
+filename that also matches one of the patterns in `GLOBIGNORE' is
+removed from the list of matches. The filenames `.' and `..' are
+always ignored, even when `GLOBIGNORE'. is set. However, setting
+`GLOBIGNORE' has the effect of enabling the `dotglob' shell option, so
+all other filenames beginning with a `.' will match. To get the old
+behavior of ignoring filenames beginning with a `.', make `.*' one of
+the patterns in `GLOBIGNORE'. The `dotglob' option is disabled when
+`GLOBIGNORE' is unset.
+
+ The special pattern characters have the following meanings:
+`*'
+ Matches any string, including the null string.
+
+`?'
+ Matches any single character.
+
+`[...]'
+ Matches any one of the enclosed characters. A pair of characters
+ separated by a minus sign denotes a RANGE; any character lexically
+ between those two characters, inclusive, is matched. If the first
+ character following the `[' is a `!' or a `^' then any character
+ not enclosed is matched. A `-' may be matched by including it as
+ the first or last character in the set. A `]' may be matched by
+ including it as the first character in the set.
+
+
+File: bashref.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell Expansions
+
+Quote Removal
+-------------
+
+ After the preceding expansions, all unquoted occurrences of the
+characters `\', `'', and `"' that did not result from one of the above
+expansions are removed.
+
+
+File: bashref.info, Node: Redirections, Next: Executing Commands, Prev: Shell Expansions, Up: Basic Shell Features
+
+Redirections
+============
+
+ Before a command is executed, its input and output may be REDIRECTED
+using a special notation interpreted by the shell. Redirection may
+also be used to open and close files for the current shell execution
+environment. The following redirection operators may precede or appear
+anywhere within a simple command or may follow a command. Redirections
+are processed in the order they appear, from left to right.
+
+ In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is `<',
+the redirection refers to the standard input (file descriptor 0). If
+the first character of the redirection operator is `>', the redirection
+refers to the standard output (file descriptor 1).
+
+ The word that follows the redirection operator in the following
+descriptions is subjected to brace expansion, tilde expansion,
+parameter expansion, command substitution, arithmetic expansion, quote
+removal, and filename expansion. If it expands to more than one word,
+Bash reports an error.
+
+ Note that the order of redirections is significant. For example,
+the command
+ ls > DIRLIST 2>&1
+
+directs both standard output and standard error to the file DIRLIST,
+while the command
+ ls 2>&1 > DIRLIST
+
+directs only the standard output to file DIRLIST, because the standard
+error was duplicated as standard output before the standard output was
+redirected to DIRLIST.
+
+Redirecting Input
+-----------------
+
+ Redirection of input causes the file whose name results from the
+expansion of WORD to be opened for reading on file descriptor `n', or
+the standard input (file descriptor 0) if `n' is not specified.
+
+ The general format for redirecting input is:
+ [n]<WORD
+
+Redirecting Output
+------------------
+
+ Redirection of output causes the file whose name results from the
+expansion of WORD to be opened for writing on file descriptor `n', or
+the standard output (file descriptor 1) if `n' is not specified. If
+the file does not exist it is created; if it does exist it is truncated
+to zero size.
+
+ The general format for redirecting output is:
+ [n]>[|]WORD
+
+ If the redirection operator is `>', and the `-C' option to the `set'
+builtin has been enabled, the redirection will fail if the filename
+whose name results from the expansion of WORD exists. If the
+redirection operator is `>|', then the value of the `-C' option to the
+`set' builtin command is not tested, and the redirection is attempted
+even if the file named by WORD exists.
+
+Appending Redirected Output
+---------------------------
+
+ Redirection of output in this fashion causes the file whose name
+results from the expansion of WORD to be opened for appending on file
+descriptor `n', or the standard output (file descriptor 1) if `n' is
+not specified. If the file does not exist it is created.
+
+ The general format for appending output is:
+ [n]>>WORD
+
+Redirecting Standard Output and Standard Error
+----------------------------------------------
+
+ Bash allows both the standard output (file descriptor 1) and the
+standard error output (file descriptor 2) to be redirected to the file
+whose name is the expansion of WORD with this construct.
+
+ There are two formats for redirecting standard output and standard
+error:
+ &>WORD
+
+and
+ >&WORD
+
+Of the two forms, the first is preferred. This is semantically
+equivalent to
+ >WORD 2>&1
+
+Here Documents
+--------------
+
+ This type of redirection instructs the shell to read input from the
+current source until a line containing only WORD (with no trailing
+blanks) is seen. All of the lines read up to that point are then used
+as the standard input for a command.
+
+ The format of here-documents is as follows:
+ <<[-]WORD
+ HERE-DOCUMENT
+ DELIMITER
+
+ No parameter expansion, command substitution, filename expansion, or
+arithmetic expansion is performed on WORD. If any characters in WORD
+are quoted, the DELIMITER is the result of quote removal on WORD, and
+the lines in the here-document are not expanded. Otherwise, all lines
+of the here-document are subjected to parameter expansion, command
+substitution, and arithmetic expansion. In the latter case, the pair
+`\newline' is ignored, and `\' must be used to quote the characters
+`\', `$', and ``'.
+
+ If the redirection operator is `<<-', then all leading tab
+characters are stripped from input lines and the line containing
+DELIMITER. This allows here-documents within shell scripts to be
+indented in a natural fashion.
+
+Duplicating File Descriptors
+----------------------------
+
+ The redirection operator
+ [n]<&WORD
+
+is used to duplicate input file descriptors. If WORD expands to one or
+more digits, the file descriptor denoted by `n' is made to be a copy of
+that file descriptor. If WORD evaluates to `-', file descriptor `n' is
+closed. If `n' is not specified, the standard input (file descriptor
+0) is used.
+
+ The operator
+ [n]>&WORD
+
+is used similarly to duplicate output file descriptors. If `n' is not
+specified, the standard output (file descriptor 1) is used. As a
+special case, if `n' is omitted, and WORD does not expand to one or
+more digits, the standard output and standard error are redirected as
+described previously.
+
+Opening File Descriptors for Reading and Writing
+------------------------------------------------
+
+ The redirection operator
+ [n]<>WORD
+
+causes the file whose name is the expansion of WORD to be opened for
+both reading and writing on file descriptor `n', or on file descriptor
+0 if `n' is not specified. If the file does not exist, it is created.
+
+
+File: bashref.info, Node: Executing Commands, Next: Shell Scripts, Prev: Redirections, Up: Basic Shell Features
+
+Executing Commands
+==================
+
+* Menu:
+
+* Command Search and Execution:: How Bash finds commands and runs them.
+
+* Environment:: The environment given to a command.
+
+* Exit Status:: The status returned by commands and how Bash
+ interprets it.
+
+* Signals:: What happens when Bash or a command it runs
+ receives a signal.
+
+
+File: bashref.info, Node: Command Search and Execution, Next: Environment, Up: Executing Commands
+
+Command Search and Execution
+----------------------------
+
+ After a command has been split into words, if it results in a simple
+command and an optional list of arguments, the following actions are
+taken.
+
+ 1. If the command name contains no slashes, the shell attempts to
+ locate it. If there exists a shell function by that name, that
+ function is invoked as described above in *Note Shell Functions::.
+
+ 2. If the name does not match a function, the shell searches for it
+ in the list of shell builtins. If a match is found, that builtin
+ is invoked.
+
+ 3. If the name is neither a shell function nor a builtin, and
+ contains no slashes, Bash searches each element of `$PATH' for a
+ directory containing an executable file by that name. Bash uses a
+ hash table to remember the full filenames of executable files (see
+ the description of `hash' in *Note Bourne Shell Builtins::) to
+ avoid multiple `PATH' searches. A full search of the directories
+ in `$PATH' is performed only if the command is not found in the
+ hash table. If the search is unsuccessful, the shell prints an
+ error message and returns a nonzero exit status.
+
+ 4. If the search is successful, or if the command name contains one
+ or more slashes, the shell executes the named program. Argument 0
+ is set to the name given, and the remaining arguments to the
+ command are set to the arguments supplied, if any.
+
+ 5. If this execution fails because the file is not in executable
+ format, and the file is not a directory, it is assumed to be SHELL
+ SCRIPT (*note Shell Scripts::.).
+
+
+File: bashref.info, Node: Environment, Next: Exit Status, Prev: Command Search and Execution, Up: Executing Commands
+
+Environment
+-----------
+
+ When a program is invoked it is given an array of strings called the
+ENVIRONMENT. This is a list of name-value pairs, of the form
+`name=value'.
+
+ Bash allows you to manipulate the environment in several ways. On
+invocation, the shell scans its own environment and creates a parameter
+for each name found, automatically marking it for EXPORT to child
+processes. Executed commands inherit the environment. The `export'
+and `declare -x' commands allow parameters and functions to be added to
+and deleted from the environment. If the value of a parameter in the
+environment is modified, the new value becomes part of the environment,
+replacing the old. The environment inherited by any executed command
+consists of the shell's initial environment, whose values may be
+modified in the shell, less any pairs removed by the `unset' command,
+plus any additions via the `export' and `declare -x' commands.
+
+ The environment for any simple command or function may be augmented
+temporarily by prefixing it with parameter assignments, as described in
+*Note Shell Parameters::. These assignment statements affect only the
+environment seen by that command.
+
+ If the `-k' flag is set (*note The Set Builtin::., then all
+parameter assignments are placed in the environment for a command, not
+just those that precede the command name.
+
+ When Bash invokes an external command, the variable `$_' is set to
+the full path name of the command and passed to that command in its
+environment.
+
+
+File: bashref.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Executing Commands
+
+Exit Status
+-----------
+
+ For the purposes of the shell, a command which exits with a zero
+exit status has succeeded. A non-zero exit status indicates failure.
+This seemingly counter-intuitive scheme is used so there is one
+well-defined way to indicate success and a variety of ways to indicate
+various failure modes. When a command terminates on a fatal signal
+whose number is N, Bash uses the value 128+N as the exit status.
+
+ If a command is not found, the child process created to execute it
+returns a status of 127. If a command is found but is not executable,
+the return status is 126.
+
+ The exit status is used by the Bash conditional commands (*note
+Conditional Constructs::.) and some of the list constructs (*note
+Lists::.).
+
+ All of the Bash builtins return an exit status of zero if they
+succeed and a non-zero status on failure, so they may be used by the
+conditional and list constructs.
+
+
+File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands
+
+Signals
+-------
+
+ When Bash is interactive, it ignores `SIGTERM' (so that `kill 0'
+does not kill an interactive shell), and `SIGINT' is caught and handled
+(so that the `wait' builtin is interruptible). When Bash receives a
+`SIGINT', it breaks out of any executing loops. In all cases, Bash
+ignores `SIGQUIT'. If job control is in effect (*note Job Control::.),
+Bash ignores `SIGTTIN', `SIGTTOU', and `SIGTSTP'.
+
+ Synchronous jobs started by Bash have signals set to the values
+inherited by the shell from its parent. When job control is not in
+effect, background jobs (commands terminated with `&') ignore `SIGINT'
+and `SIGQUIT'. Commands run as a result of command substitution ignore
+the keyboard-generated job control signals `SIGTTIN', `SIGTTOU', and
+`SIGTSTP'.
+
+ The shell exits by default upon receipt of a `SIGHUP'. Before
+exiting, it resends the `SIGHUP' to all jobs, running or stopped. To
+prevent the shell from sending the `SIGHUP' signal to a particular job,
+remove it from the jobs table with the `disown' builtin (*note Job
+Control Builtins::.) or use `disown -h' to mark it to not receive
+`SIGHUP'.
+
+
+File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features
+
+Shell Scripts
+=============
+
+ A shell script is a text file containing shell commands. When such
+a file is used as the first non-option argument when invoking Bash, and
+neither the `-c' nor `-s' option is supplied (*note Invoking Bash::.),
+Bash reads and executes commands from the file, then exits. This mode
+of operation creates a non-interactive shell. When Bash runs a shell
+script, it sets the special parameter `0' to the name of the file,
+rather than the name of the shell, and the positional parameters are
+set to the remaining arguments, if any are given. If no additional
+arguments are supplied, the positional parameters are unset.
+
+ A shell script may be made executable by using the `chmod' command
+to turn on the execute bit. When Bash finds such a file while
+searching the `$PATH' for a command, it spawns a subshell to execute
+it. In other words, executing
+ filename ARGUMENTS
+
+is equivalent to executing
+ bash filename ARGUMENTS
+
+if `filename' is an executable shell script. This subshell
+reinitializes itself, so that the effect is as if a new shell had been
+invoked to interpret the script.
+
+ Most versions of Unix make this a part of the kernel's command
+execution mechanism. If the first line of a script begins with the two
+characters `#!', the remainder of the line specifies an interpreter for
+the program. The arguments to the interpreter consist of a single
+optional argument following the interpreter name on the first line of
+the script file, followed by the name of the script file, followed by
+the rest of the arguments. Bash will perform this action on operating
+systems that do not handle it themselves. Note that some older
+versions of Unix limit the interpreter name and argument to a maximum
+of 32 characters.
+
+
+File: bashref.info, Node: Bourne Shell Features, Next: Csh Features, Prev: Basic Shell Features, Up: Top
+
+Bourne Shell Style Features
+***************************
+
+* Menu:
+
+* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
+ Shell.
+* Bourne Shell Variables:: Variables which Bash uses in the same way
+ as the Bourne Shell.
+* Other Bourne Shell Features:: Addtional aspects of Bash which behave in
+ the same way as the Bourne Shell.
+
+ This section briefly summarizes things which Bash inherits from the
+Bourne Shell: builtins, variables, and other features. It also lists
+the significant differences between Bash and the Bourne Shell.
+
+
+File: bashref.info, Node: Bourne Shell Builtins, Next: Bourne Shell Variables, Up: Bourne Shell Features
+
+Bourne Shell Builtins
+=====================
+
+ The following shell builtin commands are inherited from the Bourne
+Shell. These commands are implemented as specified by the POSIX 1003.2
+standard.
+
+`:'
+ : [ARGUMENTS]
+ Do nothing beyond expanding ARGUMENTS and performing redirections.
+
+`.'
+ . FILENAME
+ Read and execute commands from the FILENAME argument in the
+ current shell context.
+
+`break'
+ break [N]
+ Exit from a `for', `while', `until', or `select' loop. If N is
+ supplied, the Nth enclosing loop is exited.
+
+`cd'
+ cd [-LP] [DIRECTORY]
+ Change the current working directory to DIRECTORY. If DIRECTORY
+ is not given, the value of the `HOME' shell variable is used. If
+ the shell variable `CDPATH' exists, it is used as a search path.
+ If DIRECTORY begins with a slash, `CDPATH' is not used. The `-P'
+ option means to not follow symbolic links; symlinks are followed
+ by default or with the `-L' option.
+
+`continue'
+ continue [N]
+ Resume the next iteration of an enclosing `for', `while', `until',
+ or `select' loop. If N is supplied, the execution of the Nth
+ enclosing loop is resumed.
+
+`eval'
+ eval [ARGUMENTS]
+ The arguments are concatenated together into a single command,
+ which is then read and executed.
+
+`exec'
+ exec [-cl] [-a NAME] [COMMAND] [ARGUMENTS]
+ If COMMAND is supplied, it replaces the shell. If the `-l' option
+ is supplied, the shell places a dash in the zeroth arg passed to
+ COMMAND. This is what the `login' program does. The `-c' option
+ causes COMMAND to be executed with an empty environment. If `-a'
+ is supplied, the shell passes NAME as the zeroth argument to
+ COMMAND. If no COMMAND is specified, redirections may be used to
+ affect the current shell environment.
+
+`exit'
+ exit [N]
+ Exit the shell, returning a status of N to the shell's parent.
+
+`export'
+ export [-fn] [-p] [NAME[=VALUE]]
+ Mark each NAME to be passed to child processes in the environment.
+ If the `-f' option is supplied, the NAMEs refer to shell
+ functions. The `-n' option means to no longer mark each NAME for
+ export. If no NAMES are supplied, or if the `-p' option is given,
+ a list of exported names is displayed.
+
+`getopts'
+ getopts OPTSTRING NAME [ARGS]
+ `getopts' is used by shell scripts to parse positional parameters.
+ OPTSTRING contains the option letters to be recognized; if a letter
+ is followed by a colon, the option is expected to have an
+ argument, which should be separated from it by white space. Each
+ time it is invoked, `getopts' places the next option in the shell
+ variable NAME, initializing NAME if it does not exist, and the
+ index of the next argument to be processed into the variable
+ `OPTIND'. `OPTIND' is initialized to 1 each time the shell or a
+ shell script is invoked. When an option requires an argument,
+ `getopts' places that argument into the variable `OPTARG'. The
+ shell does not reset `OPTIND' automatically; it must be manually
+ reset between multiple calls to `getopts' within the same shell
+ invocation if a new set of parameters is to be used.
+
+ `getopts' can report errors in two ways. If the first character of
+ OPTSTRING is a colon, SILENT error reporting is used. In normal
+ operation diagnostic messages are printed when illegal options or
+ missing option arguments are encountered. If the variable `OPTERR'
+ is set to 0, no error message will be displayed, even if the first
+ character of `optstring' is not a colon.
+
+ If an illegal option is seen, `getopts' places `?' into NAME and,
+ if not silent, prints an error message and unsets `OPTARG'. If
+ `getopts' is silent, the option character found is placed in
+ `OPTARG' and no diagnostic message is printed.
+
+ If a required argument is not found, and `getopts' is not silent,
+ a question mark (`?') is placed in NAME, `OPTARG' is unset, and a
+ diagnostic message is printed. If `getopts' is silent, then a
+ colon (`:') is placed in NAME and `OPTARG' is set to the option
+ character found.
+
+ `getopts' normally parses the positional parameters, but if more
+ arguments are given in ARGS, `getopts' parses those instead.
+
+`hash'
+ hash [-r] [-p FILENAME] [NAME]
+ Remember the full filenames of commands specified as arguments, so
+ they need not be searched for on subsequent invocations. The
+ commands are found by searching through the directories listed in
+ `$PATH'. The `-p' option inhibits the path search, and FILENAME
+ is used as the location of NAME. The `-r' option causes the shell
+ to forget all remembered locations. If no arguments are given,
+ information about remembered commands is printed.
+
+`pwd'
+ pwd [-LP]
+ Print the current working directory. If the `-P' option is
+ supplied, the path printed will not contain symbolic links. If
+ the `-L' option is supplied, the path printed may contain symbolic
+ links.
+
+`readonly'
+ readonly [-apf] [NAME] ...
+ Mark each NAME as unchangable. The values of these names may not
+ be changed by subsequent assignment. If the `-f' option is
+ supplied, each NAME refers to a shell function. The `-a' option
+ means each NAME refers to an array variable. If no NAME arguments
+ are given, or if the `-p' option is supplied, a list of all
+ readonly names is printed.
+
+`return'
+ return [N]
+ Cause a shell function to exit with value N. This may also be used
+ to terminate execution of a script being executed with the `.'
+ builtin.
+
+`shift'
+ shift [N]
+ Shift positional parameters to the left by N. The positional
+ parameters from N+1 ... are renamed to `$1' ... . Parameters
+ represented by the numbers `$#' to N+1 are unset. N must be a
+ non-negative number less than or equal to `$#'.
+
+`test'
+`['
+ Evaluate a conditional expression (*note Bash Conditional
+ Expressions::.).
+
+`times'
+ times
+ Print out the user and system times used by the shell and its
+ children.
+
+`trap'
+ trap [-lp] [ARG] [SIGSPEC]
+ The commands in ARG are to be read and executed when the shell
+ receives signal SIGSPEC. If ARG is absent or equal to `-', all
+ specified signals are reset to the values they had when the shell
+ was started. If ARG is the null string, then SIGSPEC is ignored by
+ the shell and commands it invokes. If ARG is `-p', the shell
+ displays the trap commands associated with each SIGSPEC. If no
+ arguments are supplied, or only `-p' is given, `trap' prints the
+ list of commands associated with each signal number. SIGSPEC is
+ either a signal name such as `SIGINT' or a signal number. If
+ SIGSPEC is `0' or `EXIT', ARG is executed when the shell exits.
+ If SIGSPEC is `DEBUG', the command ARG is executed after every
+ simple command. The `-l' option causes the shell to print a list
+ of signal names and their corresponding numbers.
+
+ Signals ignored upon entry to the shell cannot be trapped or reset.
+ Trapped signals are reset to their original values in a child
+ process when it is created.
+
+`umask'
+ umask [-S] [MODE]
+ Set the shell process's file creation mask to MODE. If MODE
+ begins with a digit, it is interpreted as an octal number; if not,
+ it is interpreted as a symbolic mode mask similar to that accepted
+ by the `chmod' command. If MODE is omitted, the current value of
+ the mask is printed. If the `-S' option is supplied without a
+ MODE argument, the mask is printed in a symbolic format.
+
+`unset'
+ unset [-fv] [NAME]
+ Each variable or function NAME is removed. If no options are
+ supplied, or the `-v' option is given, each NAME refers to a shell
+ variable. If the `-f' option is given, the NAMEs refer to shell
+ functions, and the function definition is removed. Read-only
+ variables and functions may not be unset.
+
+
+File: bashref.info, Node: Bourne Shell Variables, Next: Other Bourne Shell Features, Prev: Bourne Shell Builtins, Up: Bourne Shell Features
+
+Bourne Shell Variables
+======================
+
+ Bash uses certain shell variables in the same way as the Bourne
+shell. In some cases, Bash assigns a default value to the variable.
+
+`IFS'
+ A list of characters that separate fields; used when the shell
+ splits words as part of expansion.
+
+`PATH'
+ A colon-separated list of directories in which the shell looks for
+ commands.
+
+`HOME'
+ The current user's home directory; the default for the `cd' builtin
+ command.
+
+`CDPATH'
+ A colon-separated list of directories used as a search path for
+ the `cd' command.
+
+`MAILPATH'
+ A colon-separated list of files which the shell periodically checks
+ for new mail. You can also specify what message is printed by
+ separating the file name from the message with a `?'. When used
+ in the text of the message, `$_' stands for the name of the
+ current mailfile.
+
+`MAIL'
+ If this parameter is set to a filename and the `MAILPATH' variable
+ is not set, Bash informs the user of the arrival of mail in the
+ specified file.
+
+`PS1'
+ The primary prompt string. The default value is `\s-\v\$ '.
+
+`PS2'
+ The secondary prompt string. The default value is `> '.
+
+`OPTIND'
+ The index of the last option processed by the `getopts' builtin.
+
+`OPTARG'
+ The value of the last option argument processed by the `getopts'
+ builtin.
+
+
+File: bashref.info, Node: Other Bourne Shell Features, Prev: Bourne Shell Variables, Up: Bourne Shell Features
+
+Other Bourne Shell Features
+===========================
+
+* Menu:
+
+* Major Differences From The Bourne Shell:: Major differences between
+ Bash and the Bourne shell.
+
+ Bash implements essentially the same grammar, parameter and variable
+expansion, redirection, and quoting as the Bourne Shell. Bash uses the
+POSIX 1003.2 standard as the specification of how these features are to
+be implemented. There are some differences between the traditional
+Bourne shell and the POSIX standard; this section quickly details the
+differences of significance. A number of these differences are
+explained in greater depth in subsequent sections.
+
+
+File: bashref.info, Node: Major Differences From The Bourne Shell, Up: Other Bourne Shell Features
+
+Major Differences From The SVR4.2 Bourne Shell
+----------------------------------------------
+
+ Bash is POSIX-conformant, even where the POSIX specification differs
+from traditional `sh' behavior.
+
+ Bash has multi-character invocation options (*note Invoking Bash::.).
+
+ Bash has command-line editing (*note Command Line Editing::.) and
+the `bind' builtin.
+
+ Bash has command history (*note Bash History Facilities::.) and the
+`history' and `fc' builtins to manipulate it.
+
+ Bash implements `csh'-like history expansion (*note History
+Interaction::.).
+
+ Bash has one-dimensional array variables (*note Arrays::.), and the
+appropriate variable expansions and assignment syntax to use them.
+Some of the Bash builtins take options to act on arrays. Bash provides
+some built-in array variables.
+
+ Bash implements the `!' keyword to negate the return value of a
+pipeline (*note Pipelines::.). Very useful when an `if' statement
+needs to act only if a test fails.
+
+ Bash includes the `select' compound command, which allows the
+generation of simple menus (*note Korn Shell Constructs::.).
+
+ Bash includes brace expansion (*note Brace Expansion::.) and tilde
+expansion (*note Tilde Expansion::.).
+
+ Bash implements command aliases and the `alias' and `unalias'
+builtins (*note Aliases::.).
+
+ Bash provides shell arithmetic and arithmetic expansion (*note Shell
+Arithmetic::.).
+
+ The POSIX and `ksh'-style `$()' form of command substitution is
+implemented (*note Command Substitution::.), and preferred to the
+Bourne shell's ```' (which is also implemented for backwards
+compatibility).
+
+ Variables present in the shell's initial environment are
+automatically exported to child processes. The Bourne shell does not
+normally do this unless the variables are explicitly marked using the
+`export' command.
+
+ Bash includes the POSIX and `ksh'-style pattern removal `%', `#',
+`%%' and `##' constructs to remove leading or trailing substrings from
+variable values (*note Shell Parameter Expansion::.).
+
+ The expansion `${#xx}', which returns the length of `$xx', is
+supported (*note Shell Parameter Expansion::.).
+
+ The `$'...'' quoting syntax, which expands ANSI-C backslash-escaped
+characters in the text between the single quotes, is supported (*note
+ANSI-C Quoting::.).
+
+ Bash supports the `$"..."' quoting syntax to do locale-specific
+translation of the characters between the double quotes. The `-D' and
+`--dump-strings' invocation options list the translatable strings found
+in a script (*note Locale Translation::.).
+
+ The expansion `${var:'LENGTH`[:'OFFSET`]}', which expands to the
+substring of `var''s value of length LENGTH, optionally beginning at
+OFFSET, is present (*note Shell Parameter Expansion::.).
+
+ The expansion `${var/[/]'PATTERN`[/'REPLACEMENT`]}', which matches
+PATTERN and replaces it with REPLACEMENT in the value of `var', is
+available (*note Shell Parameter Expansion::.).
+
+ Bash has INDIRECT variable expansion using `${!word}' (*note Shell
+Parameter Expansion::.).
+
+ Bash can expand positional parameters beyond `$9' using `${NUM}'.
+
+ Bash has process substitution (*note Process Substitution::.).
+
+ Bash automatically assigns variables that provide information about
+the current user (`UID' and `EUID'), the current host (`HOSTTYPE',
+`OSTYPE', `MACHTYPE', and `HOSTNAME'), and the instance of Bash that is
+running (`BASH', `BASH_VERSION', and `BASH_VERSINFO'. *Note Bash
+Variables::, for details.
+
+ The `IFS' variable is used to split only the results of expansion,
+not all words (*note Word Splitting::.). This closes a longstanding
+shell security hole.
+
+ It is possible to have a variable and a function with the same name;
+`sh' does not separate the two name spaces.
+
+ Bash functions are permitted to have local variables using the
+`local' builtin, and thus useful recursive functions may be written.
+
+ Variable assignments preceding commands affect only that command,
+even builtins and functions. In `sh', all variable assignments
+preceding commands are global unless the command is executed from the
+file system.
+
+ Bash performs filename expansion on filenames specified as operands
+to output redirection operators.
+
+ Bash contains the `<>' redirection operator, allowing a file to be
+opened for both reading and writing, and the `&>' redirection operator,
+for directing standard output and standard error to the same file
+(*note Redirections::.).
+
+ The `noclobber' option is available to avoid overwriting existing
+files with output redirection (*note The Set Builtin::.). The `>|'
+redirection operator may be used to override `noclobber'.
+
+ Bash interprets special backslash-escaped characters in the prompt
+strings when interactive (*note Printing a Prompt::.).
+
+ Bash allows you to write a function to override a builtin, and
+provides access to that builtin's functionality within the function via
+the `builtin' and `command' builtins (*note Bash Builtins::.).
+
+ The `command' builtin allows selective disabling of functions when
+command lookup is performed (*note Bash Builtins::.).
+
+ Individual builtins may be enabled or disabled using the `enable'
+builtin (*note Bash Builtins::.).
+
+ The Bash `hash' builtin allows a name to be associated with an
+arbitrary filename, even when that filename cannot be found by
+searching the `$PATH', using `hash -p'.
+
+ Shell functions may be exported to children via the environment
+(*note Shell Functions::.).
+
+ Bash includes a `help' builtin for quick reference to shell
+facilities (*note Bash Builtins::.).
+
+ The Bash `read' builtin (*note Bash Builtins::.) will read a line
+ending in `\' with the `-r' option, and will use the `REPLY' variable
+as a default if no arguments are supplied. The Bash `read' builtin
+also accepts a prompt string with the `-p' option and will use Readline
+to obtain the line when given the `-e' option.
+
+ Bash includes the `shopt' builtin, for finer control of shell
+optional capabilities (*note Bash Builtins::.).
+
+ Bash has much more optional behavior controllable with the `set'
+builtin (*note The Set Builtin::.).
+
+ The `disown' builtin can remove a job from the internal shell job
+table (*note Job Control Builtins::.).
+
+ The `return' builtin may be used to abort execution of scripts
+executed with the `.' or `source' builtins (*note Bourne Shell
+Builtins::.).
+
+ The `test' builtin (*note Bourne Shell Builtins::.) is slightly
+different, as it implements the POSIX 1003.2 algorithm, which specifies
+the behavior based on the number of arguments.
+
+ The `trap' builtin (*note Bourne Shell Builtins::.) allows a `DEBUG'
+pseudo-signal specification, similar to `EXIT'. Commands specified
+with a `DEBUG' trap are executed after every simple command. The
+`DEBUG' trap is not inherited by shell functions.
+
+ The Bash `export', `readonly', and `declare' builtins can take a
+`-f' option to act on shell functions, a `-p' option to display
+variables with various attributes set in a format that can be used as
+shell input, a `-n' option to remove various variable attributes, and
+`name=value' arguments to set variable attributes and values
+simultaneously.
+
+ The Bash `cd' and `pwd' builtins each take `-L' and `-P' builtins to
+switch between logical and physical modes.
+
+ The Bash `type' builtin is more extensive and gives more information
+about the names it finds.
+
+ Bash implements a `csh'-like directory stack, and provides the
+`pushd', `popd', and `dirs' builtins to manipulate it. Bash also makes
+the directory stack visible as the value of the `DIRSTACK' shell
+variable.
+
+ The Bash restricted mode is more useful (*note The Restricted
+Shell::.); the SVR4.2 shell restricted mode is too limited.
+
+ Bash has the `time' reserved word and command timing (*note
+Pipelines::.). The display of the timing statistics may be controlled
+with the `TIMEFORMAT' variable.
+
+ The SVR4.2 shell has two privilege-related builtins (`mldmode' and
+`priv') not present in Bash.
+
+ Bash does not have the `stop' or `newgrp' builtins.
+
+ Bash does not use the `SHACCT' variable or perform shell accounting.
+
+ The SVR4.2 `sh' uses a `TIMEOUT' variable like Bash uses `TMOUT'.
+
+ More features unique to Bash may be found in *Note Bash Features::.
+
+Implementation Differences From The SVR4.2 Shell
+------------------------------------------------
+
+ Since Bash is a completely new implementation, it does not suffer
+from many of the limitations of the SVR4.2 shell. For instance:
+
+ * Bash does not fork a subshell when redirecting into or out of a
+ shell control structure such as an `if' or `while' statement.
+
+ * Bash does not allow unbalanced quotes. The SVR4.2 shell will
+ silently insert a needed closing quote at `EOF' under certain
+ circumstances. This can be the cause of some hard-to-find errors.
+
+ * The SVR4.2 shell uses a baroque memory management scheme based on
+ trapping `SIGSEGV'. If the shell is started from a process with
+ `SIGSEGV' blocked (e.g., by using the `system()' C library
+ function call), the shell misbehaves badly.
+
+ * In a questionable attempt at security, the SVR4.2 shell will alter
+ its real and effective UID and GID if they are less than some
+ threshold value, commonly 100. This can lead to unexpected
+ results.
+
+ * The SVR4.2 shell does not allow users to trap `SIGALRM' or
+ `SIGCHLD'.
+
+ * For some reason, the SVR4.2 shell does not allow the `MAILCHECK'
+ variable to be unset.
+
+ * The SVR4.2 shell treats `^' as the undocumented equivalent of `|'.
+
+ * Bash allows multiple option arguments when it is invoked (`-x -v');
+ the SVR4.2 shell allows only one option argument (`-xv'). In
+ fact, some versions of the shell dump core if the second argument
+ begins with a `-'.
+
+ * The SVR4.2 shell exits a script if any builtin fails; Bash exits a
+ script only if one of the POSIX.2 special builtins fails, and only
+ for certain failures, as enumerated in the `POSIX.2' standard.
+
+ * The SVR4.2 shell behaves differently when invoked as `jsh' (it
+ turns on job control).
+
+
+File: bashref.info, Node: Csh Features, Next: Korn Shell Features, Prev: Bourne Shell Features, Up: Top
+
+C-Shell Style Features
+**********************
+
+ The C-Shell ("`csh'") was created by Bill Joy at The University of
+California at Berkeley. It is generally considered to have better
+features for interactive use than the original Bourne shell. Some of
+the `csh' features present in Bash include job control, history
+expansion, `protected' redirection, and several variables to control
+the interactive behaviour of the shell (e.g., `IGNOREEOF').
+
+ *Note Using History Interactively::, for details on history
+expansion.
+
+* Menu:
+
+* Brace Expansion:: Expansion of expressions within braces.
+* Tilde Expansion:: Expansion of the ~ character.
+* C Shell Builtins:: Builtin commands adopted from the C Shell.
+* C Shell Variables:: Variables which Bash uses in essentially
+ the same way as the C Shell.
+
+
+File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Csh Features
+
+Brace Expansion
+===============
+
+ Brace expansion is a mechanism by which arbitrary strings may be
+generated. This mechanism is similar to FILENAME EXPANSION (*note
+Filename Expansion::.), but the file names generated need not exist.
+Patterns to be brace expanded take the form of an optional PREAMBLE,
+followed by a series of comma-separated strings between a pair of
+braces, followed by an optional POSTAMBLE. The preamble is prepended
+to each string contained within the braces, and the postamble is then
+appended to each resulting string, expanding left to right.
+
+ Brace expansions may be nested. The results of each expanded string
+are not sorted; left to right order is preserved. For example,
+ bash$ echo a{d,c,b}e
+ ade ace abe
+
+ Brace expansion is performed before any other expansions, and any
+characters special to other expansions are preserved in the result. It
+is strictly textual. Bash does not apply any syntactic interpretation
+to the context of the expansion or the text between the braces.
+
+ A correctly-formed brace expansion must contain unquoted opening and
+closing braces, and at least one unquoted comma. Any incorrectly
+formed brace expansion is left unchanged.
+
+ This construct is typically used as shorthand when the common prefix
+of the strings to be generated is longer than in the above example:
+ mkdir /usr/local/src/bash/{old,new,dist,bugs}
+ or
+ chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+
+
+File: bashref.info, Node: Tilde Expansion, Next: C Shell Builtins, Prev: Brace Expansion, Up: Csh Features
+
+Tilde Expansion
+===============
+
+ Bash has tilde (~) expansion, similar, but not identical, to that of
+`csh'. The following table shows what unquoted words beginning with a
+tilde expand to.
+
+`~'
+ The current value of `$HOME'.
+
+`~/foo'
+ `$HOME/foo'
+
+`~fred/foo'
+ The subdirectory `foo' of the home directory of the user `fred'.
+
+`~+/foo'
+ `$PWD/foo'
+
+`~-/foo'
+ `$OLDPWD/foo'
+
+ Bash will also tilde expand words following redirection operators
+and words following `=' in assignment statements.
+
+
+File: bashref.info, Node: C Shell Builtins, Next: C Shell Variables, Prev: Tilde Expansion, Up: Csh Features
+
+C Shell Builtins
+================
+
+ Bash has several builtin commands whose definition is very similar
+to `csh'.
+
+`pushd'
+ pushd [DIR | +N | -N] [-n]
+
+ Save the current directory on a list and then `cd' to DIR. With no
+ arguments, exchanges the top two directories.
+
+ `+N'
+ Brings the Nth directory (counting from the left of the list
+ printed by `dirs') to the top of the list by rotating the
+ stack.
+
+ `-N'
+ Brings the Nth directory (counting from the right of the list
+ printed by `dirs') to the top of the list by rotating the
+ stack.
+
+ `-n'
+ Suppresses the normal change of directory when adding
+ directories to the stack, so that only the stack is
+ manipulated.
+
+ `DIR'
+ Makes the current working directory be the top of the stack,
+ and then `cd's to DIR. You can see the saved directory list
+ with the `dirs' command.
+
+`popd'
+ popd [+N | -N] [-n]
+
+ Pop the directory stack, and `cd' to the new top directory. When
+ no arguments are given, `popd' removes the top directory from the
+ stack and performs a `cd' to the new top directory. The elements
+ are numbered from 0 starting at the first directory listed with
+ `dirs'; i.e., `popd' is equivalent to `popd +0'.
+ `+N'
+ Removes the Nth directory (counting from the left of the list
+ printed by `dirs'), starting with zero.
+
+ `-N'
+ Removes the Nth directory (counting from the right of the
+ list printed by `dirs'), starting with zero.
+
+ `-n'
+ Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is
+ manipulated.
+
+`dirs'
+ dirs [+N | -N] [-clvp]
+ Display the list of currently remembered directories. Directories
+ find their way onto the list with the `pushd' command; you can get
+ back up through the list with the `popd' command.
+ `+N'
+ Displays the Nth directory (counting from the left of the
+ list printed by `dirs' when invoked without options), starting
+ with zero.
+
+ `-N'
+ Displays the Nth directory (counting from the right of the
+ list printed by `dirs' when invoked without options), starting
+ with zero.
+
+ `-c'
+ Clears the directory stack by deleting all of the elements.
+
+ `-l'
+ Produces a longer listing; the default listing format uses a
+ tilde to denote the home directory.
+
+ `-p'
+ Causes `dirs' to print the directory stack with one entry per
+ line.
+
+ `-v'
+ Causes `dirs' to print the directory stack with one entry per
+ line, prepending each entry with its index in the stack.
+
+`history'
+ history [-c] [N]
+ history [-anrw] [FILENAME]
+ history -ps ARG
+
+ Display the history list with line numbers. Lines prefixed with
+ with a `*' have been modified. An argument of N says to list only
+ the last N lines. Options, if supplied, have the following
+ meanings:
+
+ `-w'
+ Write out the current history to the history file.
+
+ `-r'
+ Read the current history file and append its contents to the
+ history list.
+
+ `-a'
+ Append the new history lines (history lines entered since the
+ beginning of the current Bash session) to the history file.
+
+ `-n'
+ Append the history lines not already read from the history
+ file to the current history list. These are lines appended
+ to the history file since the beginning of the current Bash
+ session.
+
+ `-c'
+ Clear the history list. This may be combined with the other
+ options to replace the history list completely.
+
+ `-s'
+ The ARGs are added to the end of the history list as a single
+ entry.
+
+ `-p'
+ Perform history substitution on the ARGs and display the
+ result on the standard output, without storing the results in
+ the history list.
+
+ When the `-w', `-r', `-a', or `-n' option is used, if FILENAME is
+ given, then it is used as the history file. If not, then the
+ value of the `HISTFILE' variable is used.
+
+`logout'
+ Exit a login shell.
+
+`source'
+ A synonym for `.' (*note Bourne Shell Builtins::.).
+
+
+File: bashref.info, Node: C Shell Variables, Prev: C Shell Builtins, Up: Csh Features
+
+C Shell Variables
+=================
+
+`IGNOREEOF'
+ If this variable is set, its value is used the number of
+ consecutive `EOF's Bash will read before exiting. By default,
+ Bash will exit upon reading a single `EOF'. If `IGNOREEOF' is not
+ set to a numeric value, Bash acts as if its value were 10.
+
+
+File: bashref.info, Node: Korn Shell Features, Next: Bash Features, Prev: Csh Features, Up: Top
+
+Korn Shell Style Features
+*************************
+
+ This section describes features primarily inspired by the Korn Shell
+(`ksh'). In some cases, the POSIX 1003.2 standard has adopted these
+commands and variables from the Korn Shell; Bash implements those
+features using the POSIX standard as a guide.
+
+* Menu:
+
+* Korn Shell Constructs:: Shell grammar constructs adopted from the
+ Korn Shell
+* Korn Shell Builtins:: Builtin commands adopted from the Korn Shell.
+* Korn Shell Variables:: Variables which Bash uses in essentially
+ the same way as the Korn Shell.
+* Aliases:: Substituting one command for another.
+
+
+File: bashref.info, Node: Korn Shell Constructs, Next: Korn Shell Builtins, Up: Korn Shell Features
+
+Korn Shell Constructs
+=====================
+
+ Bash includes the Korn Shell `select' construct. This construct
+allows the easy generation of menus. It has almost the same syntax as
+the `for' command.
+
+ The syntax of the `select' command is:
+ select NAME [in WORDS ...]; do COMMANDS; done
+
+ The list of words following `in' is expanded, generating a list of
+items. The set of expanded words is printed on the standard error,
+each preceded by a number. If the `in WORDS' is omitted, the
+positional parameters are printed. The `PS3' prompt is then displayed
+and a line is read from the standard input. If the line consists of a
+number corresponding to one of the displayed words, then the value of
+NAME is set to that word. If the line is empty, the words and prompt
+are displayed again. If `EOF' is read, the `select' command completes.
+Any other value read causes NAME to be set to null. The line read is
+saved in the variable `REPLY'.
+
+ The COMMANDS are executed after each selection until a `break' or
+`return' command is executed, at which point the `select' command
+completes.
+
+ Bash also has adopted command timing from the Korn shell. If the
+`time' reserved word precedes a pipeline or simple command, timing
+statistics for the pipeline are displayed when it completes. The
+statistics currently consist of elapsed (wall-clock) time and user and
+system time consumed by the command's execution.
+
+ The use of `time' as a reserved word permits the timing of shell
+builtins, shell functions, and pipelines. An external `time' command
+cannot time these easily.
+
+
+File: bashref.info, Node: Korn Shell Builtins, Next: Korn Shell Variables, Prev: Korn Shell Constructs, Up: Korn Shell Features
+
+Korn Shell Builtins
+===================
+
+ This section describes Bash builtin commands taken from `ksh'.
+
+`fc'
+ `fc [-e ENAME] [-nlr] [FIRST] [LAST]'
+ `fc -s [PAT=REP] [COMMAND]'
+
+ Fix Command. In the first form, a range of commands from FIRST to
+ LAST is selected from the history list. Both FIRST and LAST may
+ be specified as a string (to locate the most recent command
+ beginning with that string) or as a number (an index into the
+ history list, where a negative number is used as an offset from the
+ current command number). If LAST is not specified it is set to
+ FIRST. If FIRST is not specified it is set to the previous
+ command for editing and -16 for listing. If the `-l' flag is
+ given, the commands are listed on standard output. The `-n' flag
+ suppresses the command numbers when listing. The `-r' flag
+ reverses the order of the listing. Otherwise, the editor given by
+ ENAME is invoked on a file containing those commands. If ENAME is
+ not given, the value of the following variable expansion is used:
+ `${FCEDIT:-${EDITOR:-vi}}'. This says to use the value of the
+ `FCEDIT' variable if set, or the value of the `EDITOR' variable if
+ that is set, or `vi' if neither is set. When editing is complete,
+ the edited commands are echoed and executed.
+
+ In the second form, COMMAND is re-executed after each instance of
+ PAT in the selected command is replaced by REP.
+
+ A useful alias to use with the `fc' command is `r='fc -s'', so
+ that typing `r cc' runs the last command beginning with `cc' and
+ typing `r' re-executes the last command (*note Aliases::.).
+
+`let'
+ The `let' builtin allows arithmetic to be performed on shell
+ variables. For details, refer to *Note Arithmetic Builtins::.
+
+`typeset'
+ The `typeset' command is supplied for compatibility with the Korn
+ shell; however, it has been deprecated in favor of the `declare'
+ command (*note Bash Builtins::.).
+
+
+File: bashref.info, Node: Korn Shell Variables, Next: Aliases, Prev: Korn Shell Builtins, Up: Korn Shell Features
+
+Korn Shell Variables
+====================
+
+`REPLY'
+ The default variable for the `read' builtin.
+
+`RANDOM'
+ Each time this parameter is referenced, a random integer between 0
+ and 32767 is generated. Assigning a value to this variable seeds
+ the random number generator.
+
+`SECONDS'
+ This variable expands to the number of seconds since the shell was
+ started. Assignment to this variable resets the count to the
+ value assigned, and the expanded value becomes the value assigned
+ plus the number of seconds since the assignment.
+
+`PS3'
+ The value of this variable is used as the prompt for the `select'
+ command. If this variable is not set, the `select' command
+ prompts with `#? '
+
+`PS4'
+ This is the prompt printed before the command line is echoed when
+ the `-x' option is set (*note The Set Builtin::.). The default is
+ `+ '.
+
+`PWD'
+ The current working directory as set by the `cd' builtin.
+
+`OLDPWD'
+ The previous working directory as set by the `cd' builtin.
+
+`TMOUT'
+ If set to a value greater than zero, the value is interpreted as
+ the number of seconds to wait for input after issuing the primary
+ prompt. Bash terminates after that number of seconds if input does
+ not arrive.
+
+`LINENO'
+ The line number in the script or shell function currently
+ executing.
+
+`ENV'
+ If this variable is set when Bash is invoked to execute a shell
+ script, its value is expanded and used as the name of a startup
+ file to read before executing the script. *Note Bash Startup
+ Files::.
+
+`FCEDIT'
+ The editor used as a default by the `fc' builtin command.
+
+
+File: bashref.info, Node: Aliases, Prev: Korn Shell Variables, Up: Korn Shell Features
+
+Aliases
+=======
+
+* Menu:
+
+* Alias Builtins:: Builtins commands to maniuplate aliases.
+
+ The shell maintains a list of ALIASES that may be set and unset with
+the `alias' and `unalias' builtin commands.
+
+ The first word of each command, if unquoted, is checked to see if it
+has an alias. If so, that word is replaced by the text of the alias.
+The alias name and the replacement text may contain any valid shell
+input, including shell metacharacters, with the exception that the
+alias name may not contain =. The first word of the replacement text
+is tested for aliases, but a word that is identical to an alias being
+expanded is not expanded a second time. This means that one may alias
+`ls' to `"ls -F"', for instance, and Bash does not try to recursively
+expand the replacement text. If the last character of the alias value
+is a space or tab character, then the next command word following the
+alias is also checked for alias expansion.
+
+ Aliases are created and listed with the `alias' command, and removed
+with the `unalias' command.
+
+ There is no mechanism for using arguments in the replacement text,
+as in `csh'. If arguments are needed, a shell function should be used
+(*note Shell Functions::.).
+
+ Aliases are not expanded when the shell is not interactive, unless
+the `expand_aliases' shell option is set using `shopt' (*note Bash
+Builtins::.).
+
+ The rules concerning the definition and use of aliases are somewhat
+confusing. Bash always reads at least one complete line of input
+before executing any of the commands on that line. Aliases are
+expanded when a command is read, not when it is executed. Therefore, an
+alias definition appearing on the same line as another command does not
+take effect until the next line of input is read. The commands
+following the alias definition on that line are not affected by the new
+alias. This behavior is also an issue when functions are executed.
+Aliases are expanded when the function definition is read, not when the
+function is executed, because a function definition is itself a
+compound command. As a consequence, aliases defined in a function are
+not available until after that function is executed. To be safe,
+always put alias definitions on a separate line, and do not use `alias'
+in compound commands.
+
+ Note that for almost every purpose, aliases are superseded by shell
+functions.
+
+
+File: bashref.info, Node: Alias Builtins, Up: Aliases
+
+Alias Builtins
+--------------
+
+`alias'
+ alias [`-p'] [NAME[=VALUE] ...]
+
+ Without arguments or with the `-p' option, `alias' prints the list
+ of aliases on the standard output in a form that allows them to be
+ reused as input. If arguments are supplied, an alias is defined
+ for each NAME whose VALUE is given. If no VALUE is given, the name
+ and value of the alias is printed.
+
+`unalias'
+ unalias [-a] [NAME ... ]
+
+ Remove each NAME from the list of aliases. If `-a' is supplied,
+ all aliases are removed.
+
+
+File: bashref.info, Node: Bash Features, Next: Job Control, Prev: Korn Shell Features, Up: Top
+
+Bash Features
+*************
+
+ This section describes features unique to Bash.
+
+* Menu:
+
+* Invoking Bash:: Command line options that you can give
+ to Bash.
+* Bash Startup Files:: When and how Bash executes scripts.
+* Is This Shell Interactive?:: Determining the state of a running Bash.
+* Bash Builtins:: Table of builtins specific to Bash.
+* The Set Builtin:: This builtin is so overloaded it
+ deserves its own section.
+* Bash Conditional Expressions:: Primitives used in composing expressions for
+ the `test' builtin.
+* Bash Variables:: List of variables that exist in Bash.
+* Shell Arithmetic:: Arithmetic on shell variables.
+* Arrays:: Array Variables
+* Printing a Prompt:: Controlling the PS1 string.
+* The Restricted Shell:: A more controlled mode of shell execution.
+* Bash POSIX Mode:: Making Bash behave more closely to what
+ the POSIX standard specifies.
+
+
+File: bashref.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash Features
+
+Invoking Bash
+=============
+
+ bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o OPTION] [ARGUMENT ...]
+ bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o OPTION] -c STRING [ARGUMENT ...]
+ bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION] [ARGUMENT ...]
+
+ In addition to the single-character shell command-line options
+(*note The Set Builtin::.), there are several multi-character options
+that you can use. These options must appear on the command line before
+the single-character options in order for them to be recognized.
+
+`--dump-strings'
+ Equivalent to `-D'.
+
+`--help'
+ Display a usage message on standard output and exit sucessfully.
+
+`--login'
+ Make this shell act as if it were directly invoked by login. This
+ is equivalent to `exec -l bash' but can be issued from another
+ shell, such as `csh'. If you wanted to replace your current login
+ shell with a Bash login shell, you would say `exec bash --login'.
+
+`--noediting'
+ Do not use the GNU Readline library (*note Command Line Editing::.)
+ to read interactive command lines.
+
+`--noprofile'
+ Don't load the system-wide startup file `/etc/profile' or any of
+ the personal initialization files `~/.bash_profile',
+ `~/.bash_login', or `~/.profile' when Bash is invoked as a login
+ shell.
+
+`--norc'
+ Don't read the `~/.bashrc' initialization file in an interactive
+ shell. This is on by default if the shell is invoked as `sh'.
+
+`--posix'
+ Change the behavior of Bash where the default operation differs
+ from the POSIX 1003.2 standard to match the standard. This is
+ intended to make Bash behave as a strict superset of that
+ standard. *Note Bash POSIX Mode::, for a description of the Bash
+ POSIX mode.
+
+`--rcfile FILENAME'
+ Execute commands from FILENAME (instead of `~/.bashrc') in an
+ interactive shell.
+
+`--restricted'
+ Make the shell a restricted shell (*note The Restricted Shell::.).
+
+`--verbose'
+ Equivalent to `-v'.
+
+`--version'
+ Show version information for this instance of Bash on the standard
+ output and exit successfully.
+
+ There are several single-character options you can give which are
+not available with the `set' builtin.
+
+`-c STRING'
+ Read and execute commands from STRING after processing the
+ options, then exit. Any remaining arguments are assigned to the
+ positional parameters, starting with `$0'.
+
+`-i'
+ Force the shell to run interactively.
+
+`-r'
+ Make the shell restricted.
+
+`-s'
+ If this flag is present, or if no arguments remain after option
+ processing, then commands are read from the standard input. This
+ option allows the positional parameters to be set when invoking an
+ interactive shell.
+
+`-D'
+ A list of all double-quoted strings preceded by `$' is printed on
+ the standard ouput. These are the strings that are subject to
+ language translation when the current locale is not `C' or `POSIX'
+ (*note Locale Translation::.). This implies the `-n' option; no
+ commands will be executed.
+
+ An *interactive* shell is one whose input and output are both
+connected to terminals (as determined by `isatty()'), or one started
+with the `-i' option.
+
+ If arguments remain after option processing, and neither the `-c'
+nor the `-s' option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands (*note Shell
+Scripts::.). When Bash is invoked in this fashion, `$0' is set to the
+name of the file, and the positional parameters are set to the
+remaining arguments. Bash reads and executes commands from this file,
+then exits. Bash's exit status is the exit status of the last command
+executed in the script. If no commands are executed, the exit status
+is 0.
+
+
+File: bashref.info, Node: Bash Startup Files, Next: Is This Shell Interactive?, Prev: Invoking Bash, Up: Bash Features
+
+Bash Startup Files
+==================
+
+ This section describs how bash executes its startup files. If any
+of the files exist but cannot be read, bash reports an error. Tildes
+are expanded in file names as described above under Tilde Expansion
+(*note Tilde Expansion::.).
+
+ When Bash is invoked as a login shell, it first reads and executes
+commands from the file `/etc/profile', if that file exists. After
+reading that file, it looks for `~/.bash_profile', `~/.bash_login', and
+`~/.profile', in that order, and reads and executes commands from the
+first one that exists and is readable. The `--noprofile' option may be
+used when the shell is started to inhibit this behavior.
+
+ When a login shell exits, Bash reads and executes commands from the
+file `~/.bash_logout', if it exists.
+
+ When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from `~/.bashrc', if that file exists.
+This may be inhibited by using the `--norc' option. The `--rcfile
+FILE' option will force Bash to read and execute commands from FILE
+instead of `~/.bashrc'.
+
+ So, typically, your `~/.bash_profile' contains the line
+ `if [ -f `~/.bashrc' ]; then . `~/.bashrc'; fi'
+
+after (or before) any login-specific initializations.
+
+ When Bash is started non-interactively, to run a shell script, for
+example, it looks for the variable `BASH_ENV' in the environment,
+expands its value if it appears there, and uses the expanded value as
+the name of a file to read and execute. Bash behaves as if the
+following command were executed:
+ `if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi'
+
+but the value of the `PATH' variable is not used to search for the file
+name.
+
+ If Bash is invoked with the name `sh', it tries to mimic the startup
+behavior of historical versions of `sh' as closely as possible, while
+conforming to the POSIX standard as well.
+
+ When invoked as a login shell, it first attempts to read and execute
+commands from `/etc/profile' and `~/.profile', in that order. The
+`--noprofile' option may be used to inhibit this behavior. When
+invoked as an interactive shell with the name `sh', `bash' looks for
+the variable `ENV', expands its value if it is defined, and uses the
+expanded value as the name of a file to read and execute. Since a
+shell invoked as `sh' does not attempt to read and execute commands
+from any other startup files, the `--rcfile' option has no effect. A
+non-interactive shell invoked with the name `sh' does not attempt to
+read any startup files.
+
+ When invoked as `sh', Bash enters POSIX mode after the startup files
+are read.
+
+ When Bash is started in POSIX mode, as with the `--posix' command
+line option, it follows the POSIX standard for startup files. In this
+mode, the `ENV' variable is expanded and commands are read and executed
+from the file whose name is the expanded value. No other startup files
+are read. This is done by both interactive and non-interactive shells.
+
+ Bash attempts to determine when it is being run by the remote shell
+daemon, usually `rshd'. If Bash determines it is being run by rshd, it
+reads and executes commands from `~/.bashrc', if that file exists and
+is readable. It will not do this if invoked as `sh'. The `--norc'
+option may be used to inhibit this behavior, and the `--rcfile' option
+may be used to force another file to be read, but rshd does not
+generally invoke the shell with those options or allow them to be
+specified.
+
+
+File: bashref.info, Node: Is This Shell Interactive?, Next: Bash Builtins, Prev: Bash Startup Files, Up: Bash Features
+
+Is This Shell Interactive?
+==========================
+
+ As defined in *Note Invoking Bash::, an interactive shell is one
+whose input and output are both connected to terminals (as determined
+by `isatty(3)'), or one started with the `-i' option.
+
+ You may wish to determine within a startup script whether Bash is
+running interactively or not. To do this, examine the variable `$PS1';
+it is unset in non-interactive shells, and set in interactive shells.
+Thus:
+
+ if [ -z "$PS1" ]; then
+ echo This shell is not interactive
+ else
+ echo This shell is interactive
+ fi
+
+
+File: bashref.info, Node: Bash Builtins, Next: The Set Builtin, Prev: Is This Shell Interactive?, Up: Bash Features
+
+Bash Builtin Commands
+=====================
+
+ This section describes builtin commands which are unique to or have
+been extended in Bash.
+
+`bind'
+ bind [-m KEYMAP] [-lpsvPSV] [-q NAME] [-r KEYSEQ]
+ bind [-m KEYMAP] -f FILENAME
+ bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME
+
+ Display current Readline (*note Command Line Editing::.) key and
+ function bindings, or bind a key sequence to a Readline function
+ or macro. The binding syntax accepted is identical to that of
+ `.inputrc' (*note Readline Init File::.), but each binding must be
+ passed as a separate argument: e.g.,
+ `"\C-x\C-r":re-read-init-file'. Options, if supplied, have the
+ following meanings:
+
+ `-m KEYMAP'
+ Use KEYMAP as the keymap to be affected by the subsequent
+ bindings. Acceptable KEYMAP names are `emacs',
+ `emacs-standard', `emacs-meta', `emacs-ctlx', `vi',
+ `vi-command', and `vi-insert'. `vi' is equivalent to
+ `vi-command'; `emacs' is equivalent to `emacs-standard'.
+
+ `-l'
+ List the names of all Readline functions
+
+ `-p'
+ Display Readline function names and bindings in such a way
+ that they can be re-read
+
+ `-P'
+ List current Readline function names and bindings
+
+ `-v'
+ Display Readline variable names and values in such a way that
+ they can be re-read
+
+ `-V'
+ List current Readline variable names and values
+
+ `-s'
+ Display Readline key sequences bound to macros and the
+ strings they output in such a way that they can be re-read
+
+ `-S'
+ Display Readline key sequences bound to macros and the
+ strings they output
+
+ `-f FILENAME'
+ Read key bindings from FILENAME
+
+ `-q'
+ Query about which keys invoke the named FUNCTION
+
+ `-r KEYSEQ'
+ Remove any current binding for KEYSEQ
+
+`builtin'
+ builtin [SHELL-BUILTIN [ARGS]]
+ Run a shell builtin. This is useful when you wish to rename a
+ shell builtin to be a function, but need the functionality of the
+ builtin within the function itself.
+
+`command'
+ command [-pVv] COMMAND [ARGS ...]
+ Runs COMMAND with ARG ignoring shell functions. If you have a
+ shell function called `ls', and you wish to call the command `ls',
+ you can say `command ls'. The `-p' option means to use a default
+ value for `$PATH' that is guaranteed to find all of the standard
+ utilities.
+
+ If either the `-V' or `-v' option is supplied, a description of
+ COMMAND is printed. The `-v' option causes a single word
+ indicating the command or file name used to invoke COMMAND to be
+ printed; the `-V' option produces a more verbose description.
+
+`declare'
+ declare [-afFrxi] [-p] [NAME[=VALUE]]
+
+ Declare variables and give them attributes. If no NAMEs are
+ given, then display the values of variables instead.
+
+ The `-p' option will display the attributes and values of each
+ NAME. When `-p' is used, additional options are ignored. The
+ `-F' option inhibits the display of function definitions; only the
+ function name and attributes are printed. `-F' implies `-f'. The
+ following options can be used to restrict output to variables with
+ the specified attributes or to give variables attributes:
+
+ `-a'
+ Each NAME is an array variable (*note Arrays::.).
+
+ `-f'
+ Use function names only.
+
+ `-i'
+ The variable is to be treated as an integer; arithmetic
+ evaluation (*note Shell Arithmetic::.) is performed when the
+ variable is assigned a value.
+
+ `-r'
+ Make NAMEs readonly. These names cannot then be assigned
+ values by subsequent assignment statements.
+
+ `-x'
+ Mark each NAME for export to subsequent commands via the
+ environment.
+
+ Using `+' instead of `-' turns off the attribute instead. When
+ used in a function, `declare' makes each NAME local, as with the
+ `local' command.
+
+`echo'
+ echo [-neE] [arg ...]
+ Output the `arg's, separated by spaces, terminated with a newline.
+ The return status is always 0. If `-n' is specified, the
+ trailing newline is suppressed. If the `-e' option is given,
+ interpretation of the following backslash-escaped characters is
+ enabled. The `-E' option disables the interpretation of these
+ escape characters, even on systems where they are interpreted by
+ default. `echo' interprets the following escape sequences:
+ `\a'
+ alert (bell)
+
+ `\b'
+ backspace
+
+ `\c'
+ suppress trailing newline
+
+ `\e'
+ escape
+
+ `\f'
+ form feed
+
+ `\n'
+ new line
+
+ `\r'
+ carriage return
+
+ `\t'
+ horizontal tab
+
+ `\v'
+ vertical tab
+
+ `\\'
+ backslash
+
+ `\nnn'
+ the character whose ASCII code is `nnn' (octal)
+
+`enable'
+ enable [-n] [-p] [-f FILENAME] [-ads] [NAME ...]
+ Enable and disable builtin shell commands. This allows you to use
+ a disk command which has the same name as a shell builtin. If
+ `-n' is used, the NAMEs become disabled. Otherwise NAMEs are
+ enabled. For example, to use the `test' binary found via `$PATH'
+ instead of the shell builtin version, type `enable -n test'.
+
+ If the `-p' option is supplied, or no NAME arguments appear, a
+ list of shell builtins is printed. With no other arguments, the
+ list consists of all enabled shell builtins. The `-a' option
+ means to list each builtin with an indication of whether or not it
+ is enabled.
+
+ The `-f' option means to load the new builtin command NAME from
+ shared object FILENAME, on systems that support dynamic loading.
+ The `-d' option will delete a builtin loaded with `-f'. If there
+ are no options, a list of the shell builtins is displayed. The
+ `-s' option restricts `enable' to the POSIX.2 special builtins.
+ If `-s' is used with `-f', the new builtin becomes a special
+ builtin.
+
+`help'
+ help [PATTERN]
+ Display helpful information about builtin commands. If PATTERN is
+ specified, `help' gives detailed help on all commands matching
+ PATTERN, otherwise a list of the builtins is printed.
+
+`local'
+ local NAME[=VALUE]
+ For each argument, create a local variable called NAME, and give
+ it VALUE. `local' can only be used within a function; it makes
+ the variable NAME have a visible scope restricted to that function
+ and its children.
+
+`logout'
+ logout [N]
+ Exit a login shell, returning a status of N to the shell's parent.
+
+`read'
+ read [-a ANAME] [-p PROMPT] [-er] [NAME ...]
+ One line is read from the standard input, and the first word is
+ assigned to the first NAME, the second word to the second NAME,
+ and so on, with leftover words assigned to the last NAME. Only
+ the characters in the value of the `IFS' variable are recognized
+ as word delimiters. If no names are supplied, the line read is
+ assigned to the variable `REPLY'. The return code is zero, unless
+ end-of-file is encountered. Options, if supplied, have the
+ following meanings:
+
+ `-r'
+ If this option is given, a backslash-newline pair is not
+ ignored, and the backslash is considered to be part of the
+ line.
+
+ `-p PROMPT'
+ Display `prompt', without a trailing newline, before
+ attempting to read any input. The prompt is displayed only
+ if input is coming from a terminal.
+
+ `-a ANAME'
+ The words are assigned to sequential indices of the array
+ variable ANAME, starting at 0.
+
+ `-e'
+ Readline (*note Command Line Editing::.) is used to obtain
+ the line.
+
+`shopt'
+ shopt [-pqsu] [-o] [OPTNAME ...]
+ Toggle the values of variables controlling optional shell behavior.
+ With no options, or with the `-p' option, a list of all settable
+ options is displayed, with an indication of whether or not each is
+ set. Other options have the following meanings:
+
+ `-s'
+ Enable (set) each OPTNAME
+
+ `-u'
+ Disable (unset) each OPTNAME.
+
+ `-q'
+ Suppresses normal output; the return status indicates whether
+ the OPTNAME is set or unset. If multiple OPTNAME arguments
+ are given with `-q', the return status is zero if all
+ OPTNAMES are enabled; non-zero otherwise.
+
+ `-o'
+ Restricts the values of OPTNAME to be those defined for the
+ `-o' option to the `set' builtin (*note The Set Builtin::.).
+
+ If either of `-s' or `-u' is used with no OPTNAME arguments, the
+ display is limited to those options which are set or unset,
+ respectively.
+
+ Unless otherwise noted, the `shopt' options are disabled (off) by
+ default.
+
+ The return status when listing options is zero if all OPTNAMES are
+ enabled, non-zero otherwise. When setting or unsetting options,
+ the return status is zero unless an OPTNAME is not a legal shell
+ option.
+
+ The list of `shopt' options is:
+ `cdable_vars'
+ If this is set, an argument to the `cd' builtin command that
+ is not a directory is assumed to be the name of a variable
+ whose value is the directory to change to.
+
+ `cdspell'
+ If set, minor errors in the spelling of a directory component
+ in a `cd' command will be corrected. The errors checked for
+ are transposed characters, a missing character, and a
+ character too many. If a correction is found, the corrected
+ path is printed, and the command proceeds. This option is
+ enabled by default, but is only used by interactive shells.
+
+ `checkhash'
+ If this is set, Bash checks that a command found in the hash
+ table exists before trying to execute it. If a hashed
+ command no longer exists, a normal path search is performed.
+
+ `checkwinsize'
+ If set, Bash checks the window size after each command and,
+ if necessary, updates the values of `LINES' and `COLUMNS'.
+
+ `cmdhist'
+ If set, Bash attempts to save all lines of a multiple-line
+ command in the same history entry. This allows easy
+ re-editing of multi-line commands.
+
+ `dotglob'
+ If set, Bash includes filenames beginning with a `.' in the
+ results of filename expansion.
+
+ `execfail'
+ If this is set, a non-interactive shell will not exit if it
+ cannot execute the file specified as an argument to the `exec'
+ builtin command. An interactive shell does not exit if `exec'
+ fails.
+
+ `histappend'
+ If set, the history list is appended to the file named by the
+ value of the `HISTFILE' variable when the shell exits, rather
+ than overwriting the file.
+
+ `histreedit'
+ If set, and Readline is being used, a user is given the
+ opportunity to re-edit a failed history substitution.
+
+ `histverify'
+ If set, and Readline is being used, the results of history
+ substitution are not immediately passed to the shell parser.
+ Instead, the resulting line is loaded into the Readline
+ editing buffer, allowing further modification.
+
+ `hostcomplete'
+ If set, and Readline is being used, Bash will attempt to
+ perform hostname completion when a word beginning with `@' is
+ being completed (*note Commands For Completion::.).
+
+ `interactive_comments'
+ Allow a word beginning with `#' to cause that word and all
+ remaining characters on that line to be ignored in an
+ interactive shell. This option is enabled by default.
+
+ `lithist'
+ If enabled, and the `cmdhist' option is enabled, multi-line
+ commands are saved to the history with embedded newlines
+ rather than using semicolon separators where possible.
+
+ `mailwarn'
+ If set, and a file that Bash is checking for mail has been
+ accessed since the last time it was checked, the message
+ `"The mail in MAILFILE has been read"' is displayed.
+
+ `nullglob'
+ If set, Bash allows filename patterns which match no files to
+ expand to a null string, rather than themselves.
+
+ `promptvars'
+ If set, prompt strings undergo variable and parameter
+ expansion after being expanded (*note Printing a Prompt::.).
+ This option is enabled by default.
+
+ `shift_verbose'
+ If this is set, the `shift' builtin prints an error message
+ when the shift count exceeds the number of positional
+ parameters.
+
+ `sourcepath'
+ If set, the `source' builtin uses the value of `PATH' to find
+ the directory containing the file supplied as an argument.
+ This is enabled by default.
+
+`type'
+ type [-all] [-type | -path] [NAME ...]
+ For each NAME, indicate how it would be interpreted if used as a
+ command name.
+
+ If the `-type' flag is used, `type' returns a single word which is
+ one of `alias', `function', `builtin', `file' or `keyword', if
+ NAME is an alias, shell function, shell builtin, disk file, or
+ shell reserved word, respectively. If the NAME is not found, then
+ nothing is printed, and `type' returns a failure status.
+
+ If the `-path' flag is used, `type' either returns the name of the
+ disk file that would be executed, or nothing if `-type' would not
+ return `file'.
+
+ If the `-all' flag is used, returns all of the places that contain
+ an executable named FILE. This includes aliases and functions, if
+ and only if the `-path' flag is not also used.
+
+ `type' accepts `-a', `-t', and `-p' as equivalent to `-all',
+ `-type', and `-path', respectively.
+
+`ulimit'
+ ulimit [-acdflmnpstuvSH] [LIMIT]
+ `ulimit' provides control over the resources available to processes
+ started by the shell, on systems that allow such control. If an
+ option is given, it is interpreted as follows:
+ `-S'
+ change and report the soft limit associated with a resource.
+
+ `-H'
+ change and report the hard limit associated with a resource.
+
+ `-a'
+ all current limits are reported.
+
+ `-c'
+ the maximum size of core files created.
+
+ `-d'
+ the maximum size of a process's data segment.
+
+ `-f'
+ the maximum size of files created by the shell.
+
+ `-l'
+ The maximum size that may be locked into memory.
+
+ `-m'
+ the maximum resident set size.
+
+ `-n'
+ the maximum number of open file descriptors.
+
+ `-p'
+ the pipe buffer size.
+
+ `-s'
+ the maximum stack size.
+
+ `-t'
+ the maximum amount of cpu time in seconds.
+
+ `-u'
+ the maximum number of processes available to a single user.
+
+ `-v'
+ the maximum amount of virtual memory available to the process.
+
+ If LIMIT is given, it is the new value of the specified resource.
+ Otherwise, the current value of the soft limit for the specified
+ resource is printed, unless the `-H' option is supplied. When
+ setting new limits, if neither `-H' nor `-S' is supplied, both the
+ hard and soft limits are set. If no option is given, then `-f' is
+ assumed. Values are in 1024-byte increments, except for `-t',
+ which is in seconds, `-p', which is in units of 512-byte blocks,
+ and `-n' and `-u', which are unscaled values.
+
+
+File: bashref.info, Node: The Set Builtin, Next: Bash Conditional Expressions, Prev: Bash Builtins, Up: Bash Features
+
+The Set Builtin
+===============
+
+ This builtin is so overloaded that it deserves its own section.
+
+`set'
+ set [-abefhkmnptuvxdBCHP] [-o OPTION] [ARGUMENT ...]
+
+ `-a'
+ Mark variables which are modified or created for export.
+
+ `-b'
+ Cause the status of terminated background jobs to be reported
+ immediately, rather than before printing the next primary
+ prompt.
+
+ `-e'
+ Exit immediately if a simple command exits with a non-zero
+ status.
+
+ `-f'
+ Disable file name generation (globbing).
+
+ `-h'
+ Locate and remember (hash) commands as they are looked up for
+ execution.
+
+ `-k'
+ All arguments in the form of assignment statements are placed
+ in the environment for a command, not just those that precede
+ the command name.
+
+ `-m'
+ Job control is enabled (*note Job Control::.).
+
+ `-n'
+ Read commands but do not execute them.
+
+ `-o OPTION-NAME'
+ Set the flag corresponding to OPTION-NAME:
+
+ `allexport'
+ same as `-a'.
+
+ `braceexpand'
+ same as `-B'.
+
+ `emacs'
+ use an `emacs'-style line editing interface (*note
+ Command Line Editing::.).
+
+ `errexit'
+ same as `-e'.
+
+ `hashall'
+ same as `-h'.
+
+ `histexpand'
+ same as `-H'.
+
+ `history'
+ Enable command history, as described in *Note Bash
+ History Facilities::. This option is on by default in
+ interactive shells.
+
+ `ignoreeof'
+ the shell will not exit upon reading EOF.
+
+ `keyword'
+ same as `-k'.
+
+ `monitor'
+ same as `-m'.
+
+ `noclobber'
+ same as `-C'.
+
+ `noexec'
+ same as `-n'.
+
+ `noglob'
+ same as `-f'.
+
+ `notify'
+ same as `-b'.
+
+ `nounset'
+ same as `-u'.
+
+ `onecmd'
+ same as `-t'.
+
+ `physical'
+ same as `-P'.
+
+ `posix'
+ change the behavior of Bash where the default operation
+ differs from the POSIX 1003.2 standard to match the
+ standard. This is intended to make Bash behave as a
+ strict superset of that standard.
+
+ `privileged'
+ same as `-p'.
+
+ `verbose'
+ same as `-v'.
+
+ `vi'
+ use a `vi'-style line editing interface.
+
+ `xtrace'
+ same as `-x'.
+
+ `-p'
+ Turn on privileged mode. In this mode, the `$ENV' file is
+ not processed, and shell functions are not inherited from the
+ environment. This is enabled automatically on startup if the
+ effective user (group) id is not equal to the real user
+ (group) id. Turning this option off causes the effective user
+ and group ids to be set to the real user and group ids.
+
+ `-t'
+ Exit after reading and executing one command.
+
+ `-u'
+ Treat unset variables as an error when substituting.
+
+ `-v'
+ Print shell input lines as they are read.
+
+ `-x'
+ Print commands and their arguments as they are executed.
+
+ `-B'
+ The shell will perform brace expansion (*note Brace
+ Expansion::.). This option is on by default.
+
+ `-C'
+ Disallow output redirection to existing files.
+
+ `-H'
+ Enable `!' style history substitution (*note History
+ Interaction::.). This flag is on by default for interactive
+ shells.
+
+ `-P'
+ If set, do not follow symbolic links when performing commands
+ such as `cd' which change the current directory. The
+ physical directory is used instead. By default, Bash follows
+ the logical chain of directories when performing commands
+ which change the current directory.
+
+ For example, if `/usr/sys' is a link to `/usr/local/sys' then:
+ $ cd /usr/sys; echo $PWD
+ /usr/sys
+ $ cd ..; pwd
+ /usr
+
+ If `set -P' is on, then:
+ $ cd /usr/sys; echo $PWD
+ /usr/local/sys
+ $ cd ..; pwd
+ /usr/local
+
+ `--'
+ If no arguments follow this flag, then the positional
+ parameters are unset. Otherwise, the positional parameters
+ are set to the ARGUMENTS, even if some of them begin with a
+ `-'.
+
+ `-'
+ Signal the end of options, cause all remaining ARGUMENTS to
+ be assigned to the positional parameters. The `-x' and `-v'
+ options are turned off. If there are no arguments, the
+ positional parameters remain unchanged.
+
+ Using `+' rather than `-' causes these flags to be turned off.
+ The flags can also be used upon invocation of the shell. The
+ current set of flags may be found in `$-'.
+
+ The remaining N ARGUMENTS are positional parameters and are
+ assigned, in order, to `$1', `$2', ... `$N'. If no arguments are
+ given, all shell variables are printed.
+
+
+File: bashref.info, Node: Bash Conditional Expressions, Next: Bash Variables, Prev: The Set Builtin, Up: Bash Features
+
+Bash Conditional Expressions
+============================
+
+ Conditional expressions are used by the `test' and `[' builtins.
+
+ Expressions may be unary or binary. Unary expressions are often
+used to examine the status of a file. There are string operators and
+numeric comparison operators as well. Each operator and operand must
+be a separate argument. If FILE is of the form `/dev/fd/N', then file
+descriptor N is checked. Expressions are composed of the following
+primaries:
+
+`-b FILE'
+ True if FILE exists and is a block special file.
+
+`-c FILE'
+ True if FILE exists and is a character special file.
+
+`-d FILE'
+ True if FILE exists and is a directory.
+
+`-e FILE'
+ True if FILE exists.
+
+`-f FILE'
+ True if FILE exists and is a regular file.
+
+`-g FILE'
+ True if FILE exists and is set-group-id.
+
+`-k FILE'
+ True if FILE has its "sticky" bit set.
+
+`-L FILE'
+ True if FILE exists and is a symbolic link.
+
+`-p FILE'
+ True if FILE exists and is a named pipe.
+
+`-r FILE'
+ True if FILE exists and is readable.
+
+`-s FILE'
+ True if FILE exists and has a size greater than zero.
+
+`-S FILE'
+ True if FILE exists and is a socket.
+
+`-t FD'
+ True if FD is opened on a terminal.
+
+`-u FILE'
+ True if FILE exists and its set-user-id bit is set.
+
+`-w FILE'
+ True if FILE exists and is writable.
+
+`-x FILE'
+ True if FILE exists and is executable.
+
+`-O FILE'
+ True if FILE exists and is owned by the effective user id.
+
+`-G FILE'
+ True if FILE exists and is owned by the effective group id.
+
+`FILE1 -nt FILE2'
+ True if FILE1 is newer (according to modification date) than FILE2.
+
+`FILE1 -ot FILE2'
+ True if FILE1 is older than FILE2.
+
+`FILE1 -ef FILE2'
+ True if FILE1 and FILE2 have the same device and inode numbers.
+
+`-o OPTNAME'
+ True if shell option OPTNAME is enabled. The list of options
+ appears in the description of the `-o' option to the `set' builtin
+ (*note The Set Builtin::.).
+
+`-z STRING'
+ True if the length of STRING is zero.
+
+`-n STRING'
+`STRING'
+ True if the length of STRING is non-zero.
+
+`STRING1 = STRING2'
+ True if the strings are equal. `==' may be used in place of `='.
+
+`STRING1 != STRING2'
+ True if the strings are not equal.
+
+`STRING1 < STRING2'
+ True if STRING1 sorts before STRING2 lexicographically.
+
+`STRING1 > STRING2'
+ True if STRING1 sorts after STRING2 lexicographically.
+
+`! EXPR'
+ True if EXPR is false.
+
+`EXPR1 -a EXPR2'
+ True if both EXPR1 and EXPR2 are true.
+
+`EXPR1 -o EXPR2'
+ True if either EXPR1 and EXPR2 is true.
+
+`ARG1 OP ARG2'
+ `OP' is one of `-eq', `-ne', `-lt', `-le', `-gt', or `-ge'. These
+ arithmetic binary operators return true if ARG1 is equal to, not
+ equal to, less than, less than or equal to, greater than, or
+ greater than or equal to ARG2, respectively. ARG1 and ARG2 may be
+ positive or negative integers.
+
+ The Bash `test' and `[' builtins evaluate conditional expressions
+using a set of rules based on the number of arguments. These are the
+rules:
+
+0 arguments
+ The expression is false.
+
+1 argument
+ The expression is true if and only if the argument is not null.
+
+2 arguments
+ If the first argument is `!', the expression is true if and only
+ if the second argument is null. If the first argument is one of
+ the listed unary operators, the expression is true if the unary
+ test is true. If the first argument is not a legal unary
+ operator, the expression is false.
+
+3 arguments
+ If the first argument is `!', the value is the negation of the
+ two-argument test using the second and third arguments. If the
+ second argument is one of the binary operators, the result of the
+ expression is the result of the binary test using the first and
+ third arguments as operands. If the first argument is exactly `('
+ and the third argument is exactly `)', the result is the
+ one-argument test of the second argument. Otherwise, the
+ expression is false. The `-a' and `-o' operators are considered
+ binary operators in this case.
+
+4 arguments
+ If the first argument is `!', the result is the negation of the
+ three-argument expression composed of the remaining arguments.
+ Otherwise, the expression is parsed and evaluated according to
+ precedence. `-a' has a higher precedence than `-o'.
+
+5 or more arguments
+ The expression is parsed and evaluated according to precedence,
+ with `-a' having a higher precedence than `-o'.
+
+
+File: bashref.info, Node: Bash Variables, Next: Shell Arithmetic, Prev: Bash Conditional Expressions, Up: Bash Features
+
+Bash Variables
+==============
+
+ These variables are set or used by Bash, but other shells do not
+normally treat them specially.
+
+`TIMEFORMAT'
+ The value of this parameter is used as a format string specifying
+ how the timing information for pipelines prefixed with the `time'
+ reserved word should be displayed. The `%' character introduces an
+ escape sequence that is expanded to a time value or other
+ information. The escape sequences and their meanings are as
+ follows; the braces denote optional portions.
+
+ `%%'
+ A literal `%'.
+
+ `%[P][l]R'
+ The elapsed time in seconds.
+
+ `%[P][l]U'
+ The number of CPU seconds spent in user mode.
+
+ `%[P][l]S'
+ The number of CPU seconds spent in system mode.
+
+ `%P'
+ The CPU percentage, computed as (%U + %S) / %R.
+
+ The optional P is a digit specifying the precision, the number of
+ fractional digits after a decimal point. A value of 0 causes no
+ decimal point or fraction to be output. At most three places
+ after the decimal point may be specified; values of P greater than
+ 3 are changed to 3. If P is not specified, the value 3 is used.
+
+ The optional `l' specifies a longer format, including minutes, of
+ the form MMmSS.FFs. The value of P determines whether or not the
+ fraction is included.
+
+ If this variable is not set, bash acts as if it had the value
+ `$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS''. If the value is null,
+ no timing information is displayed. A trailing newline is added
+ when the format string is displayed.
+
+`HISTCONTROL'
+ Set to a value of `ignorespace', it means don't enter lines which
+ begin with a space or tab into the history list. Set to a value
+ of `ignoredups', it means don't enter lines which match the last
+ entered line. A value of `ignoreboth' combines the two options.
+ Unset, or set to any other value than those above, means to save
+ all lines on the history list.
+
+`HISTIGNORE'
+ A colon-separated list of patterns used to decide which command
+ lines should be saved on the history list. Each pattern is
+ anchored at the beginning of the line and must fully specify the
+ line (no implicit `*' is appended). Each pattern is tested
+ against the line after the checks specified by `HISTCONTROL' are
+ applied. In addition to the normal shell pattern matching
+ characters, `&' matches the previous history line. `&' may be
+ escaped using a backslash. The backslash is removed before
+ attempting a match.
+
+ `HISTIGNORE' subsumes the function of `HISTCONTROL'. A pattern of
+ `&' is identical to `ignoredups', and a pattern of `[ ]*' is
+ identical to `ignorespace'. Combining these two patterns,
+ separating them with a colon, provides the functionality of
+ `ignoreboth'.
+
+`HISTFILE'
+ The name of the file to which the command history is saved. The
+ default is `~/.bash_history'.
+
+`HISTSIZE'
+ If set, this is the maximum number of commands to remember in the
+ history.
+
+`HISTFILESIZE'
+ The maximum number of lines contained in the history file. When
+ this variable is assigned a value, the history file is truncated,
+ if necessary, to contain no more than that number of lines. The
+ default value is 500. The history file is also truncated to this
+ size after writing it when an interactive shell exits.
+
+`histchars'
+ Up to three characters which control history expansion, quick
+ substitution, and tokenization (*note History Interaction::.).
+ The first character is the "history-expansion-char", that is, the
+ character which signifies the start of a history expansion,
+ normally `!'. The second character is the character which
+ signifies `quick substitution' when seen as the first character on
+ a line, normally `^'. The optional third character is the
+ character which signifies the remainder of the line is a comment,
+ when found as the first character of a word, usually `#'. The
+ history comment character causes history substitution to be
+ skipped for the remaining words on the line. It does not
+ necessarily cause the shell parser to treat the rest of the line
+ as a comment.
+
+`HISTCMD'
+ The history number, or index in the history list, of the current
+ command. If `HISTCMD' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+`HOSTFILE'
+ Contains the name of a file in the same format as `/etc/hosts' that
+ should be read when the shell needs to complete a hostname. You
+ can change the file interactively; the next time you attempt to
+ complete a hostname, Bash will add the contents of the new file to
+ the already existing database.
+
+`MAILCHECK'
+ How often (in seconds) that the shell should check for mail in the
+ files specified in `MAILPATH'.
+
+`PROMPT_COMMAND'
+ If present, this contains a string which is a command to execute
+ before the printing of each primary prompt (`$PS1').
+
+`UID'
+ The numeric real user id of the current user.
+
+`EUID'
+ The numeric effective user id of the current user.
+
+`PPID'
+ The process id of the shell's parent process.
+
+`HOSTNAME'
+ The name of the current host.
+
+`HOSTTYPE'
+ A string describing the machine Bash is running on.
+
+`OSTYPE'
+ A string describing the operating system Bash is running on.
+
+`MACHTYPE'
+ A string that fully describes the system type on which Bash is
+ executing, in the standard GNU CPU-COMPANY-SYSTEM format.
+
+`SHELLOPTS'
+ A colon-separated list of enabled shell options. Each word in the
+ list is a valid argument for the `-o' option to the `set' builtin
+ command (*note The Set Builtin::.). The options appearing in
+ `SHELLOPTS' are those reported as `on' by `set -o'. If this
+ variable is in the environment when Bash starts up, each shell
+ option in the list will be enabled before reading any startup
+ files. This variable is readonly.
+
+`FIGNORE'
+ A colon-separated list of suffixes to ignore when performing
+ filename completion. A file name whose suffix matches one of the
+ entries in `FIGNORE' is excluded from the list of matched file
+ names. A sample value is `.o:~'
+
+`GLOBIGNORE'
+ A colon-separated list of patterns defining the set of filenames to
+ be ignored by filename expansion. If a filename matched by a
+ filename expansion pattern also matches one of the patterns in
+ `GLOBIGNORE', it is removed from the list of matches.
+
+`DIRSTACK'
+ An array variable (*note Arrays::.) containing the current
+ contents of the directory stack. Directories appear in the stack
+ in the order they are displayed by the `dirs' builtin. Assigning
+ to members of this array variable may be used to modify
+ directories already in the stack, but the `pushd' and `popd'
+ builtins must be used to add and remove directories. Assignment
+ to this variable will not change the current directory. If
+ `DIRSTACK' is unset, it loses its special properties, even if it
+ is subsequently reset.
+
+`PIPESTATUS'
+ An array variable (*note Arrays::.) containing a list of exit
+ status values from the processes in the most-recently-executed
+ foreground pipeline (which may contain only a single command).
+
+`INPUTRC'
+ The name of the Readline startup file, overriding the default of
+ `~/.inputrc'.
+
+`BASH'
+ The full filename used to execute the current instance of Bash.
+
+`BASH_VERSION'
+ The version number of the current instance of Bash.
+
+`BASH_VERSINFO'
+ An array variable whose members hold version information for this
+ instance of Bash. The values assigned to the array members are as
+ follows:
+
+ `BASH_VERSINFO[0]'
+ The major version number (the RELEASE).
+
+ `BASH_VERSINFO[1]'
+ The minor version number (the VERSION).
+
+ `BASH_VERSINFO[2]'
+ The patch level.
+
+ `BASH_VERSINFO[3]'
+ The build version.
+
+ `BASH_VERSINFO[4]'
+ The release status (e.g., BETA1).
+
+ `BASH_VERSINFO[5]'
+ The value of `MACHTYPE'.
+
+`SHLVL'
+ Incremented by one each time a new instance of Bash is started.
+ This is intended to be an account of how deeply your Bash shells
+ are nested.
+
+`OPTERR'
+ If set to the value 1, Bash displays error messages generated by
+ the `getopts' builtin command.
+
+`LANG'
+ Used to determine the locale category for any category not
+ specifically selected with a variable starting with `LC_'.
+
+`LC_ALL'
+ This variable overrides the value of `LANG' and any other `LC_'
+ variable specifying a locale category.
+
+`LC_MESSAGES'
+ This variable determines the locale used to translate double-quoted
+ strings preceded by a `$'.
+
+`IGNOREEOF'
+ Controls the action of the shell on receipt of an `EOF' character
+ as the sole input. If set, then the value of it is the number of
+ consecutive `EOF' characters that can be read as the first
+ character on an input line before the shell will exit. If the
+ variable exists but does not have a numeric value (or has no
+ value) then the default is 10. If the variable does not exist,
+ then `EOF' signifies the end of input to the shell. This is only
+ in effect for interactive shells.
+
+
+File: bashref.info, Node: Shell Arithmetic, Next: Arrays, Prev: Bash Variables, Up: Bash Features
+
+Shell Arithmetic
+================
+
+* Menu:
+
+* Arithmetic Evaluation:: How shell arithmetic works.
+* Arithmetic Expansion:: How to use arithmetic in shell expansions.
+* Arithmetic Builtins:: Builtin commands that use shell arithmetic.
+
+ Bash includes several mechanisms to evaluate arithmetic expressions
+and display the result or use it as part of a command.
+
+
+File: bashref.info, Node: Arithmetic Evaluation, Next: Arithmetic Expansion, Up: Shell Arithmetic
+
+Arithmetic Evaluation
+---------------------
+
+ The shell allows arithmetic expressions to be evaluated, as one of
+the shell expansions or by the `let' builtin.
+
+ Evaluation is done in long integers with no check for overflow,
+though division by 0 is trapped and flagged as an error. The following
+list of operators is grouped into levels of equal-precedence operators.
+The levels are listed in order of decreasing precedence.
+
+`- +'
+ unary minus and plus
+
+`! ~'
+ logical and bitwise negation
+
+`* / %'
+ multiplication, division, remainder
+
+`+ -'
+ addition, subtraction
+
+`<< >>'
+ left and right bitwise shifts
+
+`<= >= < >'
+ comparison
+
+`== !='
+ equality and inequality
+
+`&'
+ bitwise AND
+
+`^'
+ bitwise exclusive OR
+
+`|'
+ bitwise OR
+
+`&&'
+ logical AND
+
+`||'
+ logical OR
+
+`expr ? expr : expr'
+ conditional evaluation
+
+`= *= /= %= += -= <<= >>= &= ^= |='
+ assignment
+
+ Shell variables are allowed as operands; parameter expansion is
+performed before the expression is evaluated. The value of a parameter
+is coerced to a long integer within an expression. A shell variable
+need not have its integer attribute turned on to be used in an
+expression.
+
+ Constants with a leading 0 are interpreted as octal numbers. A
+leading `0x' or `0X' denotes hexadecimal. Otherwise, numbers take the
+form [BASE`#']N, where BASE is a decimal number between 2 and 64
+representing the arithmetic base, and N is a number in that base. If
+BASE is omitted, then base 10 is used. The digits greater than 9 are
+represented by the lowercase letters, the uppercase letters, `_', and
+`@', in that order. If BASE is less than or equal to 36, lowercase and
+uppercase letters may be used interchangably to represent numbers
+between 10 and 35.
+
+ Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence rules
+above.
+
+
+File: bashref.info, Node: Arithmetic Expansion, Next: Arithmetic Builtins, Prev: Arithmetic Evaluation, Up: Shell Arithmetic
+
+Arithmetic Expansion
+--------------------
+
+ Arithmetic expansion allows the evaluation of an arithmetic
+expression and the substitution of the result. The format for
+arithmetic expansion is:
+
+ $(( EXPRESSION ))
+
+ The expression is treated as if it were within double quotes, but a
+double quote inside the braces or parentheses is not treated specially.
+All tokens in the expression undergo parameter expansion, command
+substitution, and quote removal. Arithmetic substitutions may be
+nested.
+
+ The evaluation is performed according to the rules listed above. If
+the expression is invalid, Bash prints a message indicating failure and
+no substitution occurs.
+
+
+File: bashref.info, Node: Arithmetic Builtins, Prev: Arithmetic Expansion, Up: Shell Arithmetic
+
+Arithmetic Builtins
+-------------------
+
+`let'
+ let EXPRESSION [EXPRESSION]
+ The `let' builtin allows arithmetic to be performed on shell
+ variables. Each EXPRESSION is evaluated according to the rules
+ given previously (*note Arithmetic Evaluation::.). If the last
+ EXPRESSION evaluates to 0, `let' returns 1; otherwise 0 is
+ returned.
+
+
+File: bashref.info, Node: Arrays, Next: Printing a Prompt, Prev: Shell Arithmetic, Up: Bash Features
+
+Arrays
+======
+
+ Bash provides one-dimensional array variables. Any variable may be
+used as an array; the `declare' builtin will explicitly declare an
+array. There is no maximum limit on the size of an array, nor any
+requirement that members be indexed or assigned contiguously. Arrays
+are zero-based.
+
+ An array is created automatically if any variable is assigned to
+using the syntax
+ name[SUBSCRIPT]=VALUE
+
+The SUBSCRIPT is treated as an arithmetic expression that must evaluate
+to a number greater than or equal to zero. To explicitly declare an
+array, use
+ declare -a NAME
+
+The syntax
+ declare -a NAME[SUBSCRIPT]
+
+is also accepted; the SUBSCRIPT is ignored. Attributes may be
+specified for an array variable using the `declare' and `readonly'
+builtins. Each attribute applies to all members of an array.
+
+ Arrays are assigned to using compound assignments of the form
+ name=(value1 ... valueN)
+
+where each VALUE is of the form `[[SUBSCRIPT]=]'STRING. If the
+optional subscript is supplied, that index is assigned to; otherwise
+the index of the element assigned is the last index assigned to by the
+statement plus one. Indexing starts at zero. This syntax is also
+accepted by the `declare' builtin. Individual array elements may be
+assigned to using the `name['SUBSCRIPT`]='VALUE syntax introduced above.
+
+ Any element of an array may be referenced using
+`${name['SUBSCRIPT`]}'. The braces are required to avoid conflicts
+with the shell's filename expansion operators. If the SUBSCRIPT is `@'
+or `*', the word expands to all members of the array NAME. These
+subscripts differ only when the word appears within double quotes. If
+the word is double-quoted, `${name[*]}' expands to a single word with
+the value of each array member separated by the first character of the
+`IFS' variable, and `${name[@]}' expands each element of NAME to a
+separate word. When there are no array members, `${name[@]}' expands
+to nothing. This is analogous to the expansion of the special
+parameters `@' and `*'. `${#name['SUBSCRIPT`]}' expands to the length
+of `${name['SUBSCRIPT`]}'. If SUBSCRIPT is `@' or `*', the expansion
+is the number of elements in the array. Referencing an array variable
+without a subscript is equivalent to referencing element zero.
+
+ The `unset' builtin is used to destroy arrays. `unset'
+NAME[SUBSCRIPT] destroys the array element at index SUBSCRIPT. `unset'
+NAME, where NAME is an array, removes the entire array. A subscript of
+`*' or `@' also removes the entire array.
+
+ The `declare', `local', and `readonly' builtins each accept a `-a'
+option to specify an array. The `read' builtin accepts a `-a' option
+to assign a list of words read from the standard input to an array, and
+can read values from the standard input into individual array elements.
+The `set' and `declare' builtins display array values in a way that
+allows them to be reused as input.
+
+
+File: bashref.info, Node: Printing a Prompt, Next: The Restricted Shell, Prev: Arrays, Up: Bash Features
+
+Controlling the Prompt
+======================
+
+ The value of the variable `PROMPT_COMMAND' is examined just before
+Bash prints each primary prompt. If it is set and non-null, then the
+value is executed just as if you had typed it on the command line.
+
+ In addition, the following table describes the special characters
+which can appear in the prompt variables:
+
+`\a'
+ a bell character.
+
+`\d'
+ the date, in "Weekday Month Date" format (e.g., "Tue May 26").
+
+`\e'
+ an escape character.
+
+`\h'
+ the hostname, up to the first `.'.
+
+`\H'
+ the hostname.
+
+`\n'
+ newline.
+
+`\s'
+ the name of the shell, the basename of `$0' (the portion following
+ the final slash).
+
+`\t'
+ the time, in 24-hour HH:MM:SS format.
+
+`\T'
+ the time, in 12-hour HH:MM:SS format.
+
+`\@'
+ the time, in 12-hour am/pm format.
+
+`\v'
+ the version of Bash (e.g., 2.00)
+
+`\V'
+ the release of Bash, version + patchlevel (e.g., 2.00.0)
+
+`\w'
+ the current working directory.
+
+`\W'
+ the basename of `$PWD'.
+
+`\u'
+ your username.
+
+`\!'
+ the history number of this command.
+
+`\#'
+ the command number of this command.
+
+`\$'
+ if the effective uid is 0, `#', otherwise `$'.
+
+`\nnn'
+ the character corresponding to the octal number `nnn'.
+
+`\\'
+ a backslash.
+
+`\['
+ begin a sequence of non-printing characters. This could be used to
+ embed a terminal control sequence into the prompt.
+
+`\]'
+ end a sequence of non-printing characters.
+
+
+File: bashref.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: Printing a Prompt, Up: Bash Features
+
+The Restricted Shell
+====================
+
+ If Bash is started with the name `rbash', or the `--restricted'
+option is supplied at invocation, the shell becomes restricted. A
+restricted shell is used to set up an environment more controlled than
+the standard shell. A restricted shell behaves identically to `bash'
+with the exception that the following are disallowed:
+ * Changing directories with the `cd' builtin.
+
+ * Setting or unsetting the values of the `SHELL' or `PATH' variables.
+
+ * Specifying command names containing slashes.
+
+ * Specifying a filename containing a slash as an argument to the `.'
+ builtin command.
+
+ * Importing function definitions from the shell environment at
+ startup.
+
+ * Redirecting output using the `>', `>|', `<>', `>&', `&>', and `>>'
+ redirection operators.
+
+ * Using the `exec' builtin to replace the shell with another command.
+
+ * Adding or deleting builtin commands with the `-f' and `-d' options
+ to the `enable' builtin.
+
+ * Specifying the `-p' option to the `command' builtin.
+
+ * Turning off restricted mode with `set +r'.
+
+
+File: bashref.info, Node: Bash POSIX Mode, Prev: The Restricted Shell, Up: Bash Features
+
+Bash POSIX Mode
+===============
+
+ Starting Bash with the `--posix' command-line option or executing
+`set -o posix' while Bash is running will cause Bash to conform more
+closely to the POSIX.2 standard by changing the behavior to match that
+specified by POSIX.2 in areas where the Bash default differs.
+
+ The following list is what's changed when `POSIX mode' is in effect:
+
+ 1. When a command in the hash table no longer exists, Bash will
+ re-search `$PATH' to find the new location. This is also
+ available with `shopt -s checkhash'.
+
+ 2. The `>&' redirection does not redirect stdout and stderr.
+
+ 3. The message printed by the job control code and builtins when a job
+ exits with a non-zero status is `Done(status)'.
+
+ 4. Reserved words may not be aliased.
+
+ 5. The POSIX.2 `PS1' and `PS2' expansions of `!' to the history
+ number and `!!' to `!' are enabled, and parameter expansion is
+ performed on the value regardless of the setting of the
+ `promptvars' option.
+
+ 6. Interactive comments are enabled by default. (Note that Bash has
+ them on by default anyway.)
+
+ 7. The POSIX.2 startup files are executed (`$ENV') rather than the
+ normal Bash files.
+
+ 8. Tilde expansion is only performed on assignments preceding a
+ command name, rather than on all assignment statements on the line.
+
+ 9. The default history file is `~/.sh_history' (this is the default
+ value of `$HISTFILE').
+
+ 10. The output of `kill -l' prints all the signal names on a single
+ line, separated by spaces.
+
+ 11. Non-interactive shells exit if FILENAME in `.' FILENAME is not
+ found.
+
+ 12. Redirection operators do not perform filename expansion on the word
+ in the redirection unless the shell is interactive.
+
+ 13. Function names must be valid shell `name's. That is, they may not
+ contain characters other than letters, digits, and underscores, and
+ may not start with a digit. Declaring a function with an illegal
+ name causes a fatal syntax error in non-interactive shells.
+
+ 14. POSIX.2 `special' builtins are found before shell functions during
+ command lookup.
+
+ 15. If a POSIX.2 special builtin returns an error status, a
+ non-interactive shell exits. The fatal errors are those listed in
+ the POSIX.2 standard, and include things like passing incorrect
+ options, redirection errors, variable assignment errors for
+ assignments preceding the command name, and so on.
+
+ 16. If the `cd' builtin finds a directory to change to using
+ `$CDPATH', the value it assigns to the `PWD' variable does not
+ contain any symbolic links, as if `cd -P' had been executed.
+
+ 17. A non-interactive shell exits with an error status if a variable
+ assignment error occurs when no command name follows the assignment
+ statements. A variable assignment error occurs, for example, when
+ trying to assign a value to a read-only variable.
+
+ 18. A non-interactive shell exits with an error status if the iteration
+ variable in a `for' statement or the selection variable in a
+ `select' statement is a read-only variable.
+
+ 19. Process substitution is not available.
+
+ 20. Assignment statements preceding POSIX.2 `special' builtins persist
+ in the shell environment after the builtin completes.
+
+
+ There is other POSIX.2 behavior that Bash does not implement.
+Specifically:
+
+ 1. Assignment statements affect the execution environment of all
+ builtins, not just special ones.
+
+
+File: bashref.info, Node: Job Control, Next: Using History Interactively, Prev: Bash Features, Up: Top
+
+Job Control
+***********
+
+ This chapter disusses what job control is, how it works, and how
+Bash allows you to access its facilities.
+
+* Menu:
+
+* Job Control Basics:: How job control works.
+* Job Control Builtins:: Bash builtin commands used to interact
+ with job control.
+* Job Control Variables:: Variables Bash uses to customize job
+ control.
+
+
+File: bashref.info, Node: Job Control Basics, Next: Job Control Builtins, Up: Job Control
+
+Job Control Basics
+==================
+
+ Job control refers to the ability to selectively stop (suspend) the
+execution of processes and continue (resume) their execution at a later
+point. A user typically employs this facility via an interactive
+interface supplied jointly by the system's terminal driver and Bash.
+
+ The shell associates a JOB with each pipeline. It keeps a table of
+currently executing jobs, which may be listed with the `jobs' command.
+When Bash starts a job asynchronously (in the background), it prints a
+line that looks like:
+ [1] 25647
+
+indicating that this job is job number 1 and that the process ID of the
+last process in the pipeline associated with this job is 25647. All of
+the processes in a single pipeline are members of the same job. Bash
+uses the JOB abstraction as the basis for job control.
+
+ To facilitate the implementation of the user interface to job
+control, the system maintains the notion of a current terminal process
+group ID. Members of this process group (processes whose process group
+ID is equal to the current terminal process group ID) receive
+keyboard-generated signals such as `SIGINT'. These processes are said
+to be in the foreground. Background processes are those whose process
+group ID differs from the terminal's; such processes are immune to
+keyboard-generated signals. Only foreground processes are allowed to
+read from or write to the terminal. Background processes which attempt
+to read from (write to) the terminal are sent a `SIGTTIN' (`SIGTTOU')
+signal by the terminal driver, which, unless caught, suspends the
+process.
+
+ If the operating system on which Bash is running supports job
+control, Bash allows you to use it. Typing the SUSPEND character
+(typically `^Z', Control-Z) while a process is running causes that
+process to be stopped and returns you to Bash. Typing the DELAYED
+SUSPEND character (typically `^Y', Control-Y) causes the process to be
+stopped when it attempts to read input from the terminal, and control to
+be returned to Bash. You may then manipulate the state of this job,
+using the `bg' command to continue it in the background, the `fg'
+command to continue it in the foreground, or the `kill' command to kill
+it. A `^Z' takes effect immediately, and has the additional side
+effect of causing pending output and typeahead to be discarded.
+
+ There are a number of ways to refer to a job in the shell. The
+character `%' introduces a job name. Job number `n' may be referred to
+as `%n'. A job may also be referred to using a prefix of the name used
+to start it, or using a substring that appears in its command line.
+For example, `%ce' refers to a stopped `ce' job. Using `%?ce', on the
+other hand, refers to any job containing the string `ce' in its command
+line. If the prefix or substring matches more than one job, Bash
+reports an error. The symbols `%%' and `%+' refer to the shell's
+notion of the current job, which is the last job stopped while it was
+in the foreground. The previous job may be referenced using `%-'. In
+output pertaining to jobs (e.g., the output of the `jobs' command), the
+current job is always flagged with a `+', and the previous job with a
+`-'.
+
+ Simply naming a job can be used to bring it into the foreground:
+`%1' is a synonym for `fg %1', bringing job 1 from the background into
+the foreground. Similarly, `%1 &' resumes job 1 in the background,
+equivalent to `bg %1'
+
+ The shell learns immediately whenever a job changes state.
+Normally, Bash waits until it is about to print a prompt before
+reporting changes in a job's status so as to not interrupt any other
+output. If the the `-b' option to the `set' builtin is set, Bash
+reports such changes immediately (*note The Set Builtin::.).
+
+ If you attempt to exit Bash while jobs are stopped, the shell prints
+a message warning you that you have stopped jobs. You may then use the
+`jobs' command to inspect their status. If you do this, or try to exit
+again immediately, you are not warned again, and the stopped jobs are
+terminated.
+
+
+File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, Prev: Job Control Basics, Up: Job Control
+
+Job Control Builtins
+====================
+
+`bg'
+ bg [JOBSPEC]
+ Place JOBSPEC into the background, as if it had been started with
+ `&'. If JOBSPEC is not supplied, the current job is used.
+
+`fg'
+ fg [JOBSPEC]
+ Bring JOBSPEC into the foreground and make it the current job. If
+ JOBSPEC is not supplied, the current job is used.
+
+`jobs'
+ jobs [-lpnrs] [JOBSPEC]
+ jobs -x COMMAND [JOBSPEC]
+
+ The first form lists the active jobs. The options have the
+ following meanings:
+
+ `-l'
+ List process IDs in addition to the normal information
+
+ `-n'
+ Display information only about jobs that have changed status
+ since you were last notified of their status.
+
+ `-p'
+ List only the process ID of the job's process group leader.
+
+ `-r'
+ Restrict output to running jobs.
+
+ `-s'
+ Restrict output to stopped jobs.
+
+ If JOBSPEC is given, output is restricted to information about
+ that job. If JOBSPEC is not supplied, the status of all jobs is
+ listed.
+
+ If the `-x' option is supplied, `jobs' replaces any JOBSPEC found
+ in COMMAND or ARGUMENTS with the corresponding process group ID,
+ and executes COMMAND, passing it ARGUMENTs, returning its exit
+ status.
+
+`kill'
+ kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC
+ kill -l [SIGSPEC]
+ Send a signal specified by SIGSPEC or SIGNUM to the process named
+ by JOBSPEC. SIGSPEC is either a signal name such as `SIGINT' or a
+ signal number; SIGNUM is a signal number. If SIGSPEC and SIGNUM
+ are not present, `SIGTERM' is used. The `-l' option lists the
+ signal names, or the signal name corresponding to SIGSPEC.
+
+`wait'
+ wait [JOBSPEC|PID]
+ Wait until the child process specified by process ID PID or job
+ specification JOBSPEC exits and report its exit status. If a job
+ spec is given, all processes in the job are waited for. If no
+ arguments are given, all currently active child processes are
+ waited for.
+
+`disown'
+ disown [-h] [JOBSPEC ...]
+ Without options, each JOBSPEC is removed from the table of active
+ jobs. If the `-h' option is given, the job is not removed from
+ the table, but is marked so that `SIGHUP' is not sent to the job
+ if the shell receives a `SIGHUP'. If JOBSPEC is not present, the
+ current job is used.
+
+`suspend'
+ suspend [-f]
+ Suspend the execution of this shell until it receives a `SIGCONT'
+ signal. The `-f' option means to suspend even if the shell is a
+ login shell.
+
+ When job control is not active, the `kill' and `wait' builtins do
+not accept JOBSPEC arguments. They must be supplied process IDs.
+
+
+File: bashref.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: Job Control
+
+Job Control Variables
+=====================
+
+`auto_resume'
+ This variable controls how the shell interacts with the user and
+ job control. If this variable exists then single word simple
+ commands without redirects are treated as candidates for resumption
+ of an existing job. There is no ambiguity allowed; if you have
+ more than one job beginning with the string that you have typed,
+ then the most recently accessed job will be selected. The name of
+ a stopped job, in this context, is the command line used to start
+ it. If this variable is set to the value `exact', the string
+ supplied must match the name of a stopped job exactly; if set to
+ `substring', the string supplied needs to match a substring of the
+ name of a stopped job. The `substring' value provides
+ functionality analogous to the `%?' job ID (*note Job Control
+ Basics::.). If set to any other value, the supplied string must
+ be a prefix of a stopped job's name; this provides functionality
+ analogous to the `%' job ID.
+
+
+File: bashref.info, Node: Using History Interactively, Next: Command Line Editing, Prev: Job Control, Up: Top
+
+Using History Interactively
+***************************
+
+ This chapter describes how to use the GNU History Library
+interactively, from a user's standpoint. It should be considered a
+user's guide. For information on using the GNU History Library in your
+own programs, see the GNU Readline Library Manual.
+
+* Menu:
+
+* Bash History Facilities:: How Bash lets you manipulate your command
+ history.
+* History Interaction:: What it feels like using History as a user.
+
+
+File: bashref.info, Node: Bash History Facilities, Next: History Interaction, Up: Using History Interactively
+
+Bash History Facilities
+=======================
+
+ When the `-o history' option to the `set' builtin is enabled (*note
+The Set Builtin::.), the shell provides access to the COMMAND HISTORY,
+the list of commands previously typed. The text of the last `HISTSIZE'
+commands (default 500) is saved in a history list. The shell stores
+each command in the history list prior to parameter and variable
+expansion but after history expansion is performed, subject to the
+values of the shell variables `HISTIGNORE' and `HISTCONTROL'. When the
+shell starts up, the history is initialized from the file named by the
+`HISTFILE' variable (default `~/.bash_history'). `HISTFILE' is
+truncated, if necessary, to contain no more than the number of lines
+specified by the value of the `HISTFILESIZE' variable. When an
+interactive shell exits, the last `HISTSIZE' lines are copied from the
+history list to `HISTFILE'. If the `histappend' shell option is set
+(*note Bash Builtins::.), the lines are appended to the history file,
+otherwise the history file is overwritten. If `HISTFILE' is unset, or
+if the history file is unwritable, the history is not saved. After
+saving the history, the history file is truncated to contain no more
+than `$HISTFILESIZE' lines. If `HISTFILESIZE' is not set, no
+truncation is performed.
+
+ The builtin command `fc' (*note Korn Shell Builtins::.) may be used
+to list or edit and re-execute a portion of the history list. The
+`history' builtin (*note C Shell Builtins::.) can be used to display or
+modify the history list and manipulate the history file. When using
+the command-line editing, search commands are available in each editing
+mode that provide access to the history list.
+
+ The shell allows control over which commands are saved on the history
+list. The `HISTCONTROL' and `HISTIGNORE' variables may be set to cause
+the shell to save only a subset of the commands entered. The `cmdhist'
+shell option, if enabled, causes the shell to attempt to save each line
+of a multi-line command in the same history entry, adding semicolons
+where necessary to preserve syntactic correctness. The `lithist' shell
+option causes the shell to save the command with embedded newlines
+instead of semicolons. *Note Bash Builtins:: for a description of
+`shopt'.
+
+
+File: bashref.info, Node: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively
+
+Interactive History Expansion
+=============================
+
+ The History library provides a history expansion feature that is
+similar to the history expansion provided by `csh'. This section
+describes the syntax used to manipulate the history information.
+
+ History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments
+to a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+ History expansion takes place in two parts. The first is to
+determine which line from the previous history should be used during
+substitution. The second is to select portions of that line for
+inclusion into the current one. The line selected from the previous
+history is called the "event", and the portions of that line that are
+acted upon are called "words". Various "modifiers" are available to
+manipulate the selected words. The line is broken into words in the
+same fashion that Bash does, so that several English (or Unix) words
+surrounded by quotes are considered as one word. History expansions
+are introduced by the appearance of the history expansion character,
+which is `!' by default. Only `\' and `'' may be used to escape the
+history expansion character.
+
+ Several shell options settable with the `shopt' builtin (*note Bash
+Builtins::.) may be used to tailor the behavior of history expansion.
+If the `histverify' shell option is enabled, and Readline is being
+used, history substitutions are not immediately passed to the shell
+parser. Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification. If Readline is being used,
+and the `histreedit' shell option is enabled, a failed history
+expansion will be reloaded into the Readline editing buffer for
+correction. The `-p' option to the `history' builtin command may be
+used to see what a history expansion will do before using it. The `-s'
+option to the `history' builtin may be used to add commands to the end
+of the history list without actually executing them, so that they are
+available for subsequent recall.
+
+ The shell allows control of the various characters used by the
+history expansion mechanism with the `histchars' variable.
+
+* Menu:
+
+* Event Designators:: How to specify which history line to use.
+* Word Designators:: Specifying which words are of interest.
+* Modifiers:: Modifying the results of substitution.
+
+
+File: bashref.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
+
+Event Designators
+-----------------
+
+ An event designator is a reference to a command line entry in the
+history list.
+
+`!'
+ Start a history substitution, except when followed by a space, tab,
+ the end of the line, = or (.
+
+`!N'
+ Refer to command line N.
+
+`!-N'
+ Refer to the command N lines back.
+
+`!!'
+ Refer to the previous command. This is a synonym for `!-1'.
+
+`!STRING'
+ Refer to the most recent command starting with STRING.
+
+`!?STRING[?]'
+ Refer to the most recent command containing STRING. The trailing
+ `?' may be omitted if the STRING is followed immediately by a
+ newline.
+
+`^STRING1^STRING2^'
+ Quick Substitution. Repeat the last command, replacing STRING1
+ with STRING2. Equivalent to `!!:s/STRING1/STRING2/'.
+
+`!#'
+ The entire command line typed so far.
+
+
+File: bashref.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
+
+Word Designators
+----------------
+
+ Word designators are used to select desired words from the event. A
+`:' separates the event specification from the word designator. It can
+be omitted if the word designator begins with a `^', `$', `*', `-', or
+`%'. Words are numbered from the beginning of the line, with the first
+word being denoted by 0 (zero). Words are inserted into the current
+line separated by single spaces.
+
+`0 (zero)'
+ The `0'th word. For many applications, this is the command word.
+
+`N'
+ The Nth word.
+
+`^'
+ The first argument; that is, word 1.
+
+`$'
+ The last argument.
+
+`%'
+ The word matched by the most recent `?STRING?' search.
+
+`X-Y'
+ A range of words; `-Y' abbreviates `0-Y'.
+
+`*'
+ All of the words, except the `0'th. This is a synonym for `1-$'.
+ It is not an error to use `*' if there is just one word in the
+ event; the empty string is returned in that case.
+
+`X*'
+ Abbreviates `X-$'
+
+`X-'
+ Abbreviates `X-$' like `X*', but omits the last word.
+
+ If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+
+File: bashref.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
+
+Modifiers
+---------
+
+ After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a `:'.
+
+`h'
+ Remove a trailing pathname component, leaving only the head.
+
+`t'
+ Remove all leading pathname components, leaving the tail.
+
+`r'
+ Remove a trailing suffix of the form `.SUFFIX', leaving the
+ basename.
+
+`e'
+ Remove all but the trailing suffix.
+
+`p'
+ Print the new command but do not execute it.
+
+`q'
+ Quote the substituted words, escaping further substitutions.
+
+`x'
+ Quote the substituted words as with `q', but break into words at
+ spaces, tabs, and newlines.
+
+`s/OLD/NEW/'
+ Substitute NEW for the first occurrence of OLD in the event line.
+ Any delimiter may be used in place of `/'. The delimiter may be
+ quoted in OLD and NEW with a single backslash. If `&' appears in
+ NEW, it is replaced by OLD. A single backslash will quote the
+ `&'. The final delimiter is optional if it is the last character
+ on the input line.
+
+`&'
+ Repeat the previous substitution.
+
+`g'
+ Cause changes to be applied over the entire event line. Used in
+ conjunction with `s', as in `gs/OLD/NEW/', or with `&'.
+
+
+File: bashref.info, Node: Command Line Editing, Next: Installing Bash, Prev: Using History Interactively, Up: Top
+
+Command Line Editing
+********************
+
+ This chapter describes the basic features of the GNU command line
+editing interface.
+
+* Menu:
+
+* Introduction and Notation:: Notation used in this text.
+* Readline Interaction:: The minimum set of commands for editing a line.
+* Readline Init File:: Customizing Readline from a user's view.
+* Bindable Readline Commands:: A description of most of the Readline commands
+ available for binding
+* Readline vi Mode:: A short description of how to make Readline
+ behave like the vi editor.
+
+
+File: bashref.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
+
+Introduction to Line Editing
+============================
+
+ The following paragraphs describe the notation used to represent
+keystrokes.
+
+ The text C-k is read as `Control-K' and describes the character
+produced when the k key is pressed while the Control key is depressed.
+
+ The text M-k is read as `Meta-K' and describes the character
+produced when the meta key (if you have one) is depressed, and the k
+key is pressed. If you do not have a meta key, the identical keystroke
+can be generated by typing ESC first, and then typing k. Either
+process is known as "metafying" the k key.
+
+ The text M-C-k is read as `Meta-Control-k' and describes the
+character produced by "metafying" C-k.
+
+ In addition, several keys have their own names. Specifically, DEL,
+ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this
+text, or in an init file (*note Readline Init File::.).
+
+
+File: bashref.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
+
+Readline Interaction
+====================
+
+ Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled. The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line. Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections. Then, when you are satisfied with
+the line, you simply press RETURN. You do not have to be at the end of
+the line to press RETURN; the entire line is accepted regardless of the
+location of the cursor within the line.
+
+* Menu:
+
+* Readline Bare Essentials:: The least you need to know about Readline.
+* Readline Movement Commands:: Moving about the input line.
+* Readline Killing Commands:: How to delete text, and how to get it back!
+* Readline Arguments:: Giving numeric arguments to commands.
+* Searching:: Searching through previous lines.
+
+
+File: bashref.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
+
+Readline Bare Essentials
+------------------------
+
+ In order to enter characters into the line, simply type them. The
+typed character appears where the cursor was, and then the cursor moves
+one space to the right. If you mistype a character, you can use your
+erase character to back up and delete the mistyped character.
+
+ Sometimes you may miss typing a character that you wanted to type,
+and not notice your error until you have typed several other
+characters. In that case, you can type C-b to move the cursor to the
+left, and then correct your mistake. Afterwards, you can move the
+cursor to the right with C-f.
+
+ When you add text in the middle of a line, you will notice that
+characters to the right of the cursor are `pushed over' to make room
+for the text that you have inserted. Likewise, when you delete text
+behind the cursor, characters to the right of the cursor are `pulled
+back' to fill in the blank space created by the removal of the text. A
+list of the basic bare essentials for editing the text of an input line
+follows.
+
+C-b
+ Move back one character.
+
+C-f
+ Move forward one character.
+
+DEL
+ Delete the character to the left of the cursor.
+
+C-d
+ Delete the character underneath the cursor.
+
+Printing characters
+ Insert the character into the line at the cursor.
+
+C-_
+ Undo the last thing that you did. You can undo all the way back
+ to an empty line.
+
+
+File: bashref.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
+
+Readline Movement Commands
+--------------------------
+
+ The above table describes the most basic possible keystrokes that
+you need in order to do editing of the input line. For your
+convenience, many other commands have been added in addition to C-b,
+C-f, C-d, and DEL. Here are some commands for moving more rapidly
+about the line.
+
+C-a
+ Move to the start of the line.
+
+C-e
+ Move to the end of the line.
+
+M-f
+ Move forward a word.
+
+M-b
+ Move backward a word.
+
+C-l
+ Clear the screen, reprinting the current line at the top.
+
+ Notice how C-f moves forward a character, while M-f moves forward a
+word. It is a loose convention that control keystrokes operate on
+characters while meta keystrokes operate on words.
+
+
+File: bashref.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
+
+Readline Killing Commands
+-------------------------
+
+ "Killing" text means to delete the text from the line, but to save
+it away for later use, usually by "yanking" (re-inserting) it back into
+the line. If the description for a command says that it `kills' text,
+then you can be sure that you can get the text back in a different (or
+the same) place later.
+
+ When you use a kill command, the text is saved in a "kill-ring".
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all. The kill ring is not line
+specific; the text that you killed on a previously typed line is
+available to be yanked back later, when you are typing another line.
+
+ Here is the list of commands for killing text.
+
+C-k
+ Kill the text from the current cursor position to the end of the
+ line.
+
+M-d
+ Kill from the cursor to the end of the current word, or if between
+ words, to the end of the next word.
+
+M-DEL
+ Kill from the cursor the start of the previous word, or if between
+ words, to the start of the previous word.
+
+C-w
+ Kill from the cursor to the previous whitespace. This is
+ different than M-DEL because the word boundaries differ.
+
+ And, here is how to "yank" the text back into the line. Yanking
+means to copy the most-recently-killed text from the kill buffer.
+
+C-y
+ Yank the most recently killed text back into the buffer at the
+ cursor.
+
+M-y
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is C-y or M-y.
+
+
+File: bashref.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
+
+Readline Arguments
+------------------
+
+ You can pass numeric arguments to Readline commands. Sometimes the
+argument acts as a repeat count, other times it is the sign of the
+argument that is significant. If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction. For example, to kill text back to the
+start of the line, you might type `M-- C-k'.
+
+ The general way to pass numeric arguments to a command is to type
+meta digits before the command. If the first `digit' you type is a
+minus sign (-), then the sign of the argument will be negative. Once
+you have typed one meta digit to get the argument started, you can type
+the remainder of the digits, and then the command. For example, to give
+the C-d command an argument of 10, you could type `M-1 0 C-d'.
+
+
+File: bashref.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction
+
+Searching for Commands in the History
+-------------------------------------
+
+ Readline provides commands for searching through the command history
+(*note Bash History Facilities::.) for lines containing a specified
+string. There are two search modes: INCREMENTAL and NON-INCREMENTAL.
+
+ Incremental searches begin before the user has finished typing the
+search string. As each character of the search string is typed,
+readline displays the next entry from the history matching the string
+typed so far. An incremental search requires only as many characters
+as needed to find the desired history entry. The Escape character is
+used to terminate an incremental search. Control-J will also terminate
+the search. Control-G will abort an incremental search and restore the
+original line. When the search is terminated, the history entry
+containing the search string becomes the current line. To find other
+matching entries in the history list, type Control-S or Control-R as
+appropriate. This will search backward or forward in the history for
+the next entry matching the search string typed so far. Any other key
+sequence bound to a readline command will terminate the search and
+execute that command. For instance, a `newline' will terminate the
+search and accept the line, thereby executing the command from the
+history list.
+
+ Non-incremental searches read the entire search string before
+starting to search for matching history lines. The search string may be
+typed by the user or part of the contents of the current line.
+
+
+File: bashref.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
+
+Readline Init File
+==================
+
+ Although the Readline library comes with a set of `emacs'-like
+keybindings installed by default, it is possible that you would like to
+use a different set of keybindings. You can customize programs that
+use Readline by putting commands in an "inputrc" file in your home
+directory. The name of this file is taken from the value of the shell
+variable `INPUTRC'. If that variable is unset, the default is
+`~/.inputrc'.
+
+ When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
+
+ In addition, the `C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+* Menu:
+
+* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
+
+* Sample Init File:: An example inputrc file.
+
+
+File: bashref.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
+
+Readline Init File Syntax
+-------------------------
+
+ There are only a few basic constructs allowed in the Readline init
+file. Blank lines are ignored. Lines beginning with a `#' are
+comments. Lines beginning with a `$' indicate conditional constructs
+(*note Conditional Init Constructs::.). Other lines denote variable
+settings and key bindings.
+
+Variable Settings
+ You can change the state of a few variables in Readline by using
+ the `set' command within the init file. Here is how you would
+ specify that you wish to use `vi' line editing commands:
+
+ set editing-mode vi
+
+ Right now, there are only a few variables which can be set; so
+ few, in fact, that we just list them here:
+
+ `bell-style'
+ Controls what happens when Readline wants to ring the
+ terminal bell. If set to `none', Readline never rings the
+ bell. If set to `visible', Readline uses a visible bell if
+ one is available. If set to `audible' (the default),
+ Readline attempts to ring the terminal's bell.
+
+ `comment-begin'
+ The string to insert at the beginning of the line when the
+ `insert-comment' command is executed. The default value is
+ `"#"'.
+
+ `completion-query-items'
+ The number of possible completions that determines when the
+ user is asked whether he wants to see the list of
+ possibilities. If the number of possible completions is
+ greater than this value, Readline will ask the user whether
+ or not he wishes to view them; otherwise, they are simply
+ listed. The default limit is `100'.
+
+ `convert-meta'
+ If set to `on', Readline will convert characters with the
+ eigth bit set to an ASCII key sequence by stripping the eigth
+ bit and prepending an ESC character, converting them to a
+ meta-prefixed key sequence. The default value is `on'.
+
+ `disable-completion'
+ If set to `On', readline will inhibit word completion.
+ Completion characters will be inserted into the line as if
+ they had been mapped to `self-insert'. The default is `off'.
+
+ `editing-mode'
+ The `editing-mode' variable controls which editing mode you
+ are using. By default, Readline starts up in Emacs editing
+ mode, where the keystrokes are most similar to Emacs. This
+ variable can be set to either `emacs' or `vi'.
+
+ `enable-keypad'
+ When set to `on', readline will try to enable the application
+ keypad when it is called. Some systems need this to enable
+ the arrow keys. The default is `off'.
+
+ `expand-tilde'
+ If set to `on', tilde expansion is performed when Readline
+ attempts word completion. The default is `off'.
+
+ `horizontal-scroll-mode'
+ This variable can be set to either `on' or `off'. Setting it
+ to `on' means that the text of the lines that you edit will
+ scroll horizontally on a single screen line when they are
+ longer than the width of the screen, instead of wrapping onto
+ a new screen line. By default, this variable is set to `off'.
+
+ `keymap'
+ Sets Readline's idea of the current keymap for key binding
+ commands. Acceptable `keymap' names are `emacs',
+ `emacs-standard', `emacs-meta', `emacs-ctlx', `vi',
+ `vi-command', and `vi-insert'. `vi' is equivalent to
+ `vi-command'; `emacs' is equivalent to `emacs-standard'. The
+ default value is `emacs'. The value of the `editing-mode'
+ variable also affects the default keymap.
+
+ `mark-directories'
+ If set to `on', completed directory names have a slash
+ appended. The default is `on'.
+
+ `mark-modified-lines'
+ This variable, when set to `on', says to display an asterisk
+ (`*') at the start of history lines which have been modified.
+ This variable is `off' by default.
+
+ `input-meta'
+ If set to `on', Readline will enable eight-bit input (it will
+ not strip the eighth bit from the characters it reads),
+ regardless of what the terminal claims it can support. The
+ default value is `off'. The name `meta-flag' is a synonym
+ for this variable.
+
+ `output-meta'
+ If set to `on', Readline will display characters with the
+ eighth bit set directly rather than as a meta-prefixed escape
+ sequence. The default is `off'.
+
+ `show-all-if-ambiguous'
+ This alters the default behavior of the completion functions.
+ If set to `on', words which have more than one possible
+ completion cause the matches to be listed immediately instead
+ of ringing the bell. The default value is `off'.
+
+ `visible-stats'
+ If set to `on', a character denoting a file's type is
+ appended to the filename when listing possible completions.
+ The default is `off'.
+
+Key Bindings
+ The syntax for controlling key bindings in the init file is
+ simple. First you have to know the name of the command that you
+ want to change. The following pages contain tables of the command
+ name, the default keybinding, and a short description of what the
+ command does.
+
+ Once you know the name of the command, simply place the name of
+ the key you wish to bind the command to, a colon, and then the
+ name of the command on a line in the init file. The name of the
+ key can be expressed in different ways, depending on which is most
+ comfortable for you.
+
+ KEYNAME: FUNCTION-NAME or MACRO
+ KEYNAME is the name of a key spelled out in English. For
+ example:
+ Control-u: universal-argument
+ Meta-Rubout: backward-kill-word
+ Control-o: "> output"
+
+ In the above example, `C-u' is bound to the function
+ `universal-argument', and `C-o' is bound to run the macro
+ expressed on the right hand side (that is, to insert the text
+ `> output' into the line).
+
+ "KEYSEQ": FUNCTION-NAME or MACRO
+ KEYSEQ differs from KEYNAME above in that strings denoting an
+ entire key sequence can be specified, by placing the key
+ sequence in double quotes. Some GNU Emacs style key escapes
+ can be used, as in the following example, but the special
+ character names are not recognized.
+
+ "\C-u": universal-argument
+ "\C-x\C-r": re-read-init-file
+ "\e[11~": "Function Key 1"
+
+ In the above example, `C-u' is bound to the function
+ `universal-argument' (just as it was in the first example),
+ `C-x C-r' is bound to the function `re-read-init-file', and
+ `ESC [ 1 1 ~' is bound to insert the text `Function Key 1'.
+ The following escape sequences are available when specifying
+ key sequences:
+
+ ``\C-''
+ control prefix
+
+ ``\M-''
+ meta prefix
+
+ ``\e''
+ an escape character
+
+ ``\\''
+ backslash
+
+ ``\"''
+ "
+
+ ``\'''
+ '
+
+ When entering the text of a macro, single or double quotes
+ should be used to indicate a macro definition. Unquoted text
+ is assumed to be a function name. Backslash will quote any
+ character in the macro text, including `"' and `''. For
+ example, the following binding will make `C-x \' insert a
+ single `\' into the line:
+ "\C-x\\": "\\"
+
+
+File: bashref.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File
+
+Conditional Init Constructs
+---------------------------
+
+ Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key bindings
+and variable settings to be performed as the result of tests. There
+are three parser directives used.
+
+`$if'
+ The `$if' construct allows bindings to be made based on the
+ editing mode, the terminal being used, or the application using
+ Readline. The text of the test extends to the end of the line; no
+ characters are required to isolate it.
+
+ `mode'
+ The `mode=' form of the `$if' directive is used to test
+ whether Readline is in `emacs' or `vi' mode. This may be
+ used in conjunction with the `set keymap' command, for
+ instance, to set bindings in the `emacs-standard' and
+ `emacs-ctlx' keymaps only if Readline is starting out in
+ `emacs' mode.
+
+ `term'
+ The `term=' form may be used to include terminal-specific key
+ bindings, perhaps to bind the key sequences output by the
+ terminal's function keys. The word on the right side of the
+ `=' is tested against the full name of the terminal and the
+ portion of the terminal name before the first `-'. This
+ allows `sun' to match both `sun' and `sun-cmd', for instance.
+
+ `application'
+ The APPLICATION construct is used to include
+ application-specific settings. Each program using the
+ Readline library sets the APPLICATION NAME, and you can test
+ for it. This could be used to bind key sequences to
+ functions useful for a specific program. For instance, the
+ following command adds a key sequence that quotes the current
+ or previous word in Bash:
+ $if Bash
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ $endif
+
+`$endif'
+ This command, as you saw in the previous example, terminates an
+ `$if' command.
+
+`$else'
+ Commands in this branch of the `$if' directive are executed if the
+ test fails.
+
+
+File: bashref.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
+
+Sample Init File
+----------------
+
+ Here is an example of an inputrc file. This illustrates key
+binding, variable assignment, and conditional syntax.
+
+
+ # This file controls the behaviour of line input editing for
+ # programs that use the Gnu Readline library. Existing programs
+ # include FTP, Bash, and Gdb.
+ #
+ # You can re-read the inputrc file with C-x C-r.
+ # Lines beginning with '#' are comments.
+ #
+ # Set various bindings for emacs mode.
+
+ set editing-mode emacs
+
+ $if mode=emacs
+
+ Meta-Control-h: backward-kill-word Text after the function name is ignored
+
+ #
+ # Arrow keys in keypad mode
+ #
+ #"\M-OD" backward-char
+ #"\M-OC" forward-char
+ #"\M-OA" previous-history
+ #"\M-OB" next-history
+ #
+ # Arrow keys in ANSI mode
+ #
+ "\M-[D" backward-char
+ "\M-[C" forward-char
+ "\M-[A" previous-history
+ "\M-[B" next-history
+ #
+ # Arrow keys in 8 bit keypad mode
+ #
+ #"\M-\C-OD" backward-char
+ #"\M-\C-OC" forward-char
+ #"\M-\C-OA" previous-history
+ #"\M-\C-OB" next-history
+ #
+ # Arrow keys in 8 bit ANSI mode
+ #
+ #"\M-\C-[D" backward-char
+ #"\M-\C-[C" forward-char
+ #"\M-\C-[A" previous-history
+ #"\M-\C-[B" next-history
+
+ C-q: quoted-insert
+
+ $endif
+
+ # An old-style binding. This happens to be the default.
+ TAB: complete
+
+ # Macros that are convenient for shell interaction
+ $if Bash
+ # edit the path
+ "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+ # prepare to type a quoted word -- insert open and close double quotes
+ # and move to just after the open quote
+ "\C-x\"": "\"\"\C-b"
+ # insert a backslash (testing backslash escapes in sequences and macros)
+ "\C-x\\": "\\"
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ # Add a binding to refresh the line, which is unbound
+ "\C-xr": redraw-current-line
+ # Edit variable on current line.
+ "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+ $endif
+
+ # use a visible bell if one is available
+ set bell-style visible
+
+ # don't strip characters to 7 bits when reading
+ set input-meta on
+
+ # allow iso-latin1 characters to be inserted rather than converted to
+ # prefix-meta sequences
+ set convert-meta off
+
+ # display characters with the eighth bit set directly rather than
+ # as meta-prefixed characters
+ set output-meta on
+
+ # if there are more than 150 possible completions for a word, ask the
+ # user if he wants to see all of them
+ set completion-query-items 150
+
+ # For FTP
+ $if Ftp
+ "\C-xg": "get \M-?"
+ "\C-xt": "put \M-?"
+ "\M-.": yank-last-arg
+ $endif
+
+
+File: bashref.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
+
+Bindable Readline Commands
+==========================
+
+* Menu:
+
+* Commands For Moving:: Moving about the line.
+* Commands For History:: Getting at previous lines.
+* Commands For Text:: Commands for changing text.
+* Commands For Killing:: Commands for killing and yanking.
+* Numeric Arguments:: Specifying numeric arguments, repeat counts.
+* Commands For Completion:: Getting Readline to do the typing for you.
+* Keyboard Macros:: Saving and re-executing typed characters
+* Miscellaneous Commands:: Other miscellaneous commands.
+
+ This section describes Readline commands that may be bound to key
+sequences.
+
+
+File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
+
+Commands For Moving
+-------------------
+
+`beginning-of-line (C-a)'
+ Move to the start of the current line.
+
+`end-of-line (C-e)'
+ Move to the end of the line.
+
+`forward-char (C-f)'
+ Move forward a character.
+
+`backward-char (C-b)'
+ Move back a character.
+
+`forward-word (M-f)'
+ Move forward to the end of the next word. Words are composed of
+ letters and digits.
+
+`backward-word (M-b)'
+ Move back to the start of this, or the previous, word. Words are
+ composed of letters and digits.
+
+`clear-screen (C-l)'
+ Clear the screen and redraw the current line, leaving the current
+ line at the top of the screen.
+
+`redraw-current-line ()'
+ Refresh the current line. By default, this is unbound.
+
+
+File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
+
+Commands For Manipulating The History
+-------------------------------------
+
+`accept-line (Newline, Return)'
+ Accept the line regardless of where the cursor is. If this line is
+ non-empty, add it to the history list according to the setting of
+ the `HISTCONTROL' variable. If this line was a history line, then
+ restore the history line to its original state.
+
+`previous-history (C-p)'
+ Move `up' through the history list.
+
+`next-history (C-n)'
+ Move `down' through the history list.
+
+`beginning-of-history (M-<)'
+ Move to the first line in the history.
+
+`end-of-history (M->)'
+ Move to the end of the input history, i.e., the line you are
+ entering.
+
+`reverse-search-history (C-r)'
+ Search backward starting at the current line and moving `up'
+ through the history as necessary. This is an incremental search.
+
+`forward-search-history (C-s)'
+ Search forward starting at the current line and moving `down'
+ through the the history as necessary. This is an incremental
+ search.
+
+`non-incremental-reverse-search-history (M-p)'
+ Search backward starting at the current line and moving `up'
+ through the history as necessary using a non-incremental search
+ for a string supplied by the user.
+
+`non-incremental-forward-search-history (M-n)'
+ Search forward starting at the current line and moving `down'
+ through the the history as necessary using a non-incremental search
+ for a string supplied by the user.
+
+`history-search-forward ()'
+ Search forward through the history for the string of characters
+ between the start of the current line and the current cursor
+ position (the `point'). This is a non-incremental search. By
+ default, this command is unbound.
+
+`history-search-backward ()'
+ Search backward through the history for the string of characters
+ between the start of the current line and the point. This is a
+ non-incremental search. By default, this command is unbound.
+
+`yank-nth-arg (M-C-y)'
+ Insert the first argument to the previous command (usually the
+ second word on the previous line). With an argument N, insert the
+ Nth word from the previous command (the words in the previous
+ command begin with word 0). A negative argument inserts the Nth
+ word from the end of the previous command.
+
+`yank-last-arg (M-., M-_)'
+ Insert last argument to the previous command (the last word of the
+ previous history entry). With an argument, behave exactly like
+ `yank-nth-arg'.
+
+
+File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
+
+Commands For Changing Text
+--------------------------
+
+`delete-char (C-d)'
+ Delete the character under the cursor. If the cursor is at the
+ beginning of the line, there are no characters in the line, and
+ the last character typed was not `C-d', then return `EOF'.
+
+`backward-delete-char (Rubout)'
+ Delete the character behind the cursor. A numeric arg says to kill
+ the characters instead of deleting them.
+
+`quoted-insert (C-q, C-v)'
+ Add the next character that you type to the line verbatim. This is
+ how to insert key sequences like C-q, for example.
+
+`tab-insert (M-TAB)'
+ Insert a tab character.
+
+`self-insert (a, b, A, 1, !, ...)'
+ Insert yourself.
+
+`transpose-chars (C-t)'
+ Drag the character before the cursor forward over the character at
+ the cursor, moving the cursor forward as well. If the insertion
+ point is at the end of the line, then this transposes the last two
+ characters of the line. Negative argumentss don't work.
+
+`transpose-words (M-t)'
+ Drag the word behind the cursor past the word in front of the
+ cursor moving the cursor over that word as well.
+
+`upcase-word (M-u)'
+ Uppercase the current (or following) word. With a negative
+ argument, do the previous word, but do not move the cursor.
+
+`downcase-word (M-l)'
+ Lowercase the current (or following) word. With a negative
+ argument, do the previous word, but do not move the cursor.
+
+`capitalize-word (M-c)'
+ Capitalize the current (or following) word. With a negative
+ argument, do the previous word, but do not move the cursor.
+
+
+File: bashref.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
+
+Killing And Yanking
+-------------------
+
+`kill-line (C-k)'
+ Kill the text from the current cursor position to the end of the
+ line.
+
+`backward-kill-line (C-x Rubout)'
+ Kill backward to the beginning of the line.
+
+`unix-line-discard (C-u)'
+ Kill backward from the cursor to the beginning of the current line.
+ Save the killed text on the kill-ring.
+
+`kill-whole-line ()'
+ Kill all characters on the current line, no matter where the
+ cursor is. By default, this is unbound.
+
+`kill-word (M-d)'
+ Kill from the cursor to the end of the current word, or if between
+ words, to the end of the next word. Word boundaries are the same
+ as `forward-word'.
+
+`backward-kill-word (M-DEL)'
+ Kill the word behind the cursor. Word boundaries are the same as
+ `backward-word'.
+
+`unix-word-rubout (C-w)'
+ Kill the word behind the cursor, using white space as a word
+ boundary. The killed text is saved on the kill-ring.
+
+`delete-horizontal-space ()'
+ Delete all spaces and tabs around point. By default, this is
+ unbound.
+
+`kill-region ()'
+ Kill the text between the point and the *mark* (saved cursor
+ position. This text is referred to as the REGION. By default,
+ this command is unbound.
+
+`copy-region-as-kill ()'
+ Copy the text in the region to the kill buffer, so you can yank it
+ right away. By default, this command is unbound.
+
+`copy-backward-word ()'
+ Copy the word before point to the kill buffer. By default, this
+ command is unbound.
+
+`copy-forward-word ()'
+ Copy the word following point to the kill buffer. By default,
+ this command is unbound.
+
+`yank (C-y)'
+ Yank the top of the kill ring into the buffer at the current
+ cursor position.
+
+`yank-pop (M-y)'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is yank or yank-pop.
+
+
+File: bashref.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
+
+Specifying Numeric Arguments
+----------------------------
+
+`digit-argument (M-0, M-1, ... M--)'
+ Add this digit to the argument already accumulating, or start a new
+ argument. M- starts a negative argument.
+
+`universal-argument ()'
+ Each time this is executed, the argument count is multiplied by
+ four. The argument count is initially one, so executing this
+ function the first time makes the argument count four. By
+ default, this is not bound to a key.
+
+
+File: bashref.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
+
+Letting Readline Type For You
+-----------------------------
+
+`complete (TAB)'
+ Attempt to do completion on the text before the cursor. This is
+ application-specific. Generally, if you are typing a filename
+ argument, you can do filename completion; if you are typing a
+ command, you can do command completion, if you are typing in a
+ symbol to GDB, you can do symbol name completion, if you are
+ typing in a variable to Bash, you can do variable name completion,
+ and so on. Bash attempts completion treating the text as a
+ variable (if the text begins with `$'), username (if the text
+ begins with `~'), hostname (if the text begins with `@'), or
+ command (including aliases and functions) in turn. If none of
+ these produces a match, filename completion is attempted.
+
+`possible-completions (M-?)'
+ List the possible completions of the text before the cursor.
+
+`insert-completions (M-*)'
+ Insert all completions of the text before point that would have
+ been generated by `possible-completions'.
+
+`complete-filename (M-/)'
+ Attempt filename completion on the text before point.
+
+`possible-filename-completions (C-x /)'
+ List the possible completions of the text before point, treating
+ it as a filename.
+
+`complete-username (M-~)'
+ Attempt completion on the text before point, treating it as a
+ username.
+
+`possible-username-completions (C-x ~)'
+ List the possible completions of the text before point, treating
+ it as a username.
+
+`complete-variable (M-$)'
+ Attempt completion on the text before point, treating it as a
+ shell variable.
+
+`possible-variable-completions (C-x $)'
+ List the possible completions of the text before point, treating
+ it as a shell variable.
+
+`complete-hostname (M-@)'
+ Attempt completion on the text before point, treating it as a
+ hostname.
+
+`possible-hostname-completions (C-x @)'
+ List the possible completions of the text before point, treating
+ it as a hostname.
+
+`complete-command (M-!)'
+ Attempt completion on the text before point, treating it as a
+ command name. Command completion attempts to match the text
+ against aliases, reserved words, shell functions, builtins, and
+ finally executable filenames, in that order.
+
+`possible-command-completions (C-x !)'
+ List the possible completions of the text before point, treating
+ it as a command name.
+
+`dynamic-complete-history (M-TAB)'
+ Attempt completion on the text before point, comparing the text
+ against lines from the history list for possible completion
+ matches.
+
+`complete-into-braces (M-{)'
+ Perform filename completion and return the list of possible
+ completions enclosed within braces so the list is available to the
+ shell (*note Brace Expansion::.).
+
+
+File: bashref.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
+
+Keyboard Macros
+---------------
+
+`start-kbd-macro (C-x ()'
+ Begin saving the characters typed into the current keyboard macro.
+
+`end-kbd-macro (C-x ))'
+ Stop saving the characters typed into the current keyboard macro
+ and save the definition.
+
+`call-last-kbd-macro (C-x e)'
+ Re-execute the last keyboard macro defined, by making the
+ characters in the macro appear as if typed at the keyboard.
+
+
+File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
+
+Some Miscellaneous Commands
+---------------------------
+
+`re-read-init-file (C-x C-r)'
+ Read in the contents of the inputrc file, and incorporate any
+ bindings or variable assignments found there.
+
+`abort (C-g)'
+ Abort the current editing command and ring the terminal's bell
+ (subject to the setting of `bell-style').
+
+`do-uppercase-version (M-a, M-b, M-X, ...)'
+ If the metafied character X is lowercase, run the command that is
+ bound to the corresponding uppercase character.
+
+`prefix-meta (ESC)'
+ Make the next character that you type be metafied. This is for
+ people without a meta key. Typing `ESC f' is equivalent to typing
+ `M-f'.
+
+`undo (C-_, C-x C-u)'
+ Incremental undo, separately remembered for each line.
+
+`revert-line (M-r)'
+ Undo all changes made to this line. This is like typing the `undo'
+ command enough times to get back to the beginning.
+
+`tilde-expand (M-~)'
+ Perform tilde expansion on the current word.
+
+`set-mark (C-@)'
+ Set the mark to the current point. If a numeric argument is
+ supplied, the mark is set to that position.
+
+`exchange-point-and-mark (C-x C-x)'
+ Swap the point with the mark. The current cursor position is set
+ to the saved position, and the old cursor position is saved as the
+ mark.
+
+`character-search (C-])'
+ A character is read and point is moved to the next occurrence of
+ that character. A negative count searches for previous
+ occurrences.
+
+`character-search-backward (M-C-])'
+ A character is read and point is moved to the previous occurrence
+ of that character. A negative count searches for subsequent
+ occurrences.
+
+`insert-comment (M-#)'
+ The value of the `comment-begin' variable is inserted at the
+ beginning of the current line, and the line is accepted as if a
+ newline had been typed. This makes the current line a shell
+ comment.
+
+`dump-functions ()'
+ Print all of the functions and their key bindings to the readline
+ output stream. If a numeric argument is supplied, the output is
+ formatted in such a way that it can be made part of an INPUTRC
+ file. This command is unbound by default.
+
+`dump-variables ()'
+ Print all of the settable variables and their values to the
+ readline output stream. If a numeric argument is supplied, the
+ output is formatted in such a way that it can be made part of an
+ INPUTRC file. This command is unbound by default.
+
+`dump-macros ()'
+ Print all of the readline key sequences bound to macros and the
+ strings they ouput. If a numeric argument is supplied, the output
+ is formatted in such a way that it can be made part of an INPUTRC
+ file. This command is unbound by default.
+
+`glob-expand-word (C-x *)'
+ The word before point is treated as a pattern for pathname
+ expansion, and the list of matching file names is inserted,
+ replacing the word.
+
+`glob-list-expansions (C-x g)'
+ The list of expansions that would have been generated by
+ `glob-expand-word' is inserted into the line, replacing the word
+ before point.
+
+`display-shell-version (C-x C-v)'
+ Display version information about the current instance of Bash.
+
+`shell-expand-line (M-C-e)'
+ Expand the line the way the shell does when it reads it. This
+ performs alias and history expansion as well as all of the shell
+ word expansions.
+
+`history-expand-line (M-^)'
+ Perform history expansion on the current line.
+
+`insert-last-argument (M-., M-_)'
+ A synonym for `yank-last-arg'.
+
+`operate-and-get-next (C-o)'
+ Accept the current line for execution and fetch the next line
+ relative to the current line from the history for editing. Any
+ argument is ignored.
+
+`emacs-editing-mode (C-e)'
+ When in `vi' editing mode, this causes a switch back to `emacs'
+ editing mode, as if the command `set -o emacs' had been executed.
+
+
+File: bashref.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing
+
+Readline vi Mode
+================
+
+ While the Readline library does not have a full set of `vi' editing
+functions, it does contain enough to allow simple editing of the line.
+The Readline `vi' mode behaves as specified in the POSIX 1003.2
+standard.
+
+ In order to switch interactively between `emacs' and `vi' editing
+modes, use the `set -o emacs' and `set -o vi' commands (*note The Set
+Builtin::.). The Readline default is `emacs' mode.
+
+ When you enter a line in `vi' mode, you are already placed in
+`insertion' mode, as if you had typed an `i'. Pressing ESC switches
+you into `command' mode, where you can edit the text of the line with
+the standard `vi' movement keys, move to previous history lines with
+`k' and subsequent lines with `j', and so forth.
+
+
+File: bashref.info, Node: Installing Bash, Next: Reporting Bugs, Prev: Command Line Editing, Up: Top
+
+Installing Bash
+***************
+
+ This chapter provides basic instructions for installing Bash on the
+various supported platforms. The distribution supports nearly every
+version of Unix (and, someday, GNU). Other independent ports exist for
+OS/2, Windows 95, and Windows NT.
+
+* Menu:
+
+* Basic Installation:: Generic installation instructions.
+
+* Compilers and Options:: How to set special options for various
+ systems.
+
+* Compiling For Multiple Architectures:: How to compile Bash for more
+ than one kind of system from
+ the same source tree.
+
+* Installation Names:: How to set the various paths used by the installation.
+
+* Specifying the System Type:: How to configure Bash for a particular system.
+
+* Sharing Defaults:: How to share default configuration values among GNU
+ programs.
+
+* Operation Controls:: Options recognized by the configuration program.
+
+* Optional Features:: How to enable and disable optional features when
+ building Bash.
+
+
+File: bashref.info, Node: Basic Installation, Next: Compilers and Options, Up: Installing Bash
+
+Basic Installation
+==================
+
+ These are generic installation instructions for Bash.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package
+(the top directory, the `builtins' and `doc' directories, and the each
+directory under `lib'). It also creates a `config.h' file containing
+system-dependent definitions. Finally, it creates a shell script named
+`config.status' that you can run in the future to recreate the current
+configuration, a file `config.cache' that saves the results of its
+tests to speed up reconfiguring, and a file `config.log' containing
+compiler output (useful mainly for debugging `configure'). If at some
+point `config.cache' contains results you don't want to keep, you may
+remove or edit it.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether or not to do them,
+and mail diffs or instructions to `bash-maintainers@prep.ai.mit.edu' so
+they can be considered for the next release.
+
+ The file `configure.in' is used to create `configure' by a program
+called Autoconf. You only need `configure.in' if you want to change it
+or regenerate `configure' using a newer version of Autoconf. If you do
+this, make sure you are using Autoconf version 2.9 or newer.
+
+ The simplest way to compile Bash is:
+
+ 1. `cd' to the directory containing the source code and type
+ `./configure' to configure Bash for your system. If you're using
+ `csh' on an old version of System V, you might need to type `sh
+ ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile Bash and build the `bashbug' bug reporting
+ script.
+
+ 3. Optionally, type `make tests' to run the Bash test suite.
+
+ 4. Type `make install' to install `bash' and `bashbug'. This will
+ also install the manual pages and Info file.
+
+
+ You can remove the program binaries and object files from the source
+code directory by typing `make clean'. To also remove the files that
+`configure' created (so you can compile Bash for a different kind of
+computer), type `make distclean'.
+
+
+File: bashref.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+ On systems that have the `env' program, you can do it like this:
+
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+ The configuration process uses GCC to build Bash if it is available.
+
+
+File: bashref.info, Node: Compiling For Multiple Architectures, Next: Installation Names, Prev: Compilers and Options, Up: Installing Bash
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile Bash for more than one kind of computer at the same
+time, by placing the object files for each architecture in their own
+directory. To do this, you must use a version of `make' that supports
+the `VPATH' variable, such as GNU `make'. `cd' to the directory where
+you want the object files and executables to go and run the `configure'
+script from the source directory. You may need to supply the
+`--srcdir=PATH' argument to tell `configure' where the source files
+are. `configure' automatically checks for the source code in the
+directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you can compile Bash for one architecture at a time in the
+source code directory. After you have installed Bash for one
+architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+ Alternatively, if your system supports symbolic links, you can use
+the `support/mkclone' script to create a build tree which has symbolic
+links back to each file in the source directory. Here's an example
+that creates a build directory in the current directory from a source
+directory `/usr/gnu/src/bash-2.0':
+
+ bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+
+The `mkclone' script requires Bash, so you must have already built Bash
+for at least one architecture before you can create build directories
+for other architectures.
+
+
+File: bashref.info, Node: Installation Names, Next: Specifying the System Type, Prev: Compiling For Multiple Architectures, Up: Installing Bash
+
+Installation Names
+==================
+
+ By default, `make install' will install into `/usr/local/bin',
+`/usr/local/man', etc. You can specify an installation prefix other
+than `/usr/local' by giving `configure' the option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+`PATH' as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+
+File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. `TYPE' can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+`CPU-COMPANY-SYSTEM' (e.g., `sparc-sun-sunos4.1.2').
+
+See the file `support/config.sub' for the possible values of each field.
+
+
+File: bashref.info, Node: Sharing Defaults, Next: Operation Controls, Prev: Specifying the System Type, Up: Installing Bash
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: the Bash `configure' looks for a site script, but not all
+`configure' scripts do.
+
+
+File: bashref.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the Bash source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+ `configure' also accepts some other, not widely used, boilerplate
+options.
+
+
+File: bashref.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash
+
+Optional Features
+=================
+
+ The Bash `configure' has a number of `--enable-FEATURE' options,
+where FEATURE indicates an optional part of the package. There are
+also several `--with-PACKAGE' options, where PACKAGE is something like
+`gnu-malloc' or `purify' (for the Purify memory allocation checker). To
+turn off the default use of a package, use `--without-PACKAGE'. To
+configure Bash without a feature that is enabled by default, use
+`--disable-FEATURE'.
+
+ Here is a complete list of the `--enable-' and `--with-' options
+that the Bash `configure' recognizes.
+
+`--with-gnu-malloc'
+ Use the GNU version of `malloc' in `lib/malloc/malloc.c'. This is
+ not the same `malloc' that appears in GNU libc, but an older
+ version derived from the 4.2 BSD `malloc'. This `malloc' is very
+ fast, but wastes a lot of space. This option is enabled by
+ default. The `NOTES' file contains a list of systems for which
+ this should be turned off.
+
+`--with-glibc-malloc'
+ Use the GNU libc version of `malloc' in `lib/malloc/gmalloc.c'.
+ This is somewhat slower than the default `malloc', but wastes
+ considerably less space.
+
+`--with-afs'
+ Define if you are using the Andrew File System from Transarc.
+
+`--with-purify'
+ Define this to use the Purify memory allocation checker from Pure
+ Software.
+
+`--enable-minimal-config'
+ This produces a shell with minimal features, close to the
+ historical Bourne shell.
+
+The `minimal-config' option can be used to disable all of the following
+options, but it is processed first, so individual options may be
+enabled using `enable-FEATURE'.
+
+ All of the following options except for `disabled-builtins' and
+`usg-echo-default' are enabled by default, unless the operating system
+does not provide the necessary support.
+
+`--enable-job-control'
+ This enables job control features, if the OS supports them.
+
+`--enable-alias'
+ Allow alias expansion and include the `alias' and `unalias'
+ builtins.
+
+`--enable-readline'
+ Include support for command-line editing and history with the Bash
+ version of the Readline library.
+
+`--enable-history'
+ Include command history and the `fc' and `history' builtin
+ commands.
+
+`--enable-bang-history'
+ Include support for `csh'-like history substitution.
+
+`--enable-directory-stack'
+ Include support for a `csh'-like directory stack and the `pushd',
+ `popd', and `dirs' builtins.
+
+`--enable-restricted'
+ Include support for a "restricted shell". If this is enabled,
+ Bash, when called as `rbash', enters a restricted mode. See *Note
+ The Restricted Shell::, for a description of restricted mode.
+
+`--enable-process-substitution'
+ This enables process substitution (*note Process Substitution::.)
+ if the OS provides the necessary support.
+
+`--enable-prompt-string-decoding'
+ Turn on the interpretation of a number of backslash-escaped
+ characters in the `$PS1', `$PS2', `$PS3', and `$PS4' prompt
+ strings.
+
+`--enable-select'
+ Include the `ksh' `select' builtin, which allows the generation of
+ simple menus.
+
+`--enable-help-builtin'
+ Include the `help' builtin, which displays help on shell builtins
+ and variables.
+
+`--enable-array-variables'
+ Include support for one-dimensional array shell variables.
+
+`--enable-dparen-arithmetic'
+ Include support for the `ksh' `((...))' command.
+
+`--enable-brace-expansion'
+ Include `csh'-like brace expansion ( `b{a,b}c' ==> `bac bbc' ).
+
+`--enable-disabled-builtins'
+ Allow builtin commands to be invoked via `builtin xxx' even after
+ `xxx' has been disabled using `enable -n xxx'. See *Note Bash
+ Builtins::, for details of the `builtin' and `enable' builtin
+ commands.
+
+`--enable-command-timing'
+ Include support for recognizing `time' as a reserved word and for
+ displaying timing statistics for the pipeline following `time'.
+ This allows pipelines as well as shell builtins and functions to
+ be timed.
+
+`--enable-usg-echo-default'
+ Make the `echo' builtin expand backslash-escaped characters by
+ default, without requiring the `-e' option. This makes the Bash
+ `echo' behave more like the System V version.
+
+ The file `config.h.top' contains C Preprocessor `#define' statements
+for options which are not settable from `configure'. Some of these are
+not meant to be changed; beware of the consequences if you do. Read
+the comments associated with each definition for more information about
+its effect.
+
+
+File: bashref.info, Node: Reporting Bugs, Next: Builtin Index, Prev: Installing Bash, Up: Top
+
+Reporting Bugs
+**************
+
+ Please report all bugs you find in Bash. But first, you should make
+sure that it really is a bug, and that it appears in the latest version
+of Bash that you have.
+
+ Once you have determined that a bug actually exists, use the
+`bashbug' command to submit a bug report. If you have a fix, you are
+welcome to mail that as well! Suggestions and `philosophical' bug
+reports may be mailed to `bug-bash@prep.ai.MIT.Edu' or posted to the
+Usenet newsgroup `gnu.bash.bug'.
+
+ All bug reports should include:
+ * The version number of Bash.
+
+ * The hardware and operating system.
+
+ * The compiler used to compile Bash.
+
+ * A description of the bug behaviour.
+
+ * A short script or `recipe' which exercises the bug and may be used
+ to reproduce it.
+
+`bashbug' inserts the first three items automatically into the template
+it provides for filing a bug report.
+
+ Please send all reports concerning this manual to
+`chet@ins.CWRU.Edu'.
+
+
+File: bashref.info, Node: Builtin Index, Next: Reserved Word Index, Prev: Reporting Bugs, Up: Top
+
+Index of Shell Builtin Commands
+*******************************
+
+* Menu:
+
+* .: Bourne Shell Builtins.
+* :: Bourne Shell Builtins.
+* [: Bourne Shell Builtins.
+* alias: Alias Builtins.
+* bg: Job Control Builtins.
+* bind: Bash Builtins.
+* break: Bourne Shell Builtins.
+* builtin: Bash Builtins.
+* cd: Bourne Shell Builtins.
+* command: Bash Builtins.
+* continue: Bourne Shell Builtins.
+* declare: Bash Builtins.
+* dirs: C Shell Builtins.
+* disown: Job Control Builtins.
+* echo: Bash Builtins.
+* enable: Bash Builtins.
+* eval: Bourne Shell Builtins.
+* exec: Bourne Shell Builtins.
+* exit: Bourne Shell Builtins.
+* export: Bourne Shell Builtins.
+* fc: Korn Shell Builtins.
+* fg: Job Control Builtins.
+* getopts: Bourne Shell Builtins.
+* hash: Bourne Shell Builtins.
+* help: Bash Builtins.
+* history: C Shell Builtins.
+* jobs: Job Control Builtins.
+* kill: Job Control Builtins.
+* let <1>: Arithmetic Builtins.
+* let: Korn Shell Builtins.
+* local: Bash Builtins.
+* logout <1>: Bash Builtins.
+* logout: C Shell Builtins.
+* popd: C Shell Builtins.
+* pushd: C Shell Builtins.
+* pwd: Bourne Shell Builtins.
+* read: Bash Builtins.
+* readonly: Bourne Shell Builtins.
+* return: Bourne Shell Builtins.
+* set: The Set Builtin.
+* shift: Bourne Shell Builtins.
+* shopt: Bash Builtins.
+* source: C Shell Builtins.
+* suspend: Job Control Builtins.
+* test: Bourne Shell Builtins.
+* times: Bourne Shell Builtins.
+* trap: Bourne Shell Builtins.
+* type: Bash Builtins.
+* typeset: Korn Shell Builtins.
+* ulimit: Bash Builtins.
+* umask: Bourne Shell Builtins.
+* unalias: Alias Builtins.
+* unset: Bourne Shell Builtins.
+* wait: Job Control Builtins.
+
+
+File: bashref.info, Node: Reserved Word Index, Next: Variable Index, Prev: Builtin Index, Up: Top
+
+Shell Reserved Words
+********************
+
+* Menu:
+
+* !: Pipelines.
+* {: Command Grouping.
+* }: Command Grouping.
+* case: Conditional Constructs.
+* do: Looping Constructs.
+* done: Looping Constructs.
+* elif: Conditional Constructs.
+* else: Conditional Constructs.
+* esac: Conditional Constructs.
+* fi: Conditional Constructs.
+* for: Looping Constructs.
+* function: Shell Functions.
+* if: Conditional Constructs.
+* in: Conditional Constructs.
+* select: Korn Shell Constructs.
+* then: Conditional Constructs.
+* time: Pipelines.
+* until: Looping Constructs.
+* while: Looping Constructs.
+
+
+File: bashref.info, Node: Variable Index, Next: Function Index, Prev: Reserved Word Index, Up: Top
+
+Parameter and Variable Index
+****************************
+
+* Menu:
+
+* !: Special Parameters.
+* #: Special Parameters.
+* $: Special Parameters.
+* *: Special Parameters.
+* -: Special Parameters.
+* 0: Special Parameters.
+* ?: Special Parameters.
+* @: Special Parameters.
+* _: Special Parameters.
+* auto_resume: Job Control Variables.
+* BASH: Bash Variables.
+* BASH_VERSINFO: Bash Variables.
+* BASH_VERSION: Bash Variables.
+* bell-style: Readline Init File Syntax.
+* CDPATH: Bourne Shell Variables.
+* comment-begin: Readline Init File Syntax.
+* completion-query-items: Readline Init File Syntax.
+* convert-meta: Readline Init File Syntax.
+* DIRSTACK: Bash Variables.
+* disable-completion: Readline Init File Syntax.
+* editing-mode: Readline Init File Syntax.
+* enable-keypad: Readline Init File Syntax.
+* ENV: Korn Shell Variables.
+* EUID: Bash Variables.
+* expand-tilde: Readline Init File Syntax.
+* FCEDIT: Korn Shell Variables.
+* FIGNORE: Bash Variables.
+* GLOBIGNORE: Bash Variables.
+* histchars: Bash Variables.
+* HISTCMD: Bash Variables.
+* HISTCONTROL: Bash Variables.
+* HISTFILE: Bash Variables.
+* HISTFILESIZE: Bash Variables.
+* HISTIGNORE: Bash Variables.
+* HISTSIZE: Bash Variables.
+* HOME: Bourne Shell Variables.
+* horizontal-scroll-mode: Readline Init File Syntax.
+* HOSTFILE: Bash Variables.
+* HOSTNAME: Bash Variables.
+* HOSTTYPE: Bash Variables.
+* IFS: Bourne Shell Variables.
+* IGNOREEOF <1>: Bash Variables.
+* IGNOREEOF: C Shell Variables.
+* input-meta: Readline Init File Syntax.
+* INPUTRC: Bash Variables.
+* keymap: Readline Init File Syntax.
+* LANG: Bash Variables.
+* LC_ALL: Bash Variables.
+* LC_MESSAGES: Bash Variables.
+* LINENO: Korn Shell Variables.
+* MACHTYPE: Bash Variables.
+* MAIL: Bourne Shell Variables.
+* MAILCHECK: Bash Variables.
+* MAILPATH: Bourne Shell Variables.
+* mark-modified-lines: Readline Init File Syntax.
+* meta-flag: Readline Init File Syntax.
+* OLDPWD: Korn Shell Variables.
+* OPTARG: Bourne Shell Variables.
+* OPTERR: Bash Variables.
+* OPTIND: Bourne Shell Variables.
+* OSTYPE: Bash Variables.
+* output-meta: Readline Init File Syntax.
+* PATH: Bourne Shell Variables.
+* PIPESTATUS: Bash Variables.
+* PPID: Bash Variables.
+* PROMPT_COMMAND: Bash Variables.
+* PS1: Bourne Shell Variables.
+* PS2: Bourne Shell Variables.
+* PS3: Korn Shell Variables.
+* PS4: Korn Shell Variables.
+* PWD: Korn Shell Variables.
+* RANDOM: Korn Shell Variables.
+* REPLY: Korn Shell Variables.
+* SECONDS: Korn Shell Variables.
+* SHELLOPTS: Bash Variables.
+* SHLVL: Bash Variables.
+* show-all-if-ambiguous: Readline Init File Syntax.
+* TIMEFORMAT: Bash Variables.
+* TMOUT: Korn Shell Variables.
+* UID: Bash Variables.
+* visible-stats: Readline Init File Syntax.
+
+
+File: bashref.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Top
+
+Function Index
+**************
+
+* Menu:
+
+* abort (C-g): Miscellaneous Commands.
+* accept-line (Newline, Return): Commands For History.
+* backward-char (C-b): Commands For Moving.
+* backward-delete-char (Rubout): Commands For Text.
+* backward-kill-line (C-x Rubout): Commands For Killing.
+* backward-kill-word (M-DEL): Commands For Killing.
+* backward-word (M-b): Commands For Moving.
+* beginning-of-history (M-<): Commands For History.
+* beginning-of-line (C-a): Commands For Moving.
+* call-last-kbd-macro (C-x e): Keyboard Macros.
+* capitalize-word (M-c): Commands For Text.
+* character-search (C-]): Miscellaneous Commands.
+* character-search-backward (M-C-]): Miscellaneous Commands.
+* clear-screen (C-l): Commands For Moving.
+* complete (TAB): Commands For Completion.
+* copy-backward-word (): Commands For Killing.
+* copy-forward-word (): Commands For Killing.
+* copy-region-as-kill (): Commands For Killing.
+* delete-char (C-d): Commands For Text.
+* delete-horizontal-space (): Commands For Killing.
+* digit-argument (M-0, M-1, ... M-): Numeric Arguments.
+* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
+* downcase-word (M-l): Commands For Text.
+* dump-functions (): Miscellaneous Commands.
+* dump-macros (): Miscellaneous Commands.
+* dump-variables (): Miscellaneous Commands.
+* end-kbd-macro (C-x )): Keyboard Macros.
+* end-of-history (M->): Commands For History.
+* end-of-line (C-e): Commands For Moving.
+* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
+* forward-char (C-f): Commands For Moving.
+* forward-search-history (C-s): Commands For History.
+* forward-word (M-f): Commands For Moving.
+* history-search-backward (): Commands For History.
+* history-search-forward (): Commands For History.
+* insert-comment (M-#): Miscellaneous Commands.
+* insert-completions (M-*): Commands For Completion.
+* kill-line (C-k): Commands For Killing.
+* kill-region (): Commands For Killing.
+* kill-whole-line (): Commands For Killing.
+* kill-word (M-d): Commands For Killing.
+* next-history (C-n): Commands For History.
+* non-incremental-forward-search-history (M-n): Commands For History.
+* non-incremental-reverse-search-history (M-p): Commands For History.
+* possible-completions (M-?): Commands For Completion.
+* prefix-meta (ESC): Miscellaneous Commands.
+* previous-history (C-p): Commands For History.
+* quoted-insert (C-q, C-v): Commands For Text.
+* re-read-init-file (C-x C-r): Miscellaneous Commands.
+* redraw-current-line (): Commands For Moving.
+* reverse-search-history (C-r): Commands For History.
+* revert-line (M-r): Miscellaneous Commands.
+* self-insert (a, b, A, 1, !, ...): Commands For Text.
+* set-mark (C-@): Miscellaneous Commands.
+* start-kbd-macro (C-x (): Keyboard Macros.
+* tab-insert (M-TAB): Commands For Text.
+* tilde-expand (M-~): Miscellaneous Commands.
+* transpose-chars (C-t): Commands For Text.
+* transpose-words (M-t): Commands For Text.
+* undo (C-_, C-x C-u): Miscellaneous Commands.
+* universal-argument (): Numeric Arguments.
+* unix-line-discard (C-u): Commands For Killing.
+* unix-word-rubout (C-w): Commands For Killing.
+* upcase-word (M-u): Commands For Text.
+* yank (C-y): Commands For Killing.
+* yank-last-arg (M-., M-_): Commands For History.
+* yank-nth-arg (M-C-y): Commands For History.
+* yank-pop (M-y): Commands For Killing.
+
+
+File: bashref.info, Node: Concept Index, Prev: Function Index, Up: Top
+
+Concept Index
+*************
+
+* Menu:
+
+* alias expansion: Aliases.
+* arithmetic evaluation: Arithmetic Evaluation.
+* arithmetic expansion: Arithmetic Expansion.
+* arithmetic, shell: Shell Arithmetic.
+* arrays: Arrays.
+* background: Job Control Basics.
+* Bash configuration: Basic Installation.
+* Bash installation: Basic Installation.
+* Bourne shell: Basic Shell Features.
+* brace expansion: Brace Expansion.
+* builtin: Definitions.
+* command editing: Readline Bare Essentials.
+* command execution: Command Search and Execution.
+* command history: Bash History Facilities.
+* command search: Command Search and Execution.
+* command substitution: Command Substitution.
+* command timing: Pipelines.
+* commands, conditional: Conditional Constructs.
+* commands, grouping: Command Grouping.
+* commands, lists: Lists.
+* commands, looping: Looping Constructs.
+* commands, pipelines: Pipelines.
+* commands, simple: Simple Commands.
+* comments, shell: Comments.
+* configuration: Basic Installation.
+* control operator: Definitions.
+* editing command lines: Readline Bare Essentials.
+* environment: Environment.
+* evaluation, arithmetic: Arithmetic Evaluation.
+* event designators: Event Designators.
+* exit status <1>: Definitions.
+* exit status: Exit Status.
+* expansion: Shell Expansions.
+* expansion, arithmetic: Arithmetic Expansion.
+* expansion, brace: Brace Expansion.
+* expansion, filename: Filename Expansion.
+* expansion, parameter: Shell Parameter Expansion.
+* expansion, pathname: Filename Expansion.
+* expansion, tilde: Tilde Expansion.
+* expressions, arithmetic: Arithmetic Evaluation.
+* expressions, conditional: Bash Conditional Expressions.
+* field: Definitions.
+* filename: Definitions.
+* filename expansion: Filename Expansion.
+* foreground: Job Control Basics.
+* functions, shell: Shell Functions.
+* history events: Event Designators.
+* history expansion: History Interaction.
+* history list: Bash History Facilities.
+* History, how to use: Job Control Variables.
+* identifier: Definitions.
+* initialization file, readline: Readline Init File.
+* installation: Basic Installation.
+* interaction, readline: Readline Interaction.
+* interactive shell <1>: Is This Shell Interactive?.
+* interactive shell: Invoking Bash.
+* job: Definitions.
+* job control <1>: Definitions.
+* job control: Job Control Basics.
+* kill ring: Readline Killing Commands.
+* killing text: Readline Killing Commands.
+* localization: Locale Translation.
+* metacharacter: Definitions.
+* name: Definitions.
+* notation, readline: Readline Bare Essentials.
+* operator, shell: Definitions.
+* parameter expansion: Shell Parameter Expansion.
+* parameters: Shell Parameters.
+* parameters, positional: Positional Parameters.
+* parameters, special: Special Parameters.
+* pathname expansion: Filename Expansion.
+* pipeline: Pipelines.
+* POSIX: Definitions.
+* POSIX Mode: Bash POSIX Mode.
+* process group: Definitions.
+* process group ID: Definitions.
+* process substitution: Process Substitution.
+* prompting: Printing a Prompt.
+* quoting: Quoting.
+* quoting, ANSI: ANSI-C Quoting.
+* Readline, how to use: Modifiers.
+* redirection: Redirections.
+* reserved word: Definitions.
+* restricted shell: The Restricted Shell.
+* return status: Definitions.
+* shell function: Shell Functions.
+* shell script: Shell Scripts.
+* shell variable: Shell Parameters.
+* signal: Definitions.
+* signal handling: Signals.
+* special builtin: Definitions.
+* startup files: Bash Startup Files.
+* suspending jobs: Job Control Basics.
+* tilde expansion: Tilde Expansion.
+* token: Definitions.
+* variable, shell: Shell Parameters.
+* word: Definitions.
+* word splitting: Word Splitting.
+* yanking text: Readline Killing Commands.
+
+
+
+Tag Table:
+Node: Top1009
+Node: Introduction3117
+Node: What is Bash?3342
+Node: What is a shell?4426
+Node: Definitions6307
+Node: Basic Shell Features8947
+Node: Shell Syntax10468
+Node: Shell Operation10758
+Node: Quoting11992
+Node: Escape Character13027
+Node: Single Quotes13458
+Node: Double Quotes13787
+Node: ANSI-C Quoting14483
+Node: Locale Translation15215
+Node: Comments15636
+Node: Simple Commands16160
+Node: Pipelines16749
+Node: Lists17820
+Node: Looping Constructs19095
+Node: Conditional Constructs20272
+Node: Command Grouping22337
+Node: Shell Functions23721
+Node: Shell Parameters25489
+Node: Positional Parameters26812
+Node: Special Parameters27506
+Node: Shell Expansions29998
+Node: Shell Parameter Expansion31998
+Node: Command Substitution38003
+Node: Process Substitution39003
+Node: Word Splitting39909
+Node: Filename Expansion41361
+Node: Quote Removal43727
+Node: Redirections44013
+Node: Executing Commands49754
+Node: Command Search and Execution50209
+Node: Environment51943
+Node: Exit Status53579
+Node: Signals54596
+Node: Shell Scripts55807
+Node: Bourne Shell Features57676
+Node: Bourne Shell Builtins58346
+Node: Bourne Shell Variables66619
+Node: Other Bourne Shell Features68156
+Node: Major Differences From The Bourne Shell68913
+Node: Csh Features79111
+Node: Brace Expansion80029
+Node: Tilde Expansion81584
+Node: C Shell Builtins82216
+Node: C Shell Variables86732
+Node: Korn Shell Features87140
+Node: Korn Shell Constructs87868
+Node: Korn Shell Builtins89562
+Node: Korn Shell Variables91720
+Node: Aliases93505
+Node: Alias Builtins95969
+Node: Bash Features96585
+Node: Invoking Bash97576
+Node: Bash Startup Files101441
+Node: Is This Shell Interactive?105024
+Node: Bash Builtins105755
+Node: The Set Builtin121569
+Node: Bash Conditional Expressions126939
+Node: Bash Variables131590
+Node: Shell Arithmetic141103
+Node: Arithmetic Evaluation141571
+Node: Arithmetic Expansion143601
+Node: Arithmetic Builtins144405
+Node: Arrays144876
+Node: Printing a Prompt147903
+Node: The Restricted Shell149501
+Node: Bash POSIX Mode150731
+Node: Job Control154303
+Node: Job Control Basics154768
+Node: Job Control Builtins158911
+Node: Job Control Variables161794
+Node: Using History Interactively162955
+Node: Bash History Facilities163544
+Node: History Interaction165942
+Node: Event Designators168504
+Node: Word Designators169427
+Node: Modifiers170676
+Node: Command Line Editing171993
+Node: Introduction and Notation172653
+Node: Readline Interaction173661
+Node: Readline Bare Essentials174849
+Node: Readline Movement Commands176378
+Node: Readline Killing Commands177268
+Node: Readline Arguments178970
+Node: Searching179943
+Node: Readline Init File181579
+Node: Readline Init File Syntax182635
+Node: Conditional Init Constructs190424
+Node: Sample Init File192705
+Node: Bindable Readline Commands195722
+Node: Commands For Moving196472
+Node: Commands For History197319
+Node: Commands For Text199992
+Node: Commands For Killing201734
+Node: Numeric Arguments203760
+Node: Commands For Completion204386
+Node: Keyboard Macros207348
+Node: Miscellaneous Commands207906
+Node: Readline vi Mode211937
+Node: Installing Bash212813
+Node: Basic Installation213890
+Node: Compilers and Options216389
+Node: Compiling For Multiple Architectures217123
+Node: Installation Names218780
+Node: Specifying the System Type219502
+Node: Sharing Defaults220213
+Node: Operation Controls220878
+Node: Optional Features221783
+Node: Reporting Bugs226408
+Node: Builtin Index227485
+Node: Reserved Word Index230898
+Node: Variable Index232206
+Node: Function Index237285
+Node: Concept Index241643
+
+End Tag Table