From 772f20abb0a3a0979c440114bf3a1cff5b3cef03 Mon Sep 17 00:00:00 2001
From: cvpcs
+
+[Top]
+[Contents]
+[Index]
+[ ? ]
+Bash Reference Manual
+ +This text is a brief description of the features that are present in +the Bash shell (version 4.1, 23 December 2009). +
+
+This is Edition 4.1, last updated 23 December 2009,
+of The GNU Bash Reference Manual,
+for Bash
, Version 4.1.
+
+ +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. +
+ +
++
+ 1. Introduction An introduction to the shell. + 2. Definitions Some definitions used in the rest of this + manual. + 3. Basic Shell Features The shell "building blocks". + 4. Shell Builtin Commands Commands that are a part of the shell. + 5. Shell Variables Variables used or set by Bash. + 6. Bash Features Features found only in Bash. + 7. Job Control What job control is and how Bash allows you + to use it. + 8. Command Line Editing Chapter describing the command line + editing features. + 9. Using History Interactively Command History Expansion + 10. Installing Bash How to build and install Bash on your system. + A. Reporting Bugs How to report bugs in Bash. + B. Major Differences From The Bourne Shell A terse list of the differences + between Bash and historical + versions of /bin/sh. + C. GNU Free Documentation License Copying and sharing this documentation. + D. Indexes Various indexes for this manual.
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
++
+ 1.1 What is Bash? A short description of Bash. + 1.2 What is a shell? A brief introduction to shells.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Bash is the shell, or command language interpreter,
+for the GNU operating system.
+The name is an acronym for the `Bourne-Again SHell',
+a pun on Stephen Bourne, the author of the direct ancestor of
+the current Unix shell sh
,
+which appeared in the Seventh Edition Bell Labs Research version
+of Unix.
+
+
+Bash is largely compatible with sh
and incorporates useful
+features from the Korn shell ksh
and the C shell csh
.
+It is intended to be a conformant implementation of the IEEE
+POSIX Shell and Tools portion of the IEEE POSIX
+specification (IEEE Standard 1003.1).
+It offers functional improvements over sh
for both interactive and
+programming use.
+
+
+While the GNU operating system provides other shells, including
+a version of csh
, Bash is 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 MS-DOS, OS/2,
+and Windows platforms.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +At its base, a shell is simply a macro processor that executes +commands. The term macro processor means functionality where text +and symbols are expanded to create larger expressions. +
+ +A Unix shell is both a command interpreter and a programming +language. As a command interpreter, the shell provides the user +interface to the rich set of GNU utilities. The programming +language features allow these utilities to be combined. +Files containing commands can be created, and become +commands themselves. These new commands have the same status as +system commands in directories such as `/bin', allowing users +or groups to establish custom environments to automate their common +tasks. +
+ +Shells may be used interactively or non-interactively. In +interactive mode, they accept input typed from the keyboard. +When executing non-interactively, shells execute commands read +from a file. +
+ +A shell allows execution of GNU commands, both synchronously and +asynchronously. +The shell waits for synchronous commands to complete before accepting +more input; asynchronous commands continue to execute in parallel +with the shell while it reads and executes additional commands. +The redirection constructs permit +fine-grained control of the input and output of those commands. +Moreover, the shell allows control over the contents of commands' +environments. +
+
+Shells also provide a small set of built-in
+commands (builtins) implementing functionality impossible
+or inconvenient to obtain via separate utilities.
+For example, cd
, break
, continue
, and
+exec
) cannot be implemented outside of the shell because
+they directly manipulate the shell itself.
+The history
, getopts
, kill
, or pwd
+builtins, among others, could be implemented in separate utilities,
+but they are more convenient to use as builtin commands.
+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 offer features geared specifically for +interactive use rather than to augment the programming language. +These interactive features include job control, command line +editing, command history and aliases. Each of these features is +described in this manual. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
POSIX
++ +
blank
++ +
builtin
++ +
control operator
+token
that performs a control function. It is a newline
+or one of the following:
+`||', `&&', `&', `;', `;;',
+`|', `|&', `(', or `)'.
++ +
exit status
++ +
field
++ +
filename
++ +
job
++ +
job control
++ +
metacharacter
+blank
or one of the following characters:
+`|', `&', `;', `(', `)', `<', or
+`>'.
++ +
name
+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
+control operator
or a redirection operator
.
+See section 3.6 Redirections, for a list of redirection operators.
+Operators contain at least one unquoted metacharacter
.
++ +
process group
++ +
process group ID
+process group
+during its lifetime.
++ +
reserved word
+word
that has a special meaning to the shell. Most reserved
+words introduce shell flow control constructs, such as for
and
+while
.
++ +
return status
+exit status
.
++ +
signal
++ +
special builtin
++ +
token
+word
or an operator
.
++ +
word
+metacharacters
.
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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, +The rules for evaluation and quoting are taken from the POSIX +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. +
+ +
++
+ 3.1 Shell Syntax What your input means to the shell. + 3.2 Shell Commands The types of commands you can use. + 3.3 Shell Functions Grouping commands by name. + 3.4 Shell Parameters How the shell stores values. + 3.5 Shell Expansions How Bash expands parameters and the various + expansions available. + 3.6 Redirections A way to control where input and output go. + 3.7 Executing Commands What happens when you run a command. + 3.8 Shell Scripts Executing files of shell commands.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
++
+ 3.1.1 Shell Operation The basic operation of the shell. + 3.1.2 Quoting How to remove the special meaning from characters. + 3.1.3 Comments How to specify comments.
+ +When the shell reads input, it proceeds through a +sequence of operations. If the input indicates the beginning of a +comment, the shell ignores the comment symbol (`#'), and the rest +of that line. + +Otherwise, roughly speaking, the shell reads its input and +divides the input into words and operators, employing the quoting rules +to select which meanings to assign various words and characters. +
+ +The shell then parses these tokens into commands and other constructs, +removes the special meaning of certain words or characters, expands +others, redirects input and output as needed, executes the specified +command, waits for the command's exit status, and makes that exit status +available for further inspection or processing. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The following is a brief description of the shell's operation when it +reads and executes a command. Basically, the shell does the +following: +
+ +
+ +
metacharacters
. Alias expansion is performed by this step
+(see section 6.6 Aliases).
++ +
+ +
+ +
+ +
+ +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
++
+ 3.1.2.1 Escape Character How to remove the special meaning from a single + character. + 3.1.2.2 Single Quotes How to inhibit all interpretation of a sequence + of characters. + 3.1.2.3 Double Quotes How to suppress most of the interpretation of a + sequence of characters. + 3.1.2.4 ANSI-C Quoting How to expand ANSI-C sequences in quoted strings. + 3.1.2.5 Locale-Specific 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 (see section 2. Definitions) +has special meaning to the shell and must be quoted if it is to +represent itself. +When the command history expansion facilities are being used +(see section 9.3 History Expansion), the +history expansion character, usually `!', must be quoted +to prevent history expansion. See section 9.1 Bash History Facilities, for +more details concerning history expansion. +
+ +There are three quoting mechanisms: the +escape character, single quotes, and double quotes. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
newline
. If a \newline
pair
+appears, and the backslash itself is not quoted, the \newline
+is treated as a line continuation (that is, it is removed from
+the input stream and effectively ignored).
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Enclosing characters in double quotes (`"') preserves the literal value
+of all characters within the quotes, with the exception of
+`$', ``', `\',
+and, when history expansion is enabled, `!'.
+The characters `$' and ``'
+retain their special meaning within double quotes (see section 3.5 Shell Expansions).
+The backslash retains its special meaning only when followed by one of
+the following characters:
+`$', ``', `"', `\', or newline
.
+Within double quotes, backslashes that are followed by one of these
+characters are removed. Backslashes preceding characters without a
+special meaning are left unmodified.
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+If enabled, history expansion will be performed unless an `!'
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the `!' is not removed.
+
+ +The special parameters `*' and `@' have special meaning +when in double quotes (see section 3.5.3 Shell Parameter Expansion). +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Words of the form $'string'
are treated specially. The
+word expands to string, with backslash-escaped characters replaced
+as specified by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+
+ +
\a
+\b
+\e
+\E
+\f
+\n
+\r
+\t
+\v
+\\
+\'
+\"
+\nnn
+\xHH
+\cx
++ +The expanded result is single-quoted, as if the dollar sign had not +been present. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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.
+
+
+
+
+
+Some systems use the message catalog selected by the LC_MESSAGES
+shell variable. Others create the name of the message catalog from the
+value of the TEXTDOMAIN
shell variable, possibly adding a
+suffix of `.mo'. If you use the TEXTDOMAIN
variable, you
+may need to set the TEXTDOMAINDIR
variable to the location of
+the message catalog files. Still others use both variables in this
+fashion:
+TEXTDOMAINDIR
/LC_MESSAGES
/LC_MESSAGES/TEXTDOMAIN
.mo.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+In a non-interactive shell, or an interactive shell in which the
+interactive_comments
option to the shopt
+builtin is enabled (see section 4.3.2 The Shopt Builtin),
+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.
+See section 6.3 Interactive Shells, for a description of what makes
+a shell interactive.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+A simple shell command such as echo a b c
consists of the command
+itself followed by arguments, separated by spaces.
+
+ +More complex shell commands are composed of simple commands arranged together +in a variety of ways: in a pipeline in which the output of one command +becomes the input of a second, in a loop or conditional construct, or in +some other grouping. +
+ +
++
+ 3.2.1 Simple Commands The most common type of command. + 3.2.2 Pipelines Connecting the input and output of several + commands. + 3.2.3 Lists of Commands How to execute commands sequentially. + 3.2.4 Compound Commands Shell commands for control flow. + 3.2.5 Coprocesses Two-way communication between commands.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+A simple command is the kind of command encountered most often.
+It's just a sequence of words separated by blank
s, terminated
+by one of the shell's control operators (see section 2. Definitions). The
+first word generally specifies a command to be executed, with the
+rest of the words being that command's arguments.
+
+
+The return status (see section 3.7.5 Exit Status) of a simple command is
+its exit status as provided
+by the POSIX 1003.1 waitpid
function, or 128+n if
+the command was terminated by signal n.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+A pipeline
is a sequence of simple commands separated by one of
+the control operators `|' or `|&'.
+
+ + + + +The format for a pipeline is +
[ |
+ +The output of each command in the pipeline is connected via a pipe +to the input of the next command. +That is, each command reads the previous command's output. This +connection is performed before any redirections specified by the +command. +
+
+If `|&' is used, the standard error of command1 is connected to
+command2's standard input through the pipe; it is shorthand for
+2>&1 |
. This implicit redirection of the standard error is
+performed after any redirections specified by the command.
+
+
+The reserved word time
causes timing statistics
+to be printed for the pipeline once it finishes.
+The statistics currently consist of elapsed (wall-clock) time and
+user and system time consumed by the command's execution.
+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.
+See section 5.2 Bash Variables, for a description of the available formats.
+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.
+
+ +If the pipeline is not executed asynchronously (see section 3.2.3 Lists of Commands), the +shell waits for all commands in the pipeline to complete. +
+
+Each command in a pipeline is executed in its own subshell
+(see section 3.7.3 Command Execution Environment). The exit
+status of a pipeline is the exit status of the last command in the
+pipeline, unless the pipefail
option is enabled
+(see section 4.3.1 The Set Builtin).
+If pipefail
is enabled, the pipeline's return status is the
+value of the last (rightmost) command to exit with a non-zero status,
+or zero if all commands exit successfully.
+If the reserved word `!' precedes the pipeline, the
+exit status is the logical negation of the exit status as described
+above.
+The shell waits for all commands in the pipeline to terminate before
+returning a value.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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. +
+
+A sequence of one or more newlines may appear in a list
+to delimit commands, equivalent to a semicolon.
+
+
+If a command is terminated by the control operator `&',
+the shell executes the command asynchronously in a subshell.
+This is known as executing the command in the background.
+The shell does not wait for the command to finish, and the return
+status is 0 (true).
+When job control is not active (see section 7. Job Control),
+the standard input for asynchronous commands, in the absence of any
+explicit redirections, is redirected from /dev/null
.
+
+ +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. +
+ +AND and OR lists are sequences of one or more pipelines +separated by the control operators `&&' and `||', +respectively. AND and OR lists are executed with left +associativity. +
+ +An AND list has the form +
command1 && command2 + |
+ +command2 is executed if, and only if, command1 +returns an exit status of zero. +
+ +An OR list has the form +
command1 || command2 + |
+ +command2 is executed if, and only if, command1 +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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 3.2.4.1 Looping Constructs Shell commands for iterative action. + 3.2.4.2 Conditional Constructs Shell commands for conditional execution. + 3.2.4.3 Grouping Commands Ways to group commands.
+ +Compound commands are the shell programming constructs. +Each construct begins with a reserved word or control operator and is +terminated by a corresponding reserved word or operator. +Any redirections (see section 3.6 Redirections) associated with a compound command +apply to all commands within that compound command unless explicitly overridden. +
+ +Bash provides looping constructs, conditional commands, and mechanisms +to group commands and execute them as a unit. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Bash supports the following looping constructs. +
+ +Note that wherever a `;' appears in the description of a +command's syntax, it may be replaced with one or more newlines. +
+ +
until
+until
command is:
+until test-commands; do consequent-commands; done + |
+ +
while
+while
command is:
+while test-commands; do consequent-commands; done + |
+ +Execute consequent-commands as long as +test-commands has an exit status of zero. +The return status is the exit status of the last command executed +in consequent-commands, or zero if none was executed. +
+ +
for
+for
command is:
++ +
for name [ [in [words ...] ] ; ] do commands; done + |
for
command
+executes the commands once for each positional parameter that is
+set, as if `in "$@"' had been specified
+(see section 3.4.2 Special Parameters).
+The return status is the exit status of the last command that executes.
+If there are no items in the expansion of words, no commands are
+executed, and the return status is zero.
+
+
+An alternate form of the for
command is also supported:
+
+ +
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done + |
+ +
+
+The break
and continue
builtins (see section 4.1 Bourne Shell Builtins)
+may be used to control loop execution.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
if
+if
command is:
++ +
if test-commands; then + consequent-commands; +[elif more-test-commands; then + more-consequents;] +[else alternate-consequents;] +fi + |
+
+The test-commands list is executed, and if its return status is zero,
+the consequent-commands list is executed.
+If test-commands returns a non-zero status, 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 alternate-consequents is executed.
+The return status is the exit status of the last command executed, or
+zero if no condition tested true.
+
+ +
case
+case
command is:
++ +
|
+
+case
will selectively execute the command-list corresponding to
+the first pattern that matches word.
+If the shell option nocasematch
+(see the description of shopt
in 4.3.2 The Shopt Builtin)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The `|' is used to separate multiple patterns, and the `)'
+operator terminates a pattern list.
+A list of patterns and an associated command-list is known
+as a clause.
+
+ +Each clause must be terminated with `;;', `;&', or `;;&'. +The word undergoes tilde expansion, parameter expansion, command +substitution, arithmetic expansion, and quote removal before matching is +attempted. Each pattern undergoes tilde expansion, parameter +expansion, command substitution, and arithmetic expansion. +
+
+There may be an arbitrary number of case
clauses, each terminated
+by a `;;', `;&', or `;;&'.
+The first pattern that matches determines the
+command-list that is executed.
+
+
+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." + |
+ +
+ +If the `;;' operator is used, no subsequent matches are attempted after +the first pattern match. +Using `;&' in place of `;;' causes execution to continue with +the command-list associated with the next clause, if any. +Using `;;&' in place of `;;' causes the shell to test the patterns +in the next clause, if any, and execute any associated command-list +on a successful match. +
+ +The return status is zero if no pattern is matched. Otherwise, the +return status is the exit status of the command-list executed. +
+ +
select
+
+
+The select
construct allows the easy generation of menus.
+It has almost the same syntax as the for
command:
+
+ +
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 output stream, each preceded by a number. If the
+`in words' is omitted, the positional parameters are printed,
+as if `in "$@"' had been specified.
+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
command is executed, at which
+point the select
command completes.
+
+ +Here is an example that allows the user to pick a filename from the +current directory, and displays the name and index of the file +selected. +
+ +
select fname in *; +do + echo you picked $fname \($REPLY\) + break; +done + |
+ +
((...))
+(( expression )) + |
+ +The arithmetic expression is evaluated according to the rules +described below (see section 6.5 Shell Arithmetic). +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" + |
let
builtin.
++ +
[[...]]
+[[ expression ]] + |
+ +Return a status of 0 or 1 depending on the evaluation of +the conditional expression expression. +Expressions are composed of the primaries described below in +6.4 Bash Conditional Expressions. +Word splitting and filename expansion are not performed on the words +between the `[[' and `]]'; tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal are performed. +Conditional operators such as `-f' must be unquoted to be recognized +as primaries. +
+ +When used with `[[', The `<' and `>' operators sort +lexicographically using the current locale. +
+
+When the `==' and `!=' operators are used, the string to the
+right of the operator is considered a pattern and matched according
+to the rules described below in 3.5.8.1 Pattern Matching.
+If the shell option nocasematch
+(see the description of shopt
in 4.3.2 The Shopt Builtin)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The return value is 0 if the string matches (`==') or does not
+match (`!=')the pattern, and 1 otherwise.
+Any part of the pattern may be quoted to force it to be matched as a
+string.
+
+
+An additional binary operator, `=~', is available, with the same
+precedence as `==' and `!='.
+When it is used, the string to the right of the operator is considered
+an extended regular expression and matched accordingly (as in regex3)).
+The return value is 0 if the string matches
+the pattern, and 1 otherwise.
+If the regular expression is syntactically incorrect, the conditional
+expression's return value is 2.
+If the shell option nocasematch
+(see the description of shopt
in 4.3.2 The Shopt Builtin)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+Any part of the pattern may be quoted to force it to be matched as a
+string.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the array variable BASH_REMATCH
.
+The element of BASH_REMATCH
with index 0 is the portion of the string
+matching the entire regular expression.
+The element of BASH_REMATCH
with index n is the portion of the
+string matching the nth parenthesized subexpression.
+
+ +Expressions may be combined using the following operators, listed +in decreasing order of precedence: +
+ +
( expression )
++ +
! expression
++ +
expression1 && expression2
++ +
expression1 || expression2
+&&
and ||
operators do not evaluate expression2 if the
+value of expression1 is sufficient to determine the return
+value of the entire conditional expression.
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 +environment to be created (see section 3.7.3 Command Execution Environment), and each +of the commands in list 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 (or newline) 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 or other shell metacharacters.
+The parentheses are operators
, and are
+recognized as separate tokens by the shell even if they are not separated
+from the list by whitespace.
+
+ +The exit status of both of these constructs is the exit status of +list. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+A coprocess
is a shell command preceded by the coproc
+reserved word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the `&' control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+
+ +The format for a coprocess is: +
|
+ +This creates a coprocess named NAME. +If NAME is not supplied, the default name is COPROC. +NAME must not be supplied if command is a simple +command (see section 3.2.1 Simple Commands); otherwise, it is interpreted as +the first word of the simple command. +
+ +When the coproc is executed, the shell creates an array variable +(see section 6.7 Arrays) +named NAME in the context of the executing shell. +The standard output of command +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to NAME[0]. +The standard input of command +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to NAME[1]. +This pipe is established before any redirections specified by the +command (see section 3.6 Redirections). +The file descriptors can be utilized as arguments to shell commands +and redirections using standard word expansions. +
+
+The process id of the shell spawned to execute the coprocess is
+available as the value of the variable NAME_PID.
+The wait
+builtin command may be used to wait for the coprocess to terminate.
+
+ +The return status of a coprocess is the exit status of command. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +When the name of a shell function is used as a simple command name, +the list of commands associated with that function name is executed. +Shell functions are executed in the current +shell context; no new process is created to interpret them. +
+ +Functions are declared using this syntax: + +
[ |
+
+This defines a shell function named name. The reserved
+word function
is optional.
+If the function
reserved
+word is supplied, the parentheses are optional.
+The body of the function is the compound command
+compound-command (see section 3.2.4 Compound Commands).
+That command is usually a list enclosed between { and }, but
+may be any compound command listed above.
+compound-command is executed whenever name is specified as the
+name of a command.
+Any redirections (see section 3.6 Redirections) associated with the shell function
+are performed when the function is executed.
+
+
+A function definition may be deleted using the `-f' option to the
+unset
builtin (see section 4.1 Bourne Shell Builtins).
+
+ +The exit status of a function definition is zero unless a syntax error +occurs or a readonly function with the same name already exists. +When executed, the exit status of a function is the exit status of the +last command executed in the body. +
+
+Note that for historical reasons, in the most common usage the curly braces
+that surround the body of the function must be separated from the body by
+blank
s or newlines.
+This is because the braces are reserved words and are only recognized
+as such when they are separated from the command list
+by whitespace or another shell metacharacter.
+Also, when using the braces, the list must be terminated by a semicolon,
+a `&', or a newline.
+
+
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution (see section 3.4.1 Positional Parameters).
+The special parameter `#' that expands to the number of
+positional parameters is updated to reflect the change.
+Special parameter 0
is unchanged.
+The first element of the FUNCNAME
variable is set to the
+name of the function while the function is executing.
+
+
+All other aspects of the shell execution
+environment are identical between a function and its caller
+with these exceptions:
+the DEBUG
and RETURN
traps
+are not inherited unless the function has been given the
+trace
attribute using the declare
builtin or
+the -o functrace
option has been enabled with
+the set
builtin,
+(in which case all functions inherit the DEBUG
and RETURN
traps),
+and the ERR
trap is not inherited unless the -o errtrace
+shell option has been enabled.
+See section 4.1 Bourne Shell Builtins, for the description of the
+trap
builtin.
+
+
+If the builtin command return
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.
+Any command associated with the RETURN
trap is executed
+before execution resumes.
+When a function completes, the values of the
+positional parameters and the special parameter `#'
+are restored to the values they had prior to the function's
+execution. If a numeric argument is given to return
,
+that is the function's return status; otherwise the function's
+return status is the exit status of the last command executed
+before the return
.
+
+
+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.
+
+
+Function names and definitions may be listed with the
+`-f' option to the declare
or typeset
+builtin commands (see section 4.2 Bash Builtin Commands).
+The `-F' option to declare
or typeset
+will list the function names only
+(and optionally the source file and line number, if the extdebug
+shell option is enabled).
+Functions may be exported so that subshells
+automatically have them defined with the
+`-f' option to the export
builtin
+(see section 4.1 Bourne Shell Builtins).
+Note that shell functions and variables with the same name may result
+in multiple identically-named entries in the environment passed to the
+shell's children.
+Care should be taken in cases where this may cause a problem.
+
+ +Functions may be recursive. No limit is placed on the number of +recursive calls. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 3.4.1 Positional Parameters The shell's command-line arguments. + 3.4.2 Special Parameters Parameters denoted by special characters.
+
+A parameter is an entity that stores values.
+It can be a name
, a number, or one of the special characters
+listed below.
+A variable is a parameter denoted by a name
.
+A variable has a value and zero or more attributes.
+Attributes are assigned using the declare
builtin command
+(see the description of the declare
builtin in 4.2 Bash Builtin Commands).
+
+
+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] + |
integer
+attribute set, then value
+is evaluated as an arithmetic expression even if the $((...))
+expansion is not used (see section 3.5.5 Arithmetic Expansion).
+Word splitting is not performed, with the exception
+of "$@"
as explained below.
+Filename expansion is not performed.
+Assignment statements may also appear as arguments to the
+alias
,
+declare
, typeset
, export
, readonly
,
+and local
builtin commands.
++ +In the context where an assignment statement is assigning a value +to a shell variable or array index (see section 6.7 Arrays), the `+=' +operator can be used to +append to or add to the variable's previous value. +When `+=' is applied to a variable for which the integer attribute +has been set, value is evaluated as an arithmetic expression and +added to the variable's current value, which is also evaluated. +When `+=' is applied to an array variable using compound assignment +(see section 6.7 Arrays), the +variable's value is not unset (as it is when using `='), and new +values are appended to the array beginning at one greater than the array's +maximum index (for indexed arrays), or added as additional key-value pairs +in an associative array. +When applied to a string-valued variable, value is expanded and +appended to the variable's value. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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 parameter N
may be referenced as ${N}
, or
+as $N
when N
consists of a single digit.
+Positional parameters may not be assigned to with assignment statements.
+The set
and shift
builtins are used to set and
+unset them (see section 4. Shell Builtin Commands).
+The positional parameters are
+temporarily replaced when a shell function is executed
+(see section 3.3 Shell Functions).
+
+ +When a positional parameter consisting of more than a single +digit is expanded, it must be enclosed in braces. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The shell treats several parameters specially. These parameters may +only be referenced; assignment to them is not allowed. +
+ +
*
+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 unset, the parameters are separated by spaces.
+If IFS
is null, the parameters are joined without intervening
+separators.
+@
+"$@"
is equivalent to
+"$1" "$2" ...
.
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
+When there are no positional parameters, "$@"
and
+$@
+expand to nothing (i.e., they are removed).
+#
+?
+-
+set
+builtin command, or those set by the shell itself
+(such as the `-i' option).
+$
+()
subshell, it
+expands to the process ID of the invoking shell, not the subshell.
+!
+0
+$0
is set to the name of that file.
+If Bash is started with the `-c' option (see section 6.1 Invoking Bash),
+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.
+_
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Expansion is performed on the command line after it has been split into
+token
s. There are seven kinds of expansion performed:
+
+ +
++
+ 3.5.1 Brace Expansion Expansion of expressions within braces. + 3.5.2 Tilde Expansion Expansion of the ~ character. + 3.5.3 Shell Parameter Expansion How Bash expands variables to their values. + 3.5.4 Command Substitution Using the output of a command as an argument. + 3.5.5 Arithmetic Expansion How to use arithmetic in shell expansions. + 3.5.6 Process Substitution A way to write and read to and from a + command. + 3.5.7 Word Splitting How the results of expansion are split into separate + arguments. + 3.5.8 Filename Expansion A shorthand for specifying filenames matching patterns. + 3.5.9 Quote Removal How and when quote characters are removed from + words.
+ +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 arithmetic 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
+"$@"
(see section 3.4.2 Special Parameters) and "${name[@]}"
+(see section 6.7 Arrays).
+
+
+After all expansions, quote removal
(see section 3.5.9 Quote Removal)
+is performed.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Brace expansion is a mechanism by which arbitrary strings may be generated. +This mechanism is similar to +filename expansion (see section 3.5.8 Filename Expansion), +but the file names generated need not exist. +Patterns to be brace expanded take the form of an optional preamble, +followed by either a series of comma-separated strings or a seqeunce expression +between a pair of braces, +followed by an optional postscript. +The preamble is prefixed to each string contained within the braces, and +the postscript 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 + |
+
+A sequence expression takes the form {x..y[..incr]}
,
+where x and y are either integers or single characters,
+and incr, an optional increment, is an integer.
+When integers are supplied, the expression expands to each number between
+x and y, inclusive.
+Supplied integers may be prefixed with `0' to force each term to have the
+same width. When either x or y begins with a zero, the shell
+attempts to force all generated terms to contain the same number of digits,
+zero-padding where necessary.
+When characters are supplied, the expression expands to each character
+lexicographically between x and y, inclusive. Note that
+both x and y must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or -1 as appropriate.
+
+ +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. +To avoid conflicts with parameter expansion, the string `${' +is not considered eligible for brace expansion. +
+ +A correctly-formed brace expansion must contain unquoted opening +and closing braces, and at least one unquoted comma or a valid +sequence expression. +Any incorrectly formed brace expansion is left unchanged. +
+ +A { or `,' may be quoted with a backslash to prevent its +being considered part of a brace expression. +To avoid conflicts with parameter expansion, the string `${' +is not considered eligible for brace expansion. +
+ +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} + |
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+If a word begins with an unquoted tilde character (`~'), all of the
+characters up to the first unquoted slash (or all characters,
+if there is no unquoted slash) are considered a tilde-prefix.
+If none of the characters in the tilde-prefix are quoted, the
+characters in the tilde-prefix following the tilde are treated as a
+possible login name.
+If this login name is the null string, the tilde is replaced with the
+value of the HOME
shell variable.
+If HOME
is unset, the home directory of the user executing the
+shell is substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+
+
+If the tilde-prefix is `~+', the value of
+the shell variable PWD
replaces the tilde-prefix.
+If the tilde-prefix is `~-', the value of the shell variable
+OLDPWD
, if it is set, is substituted.
+
+
+If the characters following the tilde in the tilde-prefix consist of a
+number N, optionally prefixed by a `+' or a `-',
+the tilde-prefix is replaced with the
+corresponding element from the directory stack, as it would be displayed
+by the dirs
builtin invoked with the characters following tilde
+in the tilde-prefix as an argument (see section 6.8 The Directory Stack).
+If the tilde-prefix, sans the tilde, consists of a number without a
+leading `+' or `-', `+' is assumed.
+
+ +If the login name is invalid, or the tilde expansion fails, the word is +left unchanged. +
+
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a `:' or the first `='.
+In these cases, tilde expansion is also performed.
+Consequently, one may use file names with tildes in assignments to
+PATH
, MAILPATH
, and CDPATH
,
+and the shell assigns the expanded value.
+
+ +The following table shows how Bash treats unquoted tilde-prefixes: +
+ +
~
+$HOME
+~/foo
++ +
~fred/foo
+foo
of the home directory of the user
+fred
++ +
~+/foo
++ +
~-/foo
++ +
~N
++ +
~+N
++ +
~-N
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +
+ +When braces are used, the matching ending brace is the first `}' +not escaped by a backslash or within a quoted string, and not within an +embedded arithmetic expansion, command substitution, or parameter +expansion. +
+ +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 is used in the rest of the substitution, rather
+than the value of parameter itself.
+This is known as indirect expansion
.
+The exceptions to this are the expansions of ${!prefix*}
+and ${!name[@]}
+described below.
+The exclamation point must immediately follow the left brace in order to
+introduce indirection.
+
+ +In each of the cases below, word is subject to tilde expansion, +parameter expansion, command substitution, and arithmetic expansion. +
+ +When not performing substring expansion, using the form described +below, Bash tests for a parameter that is unset or null. +Omitting the colon results in a test only for a parameter that is unset. +Put another way, if the colon is included, +the operator tests for both parameter's existence and that its value +is not null; if the colon is omitted, the operator tests only for existence. +
+ +
${parameter:-word}
++ +
${parameter:=word}
++ +
${parameter:?word}
++ +
${parameter:+word}
++ +
${parameter:offset}
+${parameter:offset:length}
+
+
+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 indexed array name subscripted
+by `@' or `*', the result is the length
+members of the array beginning with ${parameter[offset]}
.
+A negative offset is taken relative to one greater than the maximum
+index of the specified array.
+Substring expansion applied to an associative array produces undefined
+results.
+
+
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the `:-' expansion.
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1 by default.
+If offset is 0, and the positional parameters are used, $@
is
+prefixed to the list.
+
+ +
${!prefix*}
+${!prefix@}
+IFS
special variable.
+When `@' is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
++ +
${!name[@]}
+${!name[*]}
++ +
${#parameter}
++ +
${parameter#word}
+${parameter##word}
++ +
${parameter%word}
+${parameter%%word}
++ +
${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.
+If pattern begins with `/', all matches of pattern are
+replaced with string. Normally only the first match is replaced.
+If pattern begins with `#', it must match at the beginning
+of the expanded value of parameter.
+If pattern begins with `%', it must match at the end
+of the expanded value of parameter.
+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.
+
+ +
${parameter^pattern}
+${parameter^^pattern}
+${parameter,pattern}
+${parameter,,pattern}
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Command substitution allows the output of a command to replace +the command itself. +Command substitution occurs when a command is enclosed as follows: +
$(command) + |
`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.
+Embedded newlines are not deleted, but they may be removed during
+word splitting.
+The command substitution $(cat file)
can be
+replaced by the equivalent but faster $(< file)
.
+
+
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+`$', ``', or `\'.
+The first backquote not preceded by a backslash terminates the
+command substitution.
+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 backquoted +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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 parentheses is not treated specially. +All tokens in the expression undergo parameter expansion, command +substitution, and quote removal. +Arithmetic expansions may be nested. +
+ +The evaluation is performed according to the rules listed below +(see section 6.5 Shell Arithmetic). +If the expression is invalid, Bash prints a message indicating +failure to the standard error and no substitution occurs. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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) + |
>(list) + |
>(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.
+Note that no space may appear between the <
or >
+and the left parenthesis, otherwise the construct would be interpreted
+as a redirection.
++ +When available, process substitution is performed simultaneously with +parameter and variable expansion, command substitution, and arithmetic +expansion. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 sequences of
+ <space>
, <tab>
, and <newline>
+at the beginning and end of the results of the previous
+expansions are ignored, and any sequence of IFS
+characters not at the beginning or end 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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ + + + ++
+ 3.5.8.1 Pattern Matching How the shell matches patterns.
+
+After word splitting, unless the `-f' option has been set
+(see section 4.3.1 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 nullglob
option is set, and no matches are found, the word
+is removed.
+If the failglob
shell option is set, and no matches are found,
+an error message is printed and the command is not executed.
+If the shell option nocaseglob
is enabled, the match is performed
+without regard to the case of alphabetic characters.
+
+
+When a pattern is used for filename expansion, the character `.'
+at the start of a filename or immediately following a slash
+must be matched explicitly, unless the shell option dotglob
is set.
+When matching a file name, the slash character must always be
+matched explicitly.
+In other cases, the `.' character is not treated specially.
+
+
+See the description of shopt
in 4.3.2 The Shopt Builtin,
+for a description of the nocaseglob
, nullglob
,
+failglob
, 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 when GLOBIGNORE
+is set and not null.
+However, setting GLOBIGNORE
to a non-null value 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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Any character that appears in a pattern, other than the special pattern +characters described below, matches itself. +The NUL character may not occur in a pattern. +A backslash escapes the following character; the +escaping backslash is discarded when matching. +The special pattern characters must be quoted if they are to be matched +literally. +
+ +The special pattern characters have the following meanings: +
*
+globstar
shell option is enabled, and `*' is used in
+a filename expansion context, two adjacent `*'s used as a single
+pattern will match all files and zero or more directories and
+subdirectories.
+If followed by a `/', two adjacent `*'s will match only
+directories and subdirectories.
+?
+[...]
+LC_COLLATE
shell variable,
+if set.
+
+
+For example, in the default C locale, `[a-dx-z]' is equivalent to
+`[abcdxyz]'. Many locales sort characters in dictionary order, and in
+these locales `[a-dx-z]' is typically not equivalent to `[abcdxyz]';
+it might be equivalent to `[aBbCcDdxXyYz]', for example. To obtain
+the traditional interpretation of ranges in bracket expressions, you can
+force the use of the C locale by setting the LC_COLLATE
or
+LC_ALL
environment variable to the value `C'.
+
+
+Within `[' and `]', character classes can be specified
+using the syntax
+[:
class:]
, where class is one of the
+following classes defined in the POSIX standard:
+
alnum alpha ascii blank cntrl digit graph lower +print punct space upper word xdigit + |
word
character class matches letters, digits, and the character
+`_'.
+
+
+Within `[' and `]', an equivalence class can be
+specified using the syntax [=
c=]
, which
+matches all characters with the same collation weight (as defined
+by the current locale) as the character c.
+
+
+Within `[' and `]', the syntax [.
symbol.]
+matches the collating symbol symbol.
+
+
+If the extglob
shell option is enabled using the shopt
+builtin, several extended pattern matching operators are recognized.
+In the following description, a pattern-list is a list of one
+or more patterns separated by a `|'.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+
+ +
?(pattern-list)
++ +
*(pattern-list)
++ +
+(pattern-list)
++ +
@(pattern-list)
++ +
!(pattern-list)
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +After the preceding expansions, all unquoted occurrences of the +characters `\', `'', and `"' that did not +result from one of the above expansions are removed. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +
+ +Each redirection that may be preceded by a file descriptor number +may instead be preceded by a word of the form {varname}. +In this case, for each redirection operator except +>&- and <&-, the shell will allocate a file descriptor greater +than 10 and assign it to {varname}. If >&- or <&- is preceded +by {varname}, the value of varname defines the file +descriptor to close. +
+ +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 following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, filename expansion, and word splitting. +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 + |
ls 2>&1 > dirlist + |
+ +Bash handles several filenames specially when they are used in +redirections, as described in the following table: +
+ +
/dev/fd/fd
++ +
/dev/stdin
++ +
/dev/stdout
++ +
/dev/stderr
++ +
/dev/tcp/host/port
++ +
/dev/udp/host/port
++ +
+ +A failure to open or create a file causes the redirection to fail. +
+ +Redirections using file descriptors greater than 9 should be used with +care, as they may conflict with file descriptors the shell uses +internally. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
n
,
+or the standard input (file descriptor 0) if n
+is not specified.
++ +The general format for redirecting input is: +
[n]<word + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The general format for redirecting output is: +
[n]>[|]word + |
+
+If the redirection operator is `>', and the noclobber
+option to the set
builtin has been enabled, the redirection
+will fail if the file whose name results from the expansion of
+word exists and is a regular file.
+If the redirection operator is `>|', or the redirection operator is
+`>' and the noclobber
option is not enabled, the redirection
+is attempted even if the file named by word exists.
+
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The general format for appending output is: +
[n]>>word + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +There are two formats for redirecting standard output and +standard error: +
&>word + |
>&word + |
>word 2>&1 + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The format for appending standard output and standard error is: +
&>>word + |
>>word 2>&1 + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The format of here-documents is: +
<<[-]word + here-document +delimiter + |
+
+No parameter expansion, command substitution, arithmetic expansion,
+or filename 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.
+If word is unquoted,
+all lines of the here-document are subjected to parameter expansion,
+command substitution, and arithmetic expansion. In the latter
+case, the character sequence \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. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
<<< word + |
+ +The word is expanded and supplied to the command on its standard +input. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
[n]<&word + |
+ +The operator +
[n]>&word + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
[n]<&digit- + |
+ +Similarly, the redirection operator +
[n]>&digit- + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
[n]<>word + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 3.7.1 Simple Command Expansion How Bash expands simple commands before + executing them. + 3.7.2 Command Search and Execution How Bash finds commands and runs them. + 3.7.3 Command Execution Environment The environment in which Bash + executes commands that are not + shell builtins. + 3.7.4 Environment The environment given to a command. + 3.7.5 Exit Status The status returned by commands and how Bash + interprets it. + 3.7.6 Signals What happens when Bash or a command it runs + receives a signal.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. +
+ +
+ +
+ +
+ +
+ +If no command name results, the variable assignments affect the current +shell environment. Otherwise, the variables are added to the environment +of the executed command and do not affect the current shell environment. +If any of the assignments attempts to assign a value to a readonly variable, +an error occurs, and the command exits with a non-zero status. +
+ +If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. +
+ +If there is a command name left after expansion, execution proceeds as +described below. Otherwise, the command exits. If one of the expansions +contained a command substitution, the exit status of the command is +the exit status of the last command substitution performed. If there +were no command substitutions, the command exits with a status of zero. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +
+ +
+ +
+ +
$PATH
for a directory containing an executable file
+by that name. Bash uses a hash table to remember the full
+pathnames of executable files to avoid multiple PATH
searches
+(see the description of hash
in 4.1 Bourne Shell Builtins).
+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 searches for a defined shell
+function named command_not_found_handle
.
+If that function exists, it is invoked with the original command and
+the original command's arguments as its arguments, and the function's
+exit status becomes the exit status of the shell.
+If that function is not defined, the shell prints an error
+message and returns an exit status of 127.
++ +
+ +
+ +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The shell has an execution environment, which consists of the +following: +
+ +
exec
builtin
++ +
cd
, pushd
, or
+popd
, or inherited by the shell at invocation
++ +
umask
or inherited from
+the shell's parent
++ +
trap
++ +
set
+or inherited from the shell's parent in the environment
++ +
+ +
set
++ +
shopt
(see section 4.3.2 The Shopt Builtin)
++ +
alias
(see section 6.6 Aliases)
++ +
$$
, and the value of
+$PPID
++ +
+ +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. +
+ +
+ +
+ +
+ +
+ +
+ +
+ +A command invoked in this separate environment cannot affect the +shell's execution environment. +
+ +Command substitution, commands grouped with parentheses, +and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed +in a subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. +
+ +Subshells spawned to execute command substitutions inherit the value of +the `-e' option from the parent shell. When not in POSIX mode, +Bash clears the `-e' option in such subshells. +
+ +If a command is followed by a `&' and job control is not active, the +default standard input for the command is the empty file `/dev/null'. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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 provides several ways to manipulate the environment.
+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
and `export -n'
+commands, 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 3.4 Shell Parameters. +These assignment statements affect only the environment seen +by that command. +
+ +If the `-k' option is set (see section 4.3.1 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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The exit status of an executed command is the value returned by the +waitpid system call or equivalent function. Exit statuses +fall between 0 and 255, though, as explained below, the shell may +use values above 125 specially. Exit statuses from shell builtins and +compound commands are also limited to this range. Under certain +circumstances, the shell will use special values to indicate specific +failure modes. +
+ +For the shell's purposes, 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. +
+ +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. +
+ +The exit status is used by the Bash conditional commands +(see section 3.2.4.2 Conditional Constructs) and some of the list +constructs (see section 3.2.3 Lists of Commands). +
+ +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. +All builtins return an exit status of 2 to indicate incorrect usage. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+When Bash is interactive, in the absence of any traps, 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 (see section 7. Job Control), Bash
+ignores SIGTTIN
, SIGTTOU
, and SIGTSTP
.
+
+
+Non-builtin commands started by Bash have signal handlers set to the
+values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore SIGINT
and SIGQUIT
in addition to these inherited
+handlers.
+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, an interactive shell resends the SIGHUP
to
+all jobs, running or stopped.
+Stopped jobs are sent SIGCONT
to ensure that they receive
+the SIGHUP
.
+To prevent the shell from sending the SIGHUP
signal to a
+particular job, it should be removed
+from the jobs table with the disown
+builtin (see section 7.2 Job Control Builtins) or marked
+to not receive SIGHUP
using disown -h
.
+
+
+If the huponexit
shell option has been set with shopt
+(see section 4.3.2 The Shopt Builtin), Bash sends a SIGHUP
to all jobs when
+an interactive login shell exits.
+
+
+If Bash is waiting for a command to complete and receives a signal
+for which a trap has been set, the trap will not be executed until
+the command completes.
+When Bash is waiting for an asynchronous
+command via the wait
builtin, the reception of a signal for
+which a trap has been set will cause the wait
builtin to return
+immediately with an exit status greater than 128, immediately after
+which the trap is executed.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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
+(see section 6.1 Invoking Bash),
+Bash reads and executes commands from the file, then exits. This
+mode of operation creates a non-interactive shell. The shell first
+searches for the file in the current directory, and looks in the
+directories in $PATH
if not found there.
+
+
+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 + |
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, with the
+exception that the locations of commands remembered by the parent
+(see the description of hash
in 4.1 Bourne Shell Builtins)
+are retained by the child.
+
+
+Most versions of Unix make this a part of the operating system'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.
+Thus, you can specify Bash, awk
, Perl, or some other
+interpreter and write the rest of the script file in that language.
+
+ +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. +
+
+Bash scripts often begin with #! /bin/bash
(assuming that
+Bash has been installed in `/bin'), since this ensures that
+Bash will be used to interpret the script, even if it is executed
+under another shell.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 4.1 Bourne Shell Builtins Builtin commands inherited from the Bourne + Shell. + 4.2 Bash Builtin Commands Table of builtins specific to Bash. + 4.3 Modifying Shell Behavior Builtins to modify shell attributes and + optional behavior. + 4.4 Special Builtins Builtin commands classified specially by + POSIX.
+ +Builtin commands are contained within the shell itself. +When the name of a builtin command is used as the first word of +a simple command (see section 3.2.1 Simple Commands), the shell executes +the command directly, without invoking another program. +Builtin commands are necessary to implement functionality impossible +or inconvenient to obtain with separate utilities. +
+ +This section briefly describes the builtins which Bash inherits from +the Bourne Shell, as well as the builtin commands which are unique +to or have been extended in Bash. +
+ +Several builtin commands are described in other chapters: builtin +commands which provide the Bash interface to the job control +facilities (see section 7.2 Job Control Builtins), the directory stack +(see section 6.8.1 Directory Stack Builtins), the command history +(see section 9.2 Bash History Builtins), and the programmable completion +facilities (see section 8.7 Programmable Completion Builtins). +
+ +Many of the builtins have been extended by POSIX or Bash. +
+
+Unless otherwise noted, each builtin command documented as accepting
+options preceded by `-' accepts `--'
+to signify the end of the options.
+The :
, true
, false
, and test
+builtins do not accept options and do not treat `--' specially.
+The exit
, logout
, break
, continue
, let
,
+and shift
builtins accept and process arguments beginning
+with `-' without requiring `--'.
+Other builtins that accept arguments but are not specified as accepting
+options interpret arguments beginning with `-' as invalid options and
+require `--' to prevent this interpretation.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The following shell builtin commands are inherited from the Bourne Shell. +These commands are implemented as specified by the POSIX standard. +
+ +
: (a colon)
+: [arguments] + |
+ +
. (a period)
+. filename [arguments] + |
PATH
variable is used to find filename.
+When Bash is not in POSIX mode, the current directory is searched
+if filename is not found in $PATH
.
+If any arguments are supplied, they become the positional
+parameters when filename is executed. Otherwise the positional
+parameters are unchanged.
+The return status is the exit status of the last command executed, or
+zero if no commands are executed. If filename is not found, or
+cannot be read, the return status is non-zero.
+This builtin is equivalent to source
.
++ +
break
+break [n] + |
for
, while
, until
, or select
loop.
+If n is supplied, the nth enclosing loop is exited.
+n must be greater than or equal to 1.
+The return status is zero unless n is not greater than or equal to 1.
++ +
cd
+cd [-L|-P] [directory] + |
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; symbolic
+links are followed by default or with the `-L' option.
+If directory is `-', it is equivalent to $OLDPWD
.
+
+
+If a non-empty directory name from CDPATH
is used, or if
+`-' is the first argument, and the directory change is
+successful, the absolute pathname of the new working directory is
+written to the standard output.
+
+ +The return status is zero if the directory is successfully changed, +non-zero otherwise. +
+ +
continue
+continue [n] + |
for
, while
,
+until
, or select
loop.
+If n is supplied, the execution of the nth enclosing loop
+is resumed.
+n must be greater than or equal to 1.
+The return status is zero unless n is not greater than or equal to 1.
++ +
eval
+eval [arguments] + |
eval
.
+If there are no arguments or only empty arguments, the return status is
+zero.
++ +
exec
+exec [-cl] [-a name] [command [arguments]] + |
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. If there are no redirection errors, the
+return status is zero; otherwise the return status is non-zero.
++ +
exit
+exit [n] + |
EXIT
is executed before the shell terminates.
++ +
export
+export [-fn] [-p] [name[=value]] + |
+ +The return status is zero unless an invalid option is supplied, one of +the names is not a valid shell variable name, or `-f' is supplied +with a name that is not a shell function. +
+ +
getopts
+getopts optstring name [args] + |
getopts
is used by shell scripts to parse positional parameters.
+optstring contains the option characters to be recognized; if a
+character is followed by a colon, the option is expected to have an
+argument, which should be separated from it by white space.
+The colon (`:') and question mark (`?') may not be
+used as option characters.
+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.
+
+
+When the end of options is encountered, getopts
exits with a
+return value greater than zero.
+OPTIND
is set to the index of the first non-option argument,
+and name
is set to `?'.
+
+
+getopts
+normally parses the positional parameters, but if more arguments are
+given in args, getopts
parses those instead.
+
+
+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 invalid options or missing option arguments are
+encountered.
+If the variable OPTERR
+is set to 0, no error messages will be displayed, even if the first
+character of optstring
is not a colon.
+
+
+If an invalid 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.
+
+ +
hash
+hash [-r] [-p filename] [-dt] [name] + |
$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.
+The `-d' option causes the shell to forget the remembered location
+of each name.
+If the `-t' option is supplied, the full pathname to which each
+name corresponds is printed. If multiple name arguments are
+supplied with `-t' the name is printed before the hashed
+full pathname.
+The `-l' option causes output to be displayed in a format
+that may be reused as input.
+If no arguments are given, or if only `-l' is supplied,
+information about remembered commands is printed.
+The return status is zero unless a name is not found or an invalid
+option is supplied.
++ +
pwd
+pwd [-LP] + |
+ +
readonly
+readonly [-aApf] [name[=value]] ... + |
+ +
return
+return [n] + |
.
(or source
) builtin, returning either n or
+the exit status of the last command executed within the script as the exit
+status of the script.
+Any command associated with the RETURN
trap is executed
+before execution resumes after the function or script.
+The return status is non-zero if return
is used outside a function
+and not during the execution of a script by .
or source
.
++ +
shift
+shift [n] + |
$#
are
+renamed to $1
... $#
-n.
+Parameters represented by the numbers $#
to $#
-n+1
+are unset.
+n must be a non-negative number less than or equal to $#
.
+If n is zero or greater than $#
, the positional parameters
+are not changed.
+If n is not supplied, it is assumed to be 1.
+The return status is zero unless n is greater than $#
or
+less than zero, non-zero otherwise.
++ +
test
+[
+test
does not accept any options, nor does it accept and ignore
+an argument of `--' as signifying the end of options.
+
+
+When the [
form is used, the last argument to the command must
+be a ]
.
+
+ +Expressions may be combined using the following operators, listed in +decreasing order of precedence. +The evaluation depends on the number of arguments; see below. +
+ +
! expr
++ +
( expr )
++ +
expr1 -a expr2
++ +
expr1 -o expr2
+
+
+The test
and [
builtins evaluate conditional
+expressions using a set of rules based on the number of arguments.
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
times
+times + |
+ +
trap
+trap [-lp] [arg] [sigspec ...] + |
trap
prints the list of commands
+associated with each signal number in a form that may be reused as
+shell input.
+The `-l' option causes the shell to print a list of signal names
+and their corresponding numbers.
+Each sigspec is either a signal name or a signal number.
+Signal names are case insensitive and the SIG
prefix is optional.
+
+
+If a sigspec
+is 0
or EXIT
, arg is executed when the shell exits.
+If a sigspec is DEBUG
, the command arg is executed
+before every simple command, for
command, case
command,
+select
command, every arithmetic for
command, and before
+the first command executes in a shell function.
+Refer to the description of the extdebug
option to the
+shopt
builtin (see section 4.3.2 The Shopt Builtin) for details of its
+effect on the DEBUG
trap.
+If a sigspec is RETURN
, the command arg is executed
+each time a shell function or a script executed with the .
or
+source
builtins finishes executing.
+
+
+If a sigspec is ERR
, the command arg
+is executed whenever a simple command has a non-zero exit status,
+subject to the following conditions.
+The ERR
trap is not executed if the failed command is part of the
+command list immediately following an until
or while
keyword,
+part of the test following the if
or elif
reserved words,
+part of a command executed in a &&
or ||
list,
+or if the command's return
+status is being inverted using !
.
+These are the same conditions obeyed by the errexit
option.
+
+ +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals that are not being ignored are reset to their original +values in a subshell or subshell environment when one is created. +
+ +The return status is zero unless a sigspec does not specify a +valid signal. +
+ +
umask
+umask [-p] [-S] [mode] + |
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.
+If the `-p' option is supplied, and mode
+is omitted, the output is in a form that may be reused as input.
+The return status is zero if the mode is successfully changed or if
+no mode argument is supplied, and non-zero otherwise.
+
+
+Note that when the mode is interpreted as an octal number, each number
+of the umask is subtracted from 7
. Thus, a umask of 022
+results in permissions of 755
.
+
+ +
unset
+unset [-fv] [name] + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +This section describes builtin commands which are unique to +or have been extended in Bash. +Some of these commands are specified in the POSIX standard. +
+ +
alias
+alias [ |
+
+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.
+Aliases are described in 6.6 Aliases.
+
+ +
bind
+bind [-m keymap] [-lpsvPSV] +bind [-m keymap] [-q function] [-u function] [-r keyseq] +bind [-m keymap] -f filename +bind [-m keymap] -x keyseq:shell-command +bind [-m keymap] keyseq:function-name +bind readline-command + |
+ +Display current Readline (see section 8. Command Line Editing) +key and function bindings, +bind a key sequence to a Readline function or macro, +or set a Readline variable. +Each non-option argument is a command as it would appear in a +Readline initialization file (see section 8.3 Readline Init File), +but each binding or command 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
+emacs
,
+emacs-standard
,
+emacs-meta
,
+emacs-ctlx
,
+vi
,
+vi-move
,
+vi-command
, and
+vi-insert
.
+vi
is equivalent to vi-command
;
+emacs
is equivalent to emacs-standard
.
++ +
-l
++ +
-p
++ +
-P
++ +
-v
++ +
-V
++ +
-s
++ +
-S
++ +
-f filename
++ +
-q function
++ +
-u function
++ +
-r keyseq
++ +
-x keyseq:shell-command
+READLINE_LINE
variable to the contents of the Readline line
+buffer and the READLINE_POINT
variable to the current location
+of the insertion point.
+If the executed command changes the value of READLINE_LINE
or
+READLINE_POINT
, those new values will be reflected in the
+editing state.
++ +The return status is zero unless an invalid option is supplied or an +error occurs. +
+ +
builtin
+builtin [shell-builtin [args]] + |
+ +
caller
+caller [expr] + |
.
or source
builtins).
+
+
+Without expr, caller
displays the line number and source
+filename of the current subroutine call.
+If a non-negative integer is supplied as expr, caller
+displays the line number, subroutine name, and source file corresponding
+to that position in the current execution call stack. This extra
+information may be used, for example, to print a stack trace. The
+current frame is frame 0.
+
+ +The return value is 0 unless the shell is not executing a subroutine +call or expr does not correspond to a valid position in the +call stack. +
+ +
command
+command [-pVv] command [arguments ...] + |
PATH
are executed.
+If there is a shell function named ls
, running `command ls'
+within the function will execute the external command ls
+instead of calling the function recursively.
+The `-p' option means to use a default value for PATH
+that is guaranteed to find all of the standard utilities.
+The return status in this case is 127 if command cannot be
+found or an error occurred, and the exit status of command
+otherwise.
++ +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 displayed; the `-V' option produces +a more verbose description. In this case, the return status is +zero if command is found, and non-zero if not. +
+ +
declare
+declare [-aAfFilrtux] [-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 with name arguments, additional options +are ignored. +
+
+When `-p' is supplied without name arguments, declare
+will display the attributes and values of all variables having the
+attributes specified by the additional options.
+If no other options are supplied with `-p', declare
will
+display the attributes and values of all shell variables. The `-f'
+option will restrict the display to shell functions.
+
+
+The `-F' option inhibits the display of function definitions;
+only the function name and attributes are printed.
+If the extdebug
shell option is enabled using shopt
+(see section 4.3.2 The Shopt Builtin), the source file name and line number where
+the function is defined are displayed as well.
+`-F' implies `-f'.
+The following options can be used to restrict output to variables with
+the specified attributes or to give variables attributes:
+
+ +
-a
++ +
-A
++ +
-f
++ +
-i
++ +
-l
++ +
-r
++ +
-t
+trace
attribute.
+Traced functions inherit the DEBUG
and RETURN
traps from
+the calling shell.
+The trace attribute has no special meaning for variables.
++ +
-u
++ +
-x
+
+
+Using `+' instead of `-' turns off the attribute instead,
+with the exceptions that `+a'
+may not be used to destroy an array variable and `+r' will not
+remove the readonly attribute.
+When used in a function, declare
makes each name local,
+as with the local
command. If a variable name is followed by
+=value, the value of the variable is set to value.
+
+ +The return status is zero unless an invalid option is encountered, +an attempt is made to define a function using `-f foo=bar', +an attempt is made to assign a value to a readonly variable, +an attempt is made to assign a value to an array variable without +using the compound assignment syntax (see section 6.7 Arrays), +one of the names is not a valid shell variable name, +an attempt is made to turn off readonly status for a readonly variable, +an attempt is made to turn off array status for an array variable, +or an attempt is made to display a non-existent function with `-f'. +
+ +
echo
+echo [-neE] [arg ...] + |
xpg_echo
shell option may be used to
+dynamically determine whether or not echo
expands these
+escape characters by default.
+echo
does not interpret `--' to mean the end of options.
+
+
+echo
interprets the following escape sequences:
+
\a
+\b
+\c
+\e
+\f
+\n
+\r
+\t
+\v
+\\
+\0nnn
+\xHH
++ +
enable
+enable [-a] [-dnps] [-f filename] [name ...] + |
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 special
+builtins. If `-s' is used with `-f', the new builtin becomes
+a special builtin (see section 4.4 Special Builtins).
+
+ +The return status is zero unless a name is not a shell builtin +or there is an error loading a new builtin from a shared object. +
+ +
help
+help [-dms] [pattern] + |
help
gives detailed help
+on all commands matching pattern, otherwise a list of
+the builtins is printed.
++ +Options, if supplied, have the following meanings: +
+ +
-d
+-m
+-s
++ +The return status is zero unless no command matches pattern. +
+ +
let
+let expression [expression] + |
let
builtin allows arithmetic to be performed on shell
+variables. Each expression is evaluated according to the
+rules given below in 6.5 Shell Arithmetic. If the
+last expression evaluates to 0, let
returns 1;
+otherwise 0 is returned.
++ +
local
+local [option] name[=value] ... + |
declare
.
+local
can only be used within a function; it makes the variable
+name have a visible scope restricted to that function and its
+children. The return status is zero unless local
is used outside
+a function, an invalid name is supplied, or name is a
+readonly variable.
++ +
logout
+logout [n] + |
+ +
mapfile
+mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [ +-C callback] [-c quantum] [array] + |
MAPFILE
is the default array.
+Options, if supplied, have the following meanings:
+-n
+-O
+-s
+-t
+-u
+-C
+-c
++ +If `-C' is specified without `-c', +the default quantum is 5000. +When callback is evaluated, it is supplied the index of the next +array element to be assigned as an additional argument. +callback is evaluated after the line is read but before the +array element is assigned. +
+
+If not supplied with an explicit origin, mapfile
will clear array
+before assigning to it.
+
+
+mapfile
returns successfully unless an invalid option or option
+argument is supplied, array is invalid or unassignable, or array
+is not an indexed array.
+
+ +
printf
+printf [-v var] format [arguments] + |
printf(1)
formats, `%b' causes
+printf
to expand backslash escape sequences in the corresponding
+argument,
+(except that `\c' terminates output, backslashes in
+`\'', `\"', and `\?' are not removed, and octal escapes
+beginning with `\0' may contain up to four digits),
+and `%q' causes printf
to output the
+corresponding argument in a format that can be reused as shell input.
++ +The `-v' option causes the output to be assigned to the variable +var rather than being printed to the standard output. +
+ +The format is reused as necessary to consume all of the arguments. +If the format requires more arguments than are supplied, the +extra format specifications behave as if a zero value or null string, as +appropriate, had been supplied. The return value is zero on success, +non-zero on failure. +
+ +
read
+read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] + |
IFS
variable
+are used to split the line into words.
+The backslash character `\' may be used to remove any special
+meaning for the next character read and for line continuation.
+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, read
+times out (in which case the return code is greater than 128), or an
+invalid file descriptor is supplied as the argument to `-u'.
++ +Options, if supplied, have the following meanings: +
+ +
-a aname
++ +
-d delim
++ +
-e
++ +
-i text
++ +
-n nchars
+read
returns after reading nchars characters rather than
+waiting for a complete line of input, but honor a delimiter if fewer
+than nchars characters are read before the delimiter.
++ +
-N nchars
+read
returns after reading exactly nchars characters rather
+than waiting for a complete line of input, unless EOF is encountered or
+read
times out.
+Delimiter characters encountered in the input are
+not treated specially and do not cause read
to return until
+nchars characters are read.
++ +
-p prompt
++ +
-r
++ +
-s
++ +
-t timeout
+read
to time out and return failure if a complete line of
+input is not read within timeout seconds.
+timeout may be a decimal number with a fractional portion following
+the decimal point.
+This option is only effective if read
is reading input from a
+terminal, pipe, or other special file; it has no effect when reading
+from regular files.
+If timeout is 0, read
returns success if input is available on
+the specified file descriptor, failure otherwise.
+The exit status is greater than 128 if the timeout is exceeded.
++ +
-u fd
++ +
+ +
readarray
+readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [ +-C callback] [-c quantum] [array] + |
+
+A synonym for mapfile
.
+
+ +
source
+source filename + |
.
(see section 4.1 Bourne Shell Builtins).
++ +
type
+type [-afptP] [name ...] + |
+
+If the `-t' option is used, type
prints 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 `-p' option is used, type
either returns the name
+of the disk file that would be executed, or nothing if `-t'
+would not return `file'.
+
+ +The `-P' option forces a path search for each name, even if +`-t' would not return `file'. +
+
+If a command is hashed, `-p' and `-P' print the hashed value,
+not necessarily the file that appears first in $PATH
.
+
+
+If the `-a' option is used, type
returns all of the places
+that contain an executable named file.
+This includes aliases and functions, if and only if the `-p' option
+is not also used.
+
+
+If the `-f' option is used, type
does not attempt to find
+shell functions, as with the command
builtin.
+
+ +The return status is zero if all of the names are found, non-zero +if any are not found. +
+ +
typeset
+typeset [-afFrxi] [-p] [name[=value] ...] + |
typeset
command is supplied for compatibility with the Korn
+shell; however, it has been deprecated in favor of the declare
+builtin command.
++ +
ulimit
+ulimit [-abcdefilmnpqrstuvxHST] [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
++ +
-H
++ +
-a
++ +
-b
++ +
-c
++ +
-d
++ +
-e
++ +
-f
++ +
-i
++ +
-l
++ +
-m
++ +
-n
++ +
-p
++ +
-q
++ +
-r
++ +
-s
++ +
-t
++ +
-u
++ +
-v
++ +
-x
++ +
-T
++ +
+
+If limit is given, it is the new value of the specified resource;
+the special limit values hard
, soft
, and
+unlimited
stand for the current hard limit, the current soft limit,
+and no limit, respectively.
+A hard limit cannot be increased by a non-root user once it is set;
+a soft limit may be increased up to the value of the hard limit.
+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.
+
+ +The return status is zero unless an invalid option or argument is supplied, +or an error occurs while setting a new limit. +
+ +
unalias
+unalias [-a] [name ... ] + |
+ +Remove each name from the list of aliases. If `-a' is +supplied, all aliases are removed. +Aliases are described in 6.6 Aliases. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
++
+ 4.3.1 The Set Builtin Change the values of shell attributes and + positional parameters. + 4.3.2 The Shopt Builtin Modify shell optional behavior.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+This builtin is so complicated that it deserves its own section. set
+allows you to change the values of shell options and set the positional
+parameters, or to display the names and values of shell variables.
+
+ +
set
+set [--abefhkmnptuvxBCEHPT] [-o option] [argument ...] +set [+abefhkmnptuvxBCEHPT] [+o option] [argument ...] + |
+
+If no options or arguments are supplied, set
displays the names
+and values of all shell variables and functions, sorted according to the
+current locale, in a format that may be reused as input
+for setting or resetting the currently-set variables.
+Read-only variables cannot be reset.
+In POSIX mode, only shell variables are listed.
+
+ +When options are supplied, they set or unset shell attributes. +Options, if specified, have the following meanings: +
+ +
-a
++ +
-b
++ +
-e
+while
or until
keyword,
+part of the test in an if
statement,
+part of any command executed in a &&
or ||
list except
+the command following the final &&
or ||
,
+any command in a pipeline but the last,
+or if the command's return status is being inverted with !
.
+A trap on ERR
, if set, is executed before the shell exits.
++ +This option applies to the shell environment and each subshell environment +separately (see section 3.7.3 Command Execution Environment), and may cause +subshells to exit before executing all the commands in the subshell. +
+ +
-f
++ +
-h
++ +
-k
++ +
-m
++ +
-n
++ +
-o option-name
++ +Set the option corresponding to option-name: +
+ +
allexport
+-a
.
++ +
braceexpand
+-B
.
++ +
emacs
+emacs
-style line editing interface (see section 8. Command Line Editing).
+This also affects the editing interface used for read -e
.
++ +
errexit
+-e
.
++ +
errtrace
+-E
.
++ +
functrace
+-T
.
++ +
hashall
+-h
.
++ +
histexpand
+-H
.
++ +
history
++ +
ignoreeof
++ +
keyword
+-k
.
++ +
monitor
+-m
.
++ +
noclobber
+-C
.
++ +
noexec
+-n
.
++ +
noglob
+-f
.
++ +
nolog
++ +
notify
+-b
.
++ +
nounset
+-u
.
++ +
onecmd
+-t
.
++ +
physical
+-P
.
++ +
pipefail
++ +
posix
++ +
privileged
+-p
.
++ +
verbose
+-v
.
++ +
vi
+vi
-style line editing interface.
+This also affects the editing interface used for read -e
.
++ +
xtrace
+-x
.
++ +
-p
+$BASH_ENV
and $ENV
files are not
+processed, shell functions are not inherited from the environment,
+and the SHELLOPTS
, BASHOPTS
, CDPATH
and GLOBIGNORE
+variables, if they appear in the environment, are ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the -p
option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the -p
option is supplied at startup, the effective user id is
+not reset.
+Turning this option off causes the effective user
+and group ids to be set to the real user and group ids.
++ +
-t
++ +
-u
++ +
-v
++ +
-x
+for
commands, case
+commands, select
commands, and arithmetic for
commands
+and their arguments or associated word lists after they are
+expanded and before they are executed. The value of the PS4
+variable is expanded and the resultant value is printed before
+the command and its expanded arguments.
++ +
-B
++ +
-C
++ +
-E
+ERR
is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The ERR
trap is normally not inherited in such cases.
++ +
-H
++ +
-P
+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 symbolic 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 + |
+ +
-T
+DEBUG
and RETURN
are inherited by
+shell functions, command substitutions, and commands executed
+in a subshell environment.
+The DEBUG
and RETURN
traps are normally not inherited
+in such cases.
++ +
--
++ +
-
+
+
+Using `+' rather than `-' causes these options to be
+turned off. The options can also be used upon invocation of the
+shell. The current set of options may be found in $-
.
+
+
+The remaining N arguments are positional parameters and are
+assigned, in order, to $1
, $2
, ... $N
.
+The special parameter #
is set to N.
+
+ +The return status is always zero unless an invalid option is supplied. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +This builtin allows you to change additional shell optional behavior. +
+ +
shopt
+shopt [-pqsu] [-o] [optname ...] + |
+ +
-s
++ +
-u
++ +
-q
++ +
-o
+set
builtin (see section 4.3.1 The Set Builtin).
++ +If either `-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 valid shell +option. +
+
+The list of shopt
options is:
+
autocd
+cd
command.
+This option is only used by interactive shells.
++ +
cdable_vars
+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
+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 only used by interactive shells.
++ +
checkhash
++ +
checkjobs
++ +
checkwinsize
+LINES
and COLUMNS
.
++ +
cmdhist
++ +
compat31
++ +
dirspell
++ +
dotglob
++ +
execfail
+exec
+builtin command. An interactive shell does not exit if exec
+fails.
++ +
expand_aliases
++ +
extdebug
++ +
declare
builtin (see section 4.2 Bash Builtin Commands)
+displays the source file name and line number corresponding to each function
+name supplied as an argument.
++ +
DEBUG
trap returns a non-zero value, the
+next command is skipped and not executed.
++ +
DEBUG
trap returns a value of 2, and the
+shell is executing in a subroutine (a shell function or a shell script
+executed by the .
or source
builtins), a call to
+return
is simulated.
++ +
BASH_ARGC
and BASH_ARGV
are updated as described in their
+descriptions (see section 5.2 Bash Variables).
++ +
( command )
inherit the
+DEBUG
and RETURN
traps.
++ +
( command )
inherit the
+ERROR
trap.
++ +
extglob
++ +
extquote
+$'string'
and $"string"
quoting is
+performed within ${parameter}
expansions
+enclosed in double quotes. This option is enabled by default.
++ +
failglob
++ +
force_fignore
+FIGNORE
shell variable
+cause words to be ignored when performing word completion even if
+the ignored words are the only possible completions.
+See section 5.2 Bash Variables, for a description of FIGNORE
.
+This option is enabled by default.
++ +
globstar
++ +
gnu_errfmt
++ +
histappend
+HISTFILE
+variable when the shell exits, rather than overwriting the file.
++ +
histreedit
++ +
histverify
++ +
hostcomplete
++ +
huponexit
+SIGHUP
to all jobs when an interactive
+login shell exits (see section 3.7.6 Signals).
++ +
interactive_comments
++ +
lithist
+cmdhist
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
++ +
login_shell
++ +
mailwarn
+"The mail in mailfile has been read"
is displayed.
++ +
no_empty_cmd_completion
+PATH
for possible completions when completion is attempted
+on an empty line.
++ +
nocaseglob
++ +
nocasematch
+case
or [[
+conditional commands.
++ +
nullglob
++ +
progcomp
++ +
promptvars
++ +
restricted_shell
++ +
shift_verbose
+shift
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
++ +
sourcepath
+source
builtin uses the value of PATH
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
++ +
xpg_echo
+echo
builtin expands backslash-escape sequences
+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 valid shell option. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +For historical reasons, the POSIX standard has classified +several builtin commands as special. +When Bash is executing in POSIX mode, the special builtins +differ from other builtin commands in three respects: +
+ +
+ +
+ +
+ +When Bash is not executing in POSIX mode, these builtins behave no +differently than the rest of the Bash builtin commands. +The Bash POSIX mode is described in 6.11 Bash POSIX Mode. +
+ +These are the POSIX special builtins: +
break : . continue eval exec exit export readonly return set +shift trap unset + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 5.1 Bourne Shell Variables Variables which Bash uses in the same way + as the Bourne Shell. + 5.2 Bash Variables List of variables that exist in Bash.
+ +This chapter describes the shell variables that Bash uses. +Bash automatically assigns default values to a number of variables. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Bash uses certain shell variables in the same way as the Bourne shell. +In some cases, Bash assigns a default value to the variable. +
+ +
CDPATH
+cd
builtin command.
+HOME
+cd
builtin
+command.
+The value of this variable is also used by tilde expansion
+(see section 3.5.2 Tilde Expansion).
+IFS
+MAIL
+MAILPATH
variable
+is not set, Bash informs the user of the arrival of mail in
+the specified file.
+MAILPATH
+$_
expands to the name of
+the current mail file.
+OPTARG
+getopts
builtin.
+OPTIND
+getopts
builtin.
+PATH
+PATH
indicates the
+current directory.
+A null directory name may appear as two adjacent colons, or as an initial
+or trailing colon.
+PS1
+PS1
is displayed.
+PS2
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +These variables are set or used by Bash, but other shells +do not normally treat them specially. +
+ +A few variables used by Bash are described in different chapters: +variables for controlling the job control facilities +(see section 7.3 Job Control Variables). +
+ +
BASH
+BASHOPTS
+shopt
builtin command (see section 4.3.2 The Shopt Builtin).
+The options appearing in BASHOPTS
are those reported
+as `on' by `shopt'.
+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.
+BASHPID
+$$
under certain circumstances, such as subshells
+that do not require Bash to be re-initialized.
+BASH_ALIASES
+alias
builtin
+(see section 4.1 Bourne Shell Builtins).
+Elements added to this array appear in the alias list; unsetting array
+elements cause aliases to be removed from the alias list.
+BASH_ARGC
+.
or source
) is at the top of the stack. When a
+subroutine is executed, the number of parameters passed is pushed onto
+BASH_ARGC
.
+The shell sets BASH_ARGC
only when in extended debugging mode
+(see 4.3.2 The Shopt Builtin
+for a description of the extdebug
option to the shopt
+builtin).
+BASH_ARGV
+BASH_ARGV
.
+The shell sets BASH_ARGV
only when in extended debugging mode
+(see 4.3.2 The Shopt Builtin
+for a description of the extdebug
option to the shopt
+builtin).
+BASH_CMDS
+hash
builtin
+(see section 4.1 Bourne Shell Builtins).
+Elements added to this array appear in the hash table; unsetting array
+elements cause commands to be removed from the hash table.
+BASH_COMMAND
+BASH_ENV
+BASH_EXECUTION_STRING
+BASH_LINENO
+${BASH_LINENO[$i]}
is the line number in the source file where
+${FUNCNAME[$i]}
was called (or ${BASH_LINENO[$i-1]}
if
+referenced within another shell function).
+The corresponding source file name is ${BASH_SOURCE[$i]}
.
+Use LINENO
to obtain the current line number.
+BASH_REMATCH
+[[
conditional command
+(see section 3.2.4.2 Conditional Constructs).
+The element with index 0 is the portion of the string
+matching the entire regular expression.
+The element with index n is the portion of the
+string matching the nth parenthesized subexpression.
+This variable is read-only.
+BASH_SOURCE
+FUNCNAME
array variable.
+BASH_SUBSHELL
+BASH_VERSINFO
++ +
BASH_VERSINFO[0]
++ +
BASH_VERSINFO[1]
++ +
BASH_VERSINFO[2]
++ +
BASH_VERSINFO[3]
++ +
BASH_VERSINFO[4]
++ +
BASH_VERSINFO[5]
+MACHTYPE
.
++ +
BASH_VERSION
+BASH_XTRACEFD
+BASH_XTRACEFD
is unset or assigned
+a new value.
+Unsetting BASH_XTRACEFD
or assigning it the empty string causes the
+trace output to be sent to the standard error.
+Note that setting BASH_XTRACEFD
to 2 (the standard error file
+descriptor) and then unsetting it will result in the standard error
+being closed.
+COLUMNS
+select
builtin command to determine the terminal width
+when printing selection lists. Automatically set upon receipt of a
+SIGWINCH
.
+COMP_CWORD
+${COMP_WORDS}
of the word containing the current
+cursor position.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see section 8.6 Programmable Completion).
+COMP_LINE
+COMP_POINT
+${#COMP_LINE}
.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see section 8.6 Programmable Completion).
+COMP_TYPE
+COMP_KEY
+COMP_WORDBREAKS
+COMP_WORDBREAKS
is unset, it loses its special properties,
+even if it is subsequently reset.
+COMP_WORDS
+COMP_WORDBREAKS
as described above.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see section 8.6 Programmable Completion).
+COMPREPLY
+DIRSTACK
+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.
+EMACS
+EUID
+FCEDIT
+fc
+builtin command.
+FIGNORE
+FIGNORE
+is excluded from the list of matched file names. A sample
+value is `.o:~'
+FUNCNAME
+"main"
.
+This variable exists only when a shell function is executing.
+Assignments to FUNCNAME
have no effect and return an error status.
+If FUNCNAME
is unset, it loses its special properties, even if
+it is subsequently reset.
+GLOBIGNORE
+GLOBIGNORE
, it is removed from the list
+of matches.
+GROUPS
+GROUPS
have no effect and return an error status.
+If GROUPS
is unset, it loses its special properties, even if it is
+subsequently reset.
+histchars
+HISTCMD
+HISTCMD
is unset, it loses its special properties,
+even if it is subsequently reset.
+HISTCONTROL
+HISTCONTROL
is unset, or does not include a valid value,
+all lines read by the shell parser are saved on the history list,
+subject to the value of HISTIGNORE
.
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+HISTCONTROL
.
+HISTFILE
+HISTFILESIZE
+HISTIGNORE
+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.
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+HISTIGNORE
.
+
+
+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
.
+
HISTSIZE
+HISTTIMEFORMAT
+history
builtin.
+If this variable is set, time stamps are written to the history file so
+they may be preserved across shell sessions.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+HOSTFILE
+HOSTFILE
is set, but has no value, or does not name a readable file,
+Bash attempts to read
+`/etc/hosts' to obtain the list of possible hostname completions.
+When HOSTFILE
is unset, the hostname list is cleared.
+HOSTNAME
+HOSTTYPE
+IGNOREEOF
+EOF
character
+as the sole input. If set, the value denotes 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.
+INPUTRC
+LANG
+LC_
.
+LC_ALL
+LANG
and any other
+LC_
variable specifying a locale category.
+LC_COLLATE
+LC_CTYPE
+LC_MESSAGES
+LC_NUMERIC
+LINENO
+LINES
+select
builtin command to determine the column length
+for printing selection lists. Automatically set upon receipt of a
+SIGWINCH
.
+MACHTYPE
+MAILCHECK
+MAILPATH
or MAIL
variables.
+The default is 60 seconds. When it is time to check
+for mail, the shell does so before displaying the primary prompt.
+If this variable is unset, or set to a value that is not a number
+greater than or equal to zero, the shell disables mail checking.
+OLDPWD
+cd
builtin.
+OPTERR
+getopts
builtin command.
+OSTYPE
+PIPESTATUS
+POSIXLY_CORRECT
+bash
starts, the shell
+enters POSIX mode (see section 6.11 Bash POSIX Mode) before reading the
+startup files, as if the `--posix' invocation option had been supplied.
+If it is set while the shell is running, bash
enables POSIX mode,
+as if the command
+
|
PPID
+PROMPT_COMMAND
+$PS1
).
+PROMPT_DIRTRIM
+\w
and
+\W
prompt string escapes (see section 6.9 Controlling the Prompt).
+Characters removed are replaced with an ellipsis.
+PS3
+select
command. If this variable is not set, the
+select
command prompts with `#? '
+PS4
+PS4
is replicated multiple times, as
+necessary, to indicate multiple levels of indirection.
+The default is `+ '.
+PWD
+cd
builtin.
+RANDOM
+REPLY
+read
builtin.
+SECONDS
+SHELL
+SHELLOPTS
+set
builtin command (see section 4.3.1 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.
+SHLVL
+TIMEFORMAT
+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.
++ +
%%
++ +
%[p][l]R
++ +
%[p][l]U
++ +
%[p][l]S
++ +
%P
++ +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 +
|
TMOUT
+TMOUT
is treated as the
+default timeout for the read
builtin (see section 4.2 Bash Builtin Commands).
+The select
command (see section 3.2.4.2 Conditional Constructs) terminates
+if input does not arrive after TMOUT
seconds when input is coming
+from a terminal.
++ +In an interactive shell, the value is interpreted as +the number of seconds to wait for input after issuing the primary +prompt when the shell is interactive. +Bash terminates after that number of seconds if input does +not arrive. +
TMPDIR
+UID
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +This section describes features unique to Bash. +
+ +
++
+ 6.1 Invoking Bash Command line options that you can give + to Bash. + 6.2 Bash Startup Files When and how Bash executes scripts. + 6.3 Interactive Shells What an interactive shell is. + 6.4 Bash Conditional Expressions Primitives used in composing expressions for + the test
builtin.+ 6.5 Shell Arithmetic Arithmetic on shell variables. + 6.6 Aliases Substituting one command for another. + 6.7 Arrays Array Variables. + 6.8 The Directory Stack History of visited directories. + 6.9 Controlling the Prompt Controlling the PS1 string. + 6.10 The Restricted Shell A more controlled mode of shell execution. + 6.11 Bash POSIX Mode Making Bash behave more closely to what + the POSIX standard specifies.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] [argument ...] +bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] -c string [argument ...] +bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] [argument ...] + |
+ +In addition to the single-character shell command-line options +(see section 4.3.1 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 to be recognized. +
+ +
--debugger
+extdebug
option to the shopt
+builtin) and shell function tracing
+(see 4.3.1 The Set Builtin for a description of the -o functrace
+option).
++ +
--dump-po-strings
+gettext
PO (portable object) file format.
+Equivalent to `-D' except for the output format.
++ +
--dump-strings
++ +
--help
++ +
--init-file filename
+--rcfile filename
++ +
--login
++ +
--noediting
++ +
--noprofile
++ +
--norc
+sh
.
++ +
--posix
++ +
--restricted
++ +
--verbose
++ +
--version
++ +
+
+There are several single-character options that may be supplied at
+invocation which are not available with the set
builtin.
+
+ +
-c string
+$0
.
++ +
-i
++ +
-l
++ +
-r
++ +
-s
++ +
-D
+C
or POSIX
(see section 3.1.2.5 Locale-Specific Translation).
+This implies the `-n' option; no commands will be executed.
++ +
[-+]O [shopt_option]
+shopt
builtin (see section 4.3.2 The Shopt Builtin).
+If shopt_option is present, `-O' sets the value of that option;
+`+O' unsets it.
+If shopt_option is not supplied, the names and values of the shell
+options accepted by shopt
are printed on the standard output.
+If the invocation option is `+O', the output is displayed in a format
+that may be reused as input.
++ +
--
+--
signals the end of options and disables further option
+processing.
+Any arguments after the --
are treated as filenames and arguments.
++ +
+ + +A login shell is one whose first character of argument zero is +`-', or one invoked with the `--login' option. +
+
+
+An interactive shell is one started without non-option arguments,
+unless `-s' is specified,
+without specifying the `-c' option, and whose input and output are both
+connected to terminals (as determined by isatty(3)
), or one
+started with the `-i' option. See section 6.3 Interactive Shells, for more
+information.
+
+
+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 (see section 3.8 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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +This section describes 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 (see section 3.5.2 Tilde Expansion). +
+ +Interactive shells are described in 6.3 Interactive Shells. +
+ +When Bash is invoked as an interactive login shell, or as a +non-interactive shell with the `--login' option, 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 +
|
+
+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:
+
|
PATH
variable is not used to search for the
+file name.
++ +As noted above, if a non-interactive shell is invoked with the +`--login' option, Bash attempts to read and execute commands from the +login shell startup files. +
sh
+
+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 an interactive login shell, or as a non-interactive
+shell with the `--login' option, 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 other 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, interactive shells expand the ENV
variable
+and commands are read and executed from the file whose name is the
+expanded value.
+No other startup files are read.
+
+
+Bash attempts to determine when it is being run with its standard input
+connected to a a network connection, as if by the remote shell
+daemon, usually rshd
, or the secure shell daemon sshd
.
+If Bash determines it is being run in
+this fashion, 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.
+
+
+If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the -p
option is not supplied, no startup
+files are read, shell functions are not inherited from the environment,
+the SHELLOPTS
, BASHOPTS
, CDPATH
, and GLOBIGNORE
+variables, if they appear in the environment, are ignored, and the effective
+user id is set to the real user id.
+If the -p
option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 6.3.1 What is an Interactive Shell? What determines whether a shell is Interactive. + 6.3.2 Is this Shell Interactive? How to tell if a shell is interactive. + 6.3.3 Interactive Shell Behavior What changes in a interactive shell?
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+An interactive shell
+is one started without non-option arguments, unless `-s' is
+specified, without specifying the `-c' option, and
+whose input and error output are both
+connected to terminals (as determined by isatty(3)
),
+or one started with the `-i' option.
+
+ +An interactive shell generally reads from and writes to a user's +terminal. +
+ +The `-s' invocation option may be used to set the positional parameters +when an interactive shell is started. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+To determine within a startup script whether or not Bash is
+running interactively,
+test the value of the `-' special parameter.
+It contains i
when the shell is interactive. For example:
+
+ +
case "$-" in +*i*) echo This shell is interactive ;; +*) echo This shell is not interactive ;; +esac + |
+
+Alternatively, startup scripts may 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 + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +When the shell is running interactively, it changes its behavior in +several ways. +
+ +
+ +
SIGTTIN
, SIGTTOU
, and SIGTSTP
.
++ +
PS1
before reading the first line
+of a command, and expands and displays PS2
before reading the
+second and subsequent lines of a multi-line command.
++ +
PROMPT_COMMAND
variable as a command
+before printing the primary prompt, $PS1
+(see section 5.2 Bash Variables).
++ +
+ +
ignoreeof
option to set -o
+instead of exiting immediately when it receives an EOF
on its
+standard input when reading a command (see section 4.3.1 The Set Builtin).
++ +
$HISTFILE
+when an interactive shell exits.
++ +
+ +
SIGTERM
+(see section 3.7.6 Signals).
++ +
SIGINT
is caught and handled
+((see section 3.7.6 Signals).
+SIGINT
will interrupt some shell builtins.
++ +
SIGHUP
to all jobs on exit
+if the huponexit
shell option has been enabled (see section 3.7.6 Signals).
++ +
+ +
MAIL
, MAILPATH
, and MAILCHECK
shell variables
+(see section 5.2 Bash Variables).
++ +
+ +
${var:?word}
expansions
+(see section 3.5.3 Shell Parameter Expansion).
++ +
+ +
+ +
exec
will not cause the shell to exit
+(see section 4.1 Bourne Shell Builtins).
++ +
+ +
cd
+builtin is enabled by default (see the description of the cdspell
+option to the shopt
builtin in 4.3.2 The Shopt Builtin).
++ +
TMOUT
variable and exit
+if a command is not read within the specified number of seconds after
+printing $PS1
(see section 5.2 Bash Variables).
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Conditional expressions are used by the [[
compound command
+and the test
and [
builtin commands.
+
+ +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. +If the file argument to one of the primaries is of the form +`/dev/fd/N', then file descriptor N is checked. +If the file argument to one of the primaries is one of +`/dev/stdin', `/dev/stdout', or `/dev/stderr', file +descriptor 0, 1, or 2, respectively, is checked. +
+ +When used with `[[', The `<' and `>' operators sort +lexicographically using the current locale. +
+ +Unless otherwise specified, primaries that operate on files follow symbolic +links and operate on the target of the link, rather than the link itself. +
+ +
-a file
++ +
-b file
++ +
-c file
++ +
-d file
++ +
-e file
++ +
-f file
++ +
-g file
++ +
-h file
++ +
-k file
++ +
-p file
++ +
-r file
++ +
-s file
++ +
-t fd
++ +
-u file
++ +
-w file
++ +
-x file
++ +
-O file
++ +
-G file
++ +
-L file
++ +
-S file
++ +
-N file
++ +
file1 -nt file2
++ +
file1 -ot file2
++ +
file1 -ef file2
++ +
-o optname
+set
builtin (see section 4.3.1 The Set Builtin).
++ +
-z string
++ +
-n string
+string
++ +
string1 == string2
+string1 = string2
+test
command for POSIX conformance.
++ +
string1 != string2
++ +
string1 < string2
++ +
string1 > string2
++ +
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.
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+The shell allows arithmetic expressions to be evaluated, as one of
+the shell expansions or by the let
and the `-i' option
+to the declare
builtins.
+
+ +Evaluation is done in fixed-width integers with no check for overflow, +though division by 0 is trapped and flagged as an error. +The operators and their precedence, associativity, and values +are the same as in the C language. +The following list of operators is grouped into levels of +equal-precedence operators. +The levels are listed in order of decreasing precedence. +
+ +
id++ id--
++ +
++id --id
++ +
- +
++ +
! ~
++ +
**
++ +
* / %
++ +
+ -
++ +
<< >>
++ +
<= >= < >
++ +
== !=
++ +
&
++ +
^
++ +
|
++ +
&&
++ +
||
++ +
expr ? expr : expr
++ +
= *= /= %= += -= <<= >>= &= ^= |=
++ +
expr1 , expr2
++ +Shell variables are allowed as operands; parameter expansion is +performed before the expression is evaluated. +Within an expression, shell variables may also be referenced by name +without using the parameter expansion syntax. +A shell variable that is null or unset evaluates to 0 when referenced +by name without using the parameter expansion syntax. +The value of a variable is evaluated as an arithmetic expression +when it is referenced, or when a variable which has been given the +integer attribute using `declare -i' is assigned a value. +A null value evaluates to 0. +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 interchangeably 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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Aliases allow a string to be substituted for a word when it is used
+as the first word of a simple command.
+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 simple 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 characters `/', `$', ``', `=' and any of the
+shell metacharacters or quoting characters listed above may not appear
+in an alias name.
+The replacement text may contain any valid
+shell input, including shell metacharacters.
+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
+(see section 3.3 Shell Functions).
+
+
+Aliases are not expanded when the shell is not interactive,
+unless the expand_aliases
shell option is set using
+shopt
(see section 4.3.2 The Shopt Builtin).
+
+
+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 a 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.
+
+ +For almost every purpose, shell functions are preferred over aliases. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Bash provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed 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.
+Indexed arrays are referenced using integers (including arithmetic
+expressions (see section 6.5 Shell Arithmetic) and are zero-based;
+associative arrays use arbitrary strings.
+
+ +An indexed 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 + |
declare -a name[subscript] + |
+ +Associative arrays are created using +
declare -A name. + |
+
+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) + |
[subscript]=
string.
+Indexed array assignments do not require the bracket and subscript.
+When assigning to indexed arrays, 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.
++ +When assigning to an associative array, the subscript is required. +
+
+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.
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
+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 with a subscript of 0.
+
+ +An array variable is considered set if a subscript has been assigned a +value. The null string is a valid value. +
+
+The unset
builtin is used to destroy arrays.
+unset
name[subscript]
+destroys the array element at index subscript.
+Care must be taken to avoid unwanted side effects caused by filename
+expansion.
+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 indexed
+array and a `-A' option to specify an associative 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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 6.8.1 Directory Stack Builtins Bash builtin commands to manipulate + the directory stack.
+
+The directory stack is a list of recently-visited directories. The
+pushd
builtin adds directories to the stack as it changes
+the current directory, and the popd
builtin removes specified
+directories from the stack and changes the current directory to
+the directory removed. The dirs
builtin displays the contents
+of the directory stack.
+
+
+The contents of the directory stack are also visible
+as the value of the DIRSTACK
shell variable.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
dirs
+dirs [+N | -N] [-clpv] + |
pushd
command; the
+popd
command removes directories from the list.
++N
+dirs
when invoked without options), starting
+with zero.
+-N
+dirs
when invoked without options), starting
+with zero.
+-c
+-l
+-p
+dirs
to print the directory stack with one entry per
+line.
+-v
+dirs
to print the directory stack with one entry per
+line, prefixing each entry with its index in the stack.
++ +
popd
+popd [+N | -N] [-n] + |
+
+Remove the top entry from 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
+dirs
), starting with zero.
+-N
+dirs
), starting with zero.
+-n
+pushd
+pushd [-n] [+N | -N | dir ] + |
+
+Save the current directory on the top of the directory stack
+and then cd
to dir.
+With no arguments, pushd
exchanges the top two directories.
+
+ +
-n
++N
+dirs
, starting with zero) to the top of
+the list by rotating the stack.
+-N
+dirs
, starting with zero) to the top of
+the list by rotating the stack.
+dir
+cd
dir'.
+cd
s to dir.
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+The value of the variable PROMPT_COMMAND
is examined just before
+Bash prints each primary prompt. If PROMPT_COMMAND
is set and
+has a non-null value, then the
+value is executed just as if it had been typed on the command line.
+
+ +In addition, the following table describes the special characters which +can appear in the prompt variables: +
+ +
\a
+\d
+\D{format}
+strftime
(3) and the result is inserted
+into the prompt string; an empty format results in a locale-specific
+time representation. The braces are required.
+\e
+\h
+\H
+\j
+\l
+\n
+\r
+\s
+$0
(the portion
+following the final slash).
+\t
+\T
+\@
+\A
+\u
+\v
+\V
+\w
+$HOME
abbreviated with a tilde
+(uses the $PROMPT_DIRTRIM
variable).
+\W
+$PWD
, with $HOME
abbreviated with a tilde.
+\!
+\#
+\$
+#
, otherwise $
.
+\nnn
+\\
+\[
+\]
++ +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(see section 9.1 Bash History Facilities), while the command number is +the position in the sequence of commands executed during the current +shell session. +
+
+After the string is decoded, it is expanded via
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal, subject to the value of the
+promptvars
shell option (see section 4.2 Bash Builtin Commands).
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+If Bash is started with the name rbash
, or the
+`--restricted'
+or
+`-r'
+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 or not performed:
+
+ +
cd
builtin.
+SHELL
, PATH
,
+ENV
, or BASH_ENV
variables.
+.
+builtin command.
+hash
builtin command.
+SHELLOPTS
from the shell environment at startup.
+exec
builtin to replace the shell with another command.
+enable
builtin.
+enable
builtin command to enable disabled shell builtins.
+command
builtin.
++ +These restrictions are enforced after any startup files are read. +
+
+When a command that is found to be a shell script is executed
+(see section 3.8 Shell Scripts), rbash
turns off any restrictions in
+the shell spawned to execute the script.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 standard by changing the behavior to +match that specified by POSIX in areas where the Bash default differs. +
+
+When invoked as sh
, Bash enters POSIX mode after reading the
+startup files.
+
+ +The following list is what's changed when `POSIX mode' is in effect: +
+ +
$PATH
to find the new location. This is also available with
+`shopt -s checkhash'.
++ +
+ +
SIGTSTP
.
++ +
bg
builtin uses the required format to describe each job placed
+in the background, which does not include an indication of whether the job
+is the current or previous job.
++ +
+ +
PS1
and PS2
expansions of `!' to
+the history number and `!!' to `!' are enabled,
+and parameter expansion is performed on the values of PS1
and
+PS2
regardless of the setting of the promptvars
option.
++ +
$ENV
) rather than
+the normal Bash files.
++ +
+ +
$HISTFILE
).
++ +
+ +
kill
builtin does not accept signal names with a `SIG'
+prefix.
++ +
.
filename
+is not found.
++ +
+ +
+ +
+ +
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 invalid name
+causes a fatal syntax error in non-interactive shells.
++ +
+ +
+ +
CDPATH
is set, the cd
builtin will not implicitly
+append the current directory to it. This means that cd
will
+fail if no valid directory name can be constructed from
+any of the entries in $CDPATH
, even if the a directory with
+the same name as the name given as an argument to cd
exists
+in the current directory.
++ +
+ +
for
statement or the selection variable in a
+select
statement is a readonly variable.
++ +
+ +
+ +
+ +
export
and readonly
builtin commands display their
+output in the format required by POSIX.
++ +
trap
builtin displays signal names without the leading
+SIG
.
++ +
trap
builtin doesn't check the first argument for a possible
+signal specification and revert the signal handling to the original
+disposition if it is, unless that argument consists solely of digits and
+is a valid signal number. If users want to reset the handler for a given
+signal to the original disposition, they should use `-' as the
+first argument.
++ +
.
and source
builtins do not search the current directory
+for the filename argument if it is not found by searching PATH
.
++ +
+ +
+ +
alias
builtin displays alias definitions, it does not
+display them with a leading `alias ' unless the `-p' option
+is supplied.
++ +
set
builtin is invoked without options, it does not display
+shell function names and definitions.
++ +
set
builtin is invoked without options, it displays
+variable values without quotes, unless they contain shell metacharacters,
+even if the result contains nonprinting characters.
++ +
cd
builtin is invoked in logical mode, and the pathname
+constructed from $PWD
and the directory name supplied as an argument
+does not refer to an existing directory, cd
will fail instead of
+falling back to physical mode.
++ +
pwd
builtin is supplied the `-P' option, it resets
+$PWD
to a pathname containing no symlinks.
++ +
pwd
builtin verifies that the value it prints is the same as the
+current directory, even if it is not asked to check the file system with the
+`-P' option.
++ +
fc
builtin does not include an
+indication of whether or not a history entry has been modified.
++ +
fc
is ed
.
++ +
type
and command
builtins will not report a non-executable
+file as having been found, though the shell will attempt to execute such a
+file if it is the only so-named file found in $PATH
.
++ +
vi
editing mode will invoke the vi
editor directly when
+the `v' command is run, instead of checking $VISUAL
and
+$EDITOR
.
++ +
xpg_echo
option is enabled, Bash does not attempt to interpret
+any arguments to echo
as options. Each argument is displayed, after
+escape characters are converted.
++ +
ulimit
builtin uses a block size of 512 bytes for the `-c'
+and `-f' options.
++ +
SIGCHLD
when a trap is set on SIGCHLD
does
+not interrupt the wait
builtin and cause it to return immediately.
+The trap command is run once for each child that exits.
++ +
+ +There is other POSIX behavior that Bash does not implement by +default even when in POSIX mode. +Specifically: +
+ +
fc
builtin checks $EDITOR
as a program to edit history
+entries if FCEDIT
is unset, rather than defaulting directly to
+ed
. fc
uses ed
if EDITOR
is unset.
++ +
xpg_echo
option to be enabled for
+the echo
builtin to be fully conformant.
++ +
+
+Bash can be configured to be POSIX-conformant by default, by specifying
+the `--enable-strict-posix-default' to configure
when building
+(see section 10.8 Optional Features).
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +This chapter discusses what job control is, how it works, and how +Bash allows you to access its facilities. +
+ +
++
+ 7.1 Job Control Basics How job control works. + 7.2 Job Control Builtins Bash builtin commands used to interact + with job control. + 7.3 Job Control Variables Variables Bash uses to customize job + control.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 operating system kernel'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, it prints a line that looks
+like:
+
[1] 25647 + |
+
+To facilitate the implementation of the user interface to job
+control, the operating 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, if
+the user so specifies with stty tostop
, write to the terminal.
+Background processes which attempt to
+read from (write to when stty tostop
is in effect) the
+terminal are sent a SIGTTIN
(SIGTTOU
)
+signal by the kernel's terminal driver,
+which, unless caught, suspends the process.
+
+
+If the operating system on which Bash is running supports
+job control, Bash contains facilities to use it. Typing the
+suspend character (typically `^Z', Control-Z) while a
+process is running causes that process to be stopped and returns
+control 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. The user then manipulates 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 specification (jobspec). +
+
+Job number n
may be referred to as `%n'.
+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
+or started in the background.
+A single `%' (with no accompanying job specification) also refers
+to the current job.
+The previous job may be referenced using `%-'.
+If there is only a single job, `%+' and `%-' can both be used
+to refer to that job.
+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 `-'.
+
+
+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.
+
+ +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 `-b' option to the set
builtin is enabled,
+Bash reports such changes immediately (see section 4.3.1 The Set Builtin).
+Any trap on SIGCHLD
is executed for each child process
+that exits.
+
+
+If an attempt to exit Bash is made while jobs are stopped, (or running, if
+the checkjobs
option is enabled -- see 4.3.2 The Shopt Builtin), the
+shell prints a warning message, and if the checkjobs
option is
+enabled, lists the jobs and their statuses.
+The jobs
command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+Bash does not print another warning, and any stopped jobs are terminated.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
bg
+bg [jobspec ...] + |
+ +
fg
+fg [jobspec] + |
+ +
jobs
+jobs [-lnprs] [jobspec] +jobs -x command [arguments] + |
+ +The first form lists the active jobs. The options have the +following meanings: +
+ +
-l
++ +
-n
++ +
-p
++ +
-r
++ +
-s
++ +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 or pid +kill -l [exit_status] + |
SIGINT
(with or without the SIG
prefix)
+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.
+If any arguments are supplied when `-l' is given, the names of the
+signals corresponding to the arguments are listed, and the return status
+is zero.
+exit_status is a number specifying a signal number or the exit
+status of a process terminated by a signal.
+The return status is zero if at least one signal was successfully sent,
+or non-zero if an error occurs or an invalid option is encountered.
++ +
wait
+wait [jobspec or pid ...] + |
+ +
disown
+disown [-ar] [-h] [jobspec ...] + |
SIGHUP
is not sent to the job if the shell
+receives a SIGHUP
.
+If jobspec is not present, and neither the `-a' nor `-r'
+option is supplied, the current job is used.
+If no jobspec is supplied, the `-a' option means to remove or
+mark all jobs; the `-r' option without a jobspec
+argument restricts operation to running jobs.
++ +
suspend
+suspend [-f] + |
SIGCONT
signal.
+A login shell cannot be suspended; the `-f'
+option can be used to override this and force the suspension.
++ +
+
+When job control is not active, the kill
and wait
+builtins do not accept jobspec arguments. They must be
+supplied process IDs.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
auto_resume
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+This chapter describes the basic features of the GNU
+command line editing interface.
+Command line editing is provided by the Readline library, which is
+used by several different programs, including Bash.
+Command line editing is enabled by default when using an interactive shell,
+unless the `--noediting' option is supplied at shell invocation.
+Line editing is also used when using the `-e' option to the
+read
builtin command (see section 4.2 Bash Builtin Commands).
+By default, the line editing commands are similar to those of emacs.
+A vi-style line editing interface is also available.
+Line editing can be enabled at any time using the `-o emacs' or
+`-o vi' options to the set
builtin command
+(see section 4.3.1 The Set Builtin), or disabled using the `+o emacs' or
+`+o vi' options to set
.
+
+ +
++
+ 8.1 Introduction to Line Editing Notation used in this text. + 8.2 Readline Interaction The minimum set of commands for editing a line. + 8.3 Readline Init File Customizing Readline from a user's view. + 8.4 Bindable Readline Commands A description of most of the Readline commands + available for binding + 8.5 Readline vi Mode A short description of how to make Readline + behave like the vi editor. + 8.6 Programmable Completion How to specify the possible completions for + a specific command. + 8.7 Programmable Completion Builtins Builtin commands to specify how to + complete arguments for a particular command.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +The Meta key is labeled ALT on many keyboards. +On keyboards with two keys labeled ALT (usually to either side of +the space bar), the ALT on the left side is generally set to +work as a Meta key. +The ALT key on the right may also be configured to work as a +Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. +
+ +If you do not have a Meta or ALT key, or another key working as +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 +(see section 8.3 Readline Init File). +If your keyboard lacks a LFD key, typing C-j will +produce the desired character. +The RET key may be labeled Return or Enter on +some keyboards. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 RET. You do not have to be at the +end of the line to press RET; the entire line is accepted +regardless of the location of the cursor within the line. +
+ +
++
+ 8.2.1 Readline Bare Essentials The least you need to know about Readline. + 8.2.2 Readline Movement Commands Moving about the input line. + 8.2.3 Readline Killing Commands How to delete text, and how to get it back! + 8.2.4 Readline Arguments Giving numeric arguments to commands. + 8.2.5 Searching for Commands in the History Searching through previous lines.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 mistype a character, and +not notice the 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 bare +essentials for editing the text of an input line follows. +
+ +
+ +(Depending on your configuration, the Backspace key be set to +delete the character to the left of the cursor and the DEL key set +to delete the character underneath the cursor, like C-d, rather +than the character to the left of the cursor.) +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +The above table describes the most basic 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. +
+ +
+ +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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) +
+ +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. +
+ +
+ +
+ +
+ +
+ +
+ +Here is how to yank the text back into the line. Yanking +means to copy the most-recently-killed text from the kill buffer. +
+ +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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' typed 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', +which will delete the next ten characters on the input line. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Readline provides commands for searching through the command history +(see section 9.1 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.
+To search backward in the history for a particular string, type
+C-r. Typing C-s searches forward through the history.
+The characters present in the value of the isearch-terminators
variable
+are used to terminate an incremental search.
+If that variable has not been assigned a value, the ESC and
+C-J characters will terminate an incremental search.
+C-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 C-r or +C-s 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 RET will terminate the search and accept +the line, thereby executing the command from the history list. +A movement command will terminate the search, make the last line found +the current line, and begin editing. +
+ +Readline remembers the last incremental search string. If two +C-rs are typed without any intervening characters defining a new +search string, any remembered search string is used. +
+ +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 be part of the contents of the current line. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Although the Readline library comes with a set of Emacs-like
+keybindings installed by default, it is possible to use a different set
+of keybindings.
+Any user can customize programs that use Readline by putting
+commands in an inputrc file, conventionally in his 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'. If that
+file does not exist or cannot be read, the ultimate default is
+`/etc/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.
+
+ +
++
+ ++ 8.3.1 Readline Init File Syntax Syntax for the commands in the inputrc file.
++
+ ++ 8.3.2 Conditional Init Constructs Conditional key bindings in the inputrc file.
++
+ 8.3.3 Sample Init File An example inputrc file.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 (see section 8.3.2 Conditional Init Constructs). Other lines +denote variable settings and key bindings. +
+ +
set
command within the init file.
+The syntax is simple:
++ +
set variable value + |
+
+Here, for example, is how to
+change from the default Emacs-like key binding to use
+vi
line editing commands:
+
+ +
set editing-mode vi + |
+ +Variable names and values, where appropriate, are recognized without regard +to case. Unrecognized variable names are ignored. +
+ +Boolean variables (those that can be set to on or off) are set to on if +the value is null or empty, on (case-insensitive), or 1. Any other +value results in the variable being set to off. +
+
+The bind -V
command lists the current Readline variable names
+and values. See section 4.2 Bash Builtin Commands.
+
+ +A great deal of run-time behavior is changeable with the following +variables. +
bell-style
++ +
bind-tty-special-chars
++ +
comment-begin
+insert-comment
command is executed. The default value
+is "#"
.
++ +
completion-ignore-case
++ +
completion-prefix-display-length
++ +
completion-query-items
+100
.
++ +
convert-meta
++ +
disable-completion
+self-insert
. The default is `off'.
++ +
editing-mode
+editing-mode
variable controls which default set of
+key bindings is used. 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'.
++ +
echo-control-characters
++ +
enable-keypad
++ +
enable-meta-key
++ +
expand-tilde
++ +
history-preserve-point
+previous-history
+or next-history
. The default is `off'.
++ +
history-size
++ +
horizontal-scroll-mode
++ +
input-meta
+meta-flag
is a
+synonym for this variable.
++ +
isearch-terminators
++ +
keymap
+keymap
names are
+emacs
,
+emacs-standard
,
+emacs-meta
,
+emacs-ctlx
,
+vi
,
+vi-move
,
+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
++ +
mark-modified-lines
++ +
mark-symlinked-directories
+mark-directories
).
+The default is `off'.
++ +
match-hidden-files
++ +
output-meta
++ +
page-completions
+more
-like pager
+to display a screenful of possible completions at a time.
+This variable is `on' by default.
++ +
print-completions-horizontally
++ +
revert-all-at-newline
+accept-line
is executed. By default,
+history lines may be modified and retain individual undo lists across
+calls to readline
. The default is `off'.
++ +
show-all-if-ambiguous
++ +
show-all-if-unmodified
++ +
skip-completed-text
++ +
visible-stats
++ +
+ +
+ +Once you know the name of the command, simply place on a line +in the init file the name of the key +you wish to bind the command to, a colon, and then the name of the +command. +There can be no space between the key name and the colon -- that will be +interpreted as part of the key name. +The name of the key can be expressed in different ways, depending on +what you find most comfortable. +
+ +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a macro). +
+
+The bind -p
command displays Readline function names and
+bindings in a format that can put directly into an initialization file.
+See section 4.2 Bash Builtin Commands.
+
+ +
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
,
+M-DEL is bound to the function backward-kill-word
, 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).
+
+ +A number of symbolic character names are recognized while +processing this key binding syntax: +DEL, +ESC, +ESCAPE, +LFD, +NEWLINE, +RET, +RETURN, +RUBOUT, +SPACE, +SPC, +and +TAB. +
+ +
+ +
"\C-u": universal-argument +"\C-x\C-r": re-read-init-file +"\e[11~": "Function Key 1" + |
+
+In the above example, C-u is again 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 GNU Emacs style escape sequences are available when +specifying key sequences: +
+ +
\C-
+\M-
+\e
+\\
+\"
+\'
++ +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +
+ +
\a
+\b
+\d
+\f
+\n
+\r
+\t
+\v
+\nnn
+\xHH
++ +When entering the text of a macro, single or double quotes must +be used to indicate a macro definition. +Unquoted text is assumed to be a function name. +In the macro body, the backslash escapes described above are expanded. +Backslash will quote any other character in the macro text, +including `"' and `''. +For example, the following binding will make `C-x \' +insert a single `\' into the line: +
"\C-x\\": "\\" + |
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 four parser directives used. +
+ +
$if
+$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
+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
+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 both 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
+$if Bash +# Quote the current or previous word +"\C-xq": "\eb\"\ef\"" +$endif + |
+ +
$endif
+$if
command.
++ +
$else
+$if
directive are executed if
+the test fails.
++ +
$include
+$include /etc/inputrc + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +# +# First, include any systemwide bindings and variable +# assignments from /etc/Inputrc +$include /etc/Inputrc + +# +# 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 + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ 8.4.1 Commands For Moving Moving about the line. + 8.4.2 Commands For Manipulating The History Getting at previous lines. + 8.4.3 Commands For Changing Text Commands for changing text. + 8.4.4 Killing And Yanking Commands for killing and yanking. + 8.4.5 Specifying Numeric Arguments Specifying numeric arguments, repeat counts. + 8.4.6 Letting Readline Type For You Getting Readline to do the typing for you. + 8.4.7 Keyboard Macros Saving and re-executing typed characters + 8.4.8 Some Miscellaneous Commands Other miscellaneous commands.
+
+This section describes Readline commands that may be bound to key
+sequences.
+You can list your key bindings by executing
+bind -P
or, for a more terse format, suitable for an
+inputrc file, bind -p
. (See section 4.2 Bash Builtin Commands.)
+Command names without an accompanying key sequence are unbound by default.
+
+
+In the following descriptions, point refers to the current cursor
+position, and mark refers to a cursor position saved by the
+set-mark
command.
+The text between the point and mark is referred to as the region.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
beginning-of-line (C-a)
+end-of-line (C-e)
+forward-char (C-f)
+backward-char (C-b)
+forward-word (M-f)
+backward-word (M-b)
+shell-forward-word ()
+shell-backward-word ()
+clear-screen (C-l)
+redraw-current-line ()
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
accept-line (Newline or Return)
+HISTCONTROL
and HISTIGNORE
variables.
+If this line is a modified history line, then restore the history line
+to its original state.
+previous-history (C-p)
+next-history (C-n)
+beginning-of-history (M-<)
+end-of-history (M->)
+reverse-search-history (C-r)
+forward-search-history (C-s)
+non-incremental-reverse-search-history (M-p)
+non-incremental-forward-search-history (M-n)
+history-search-forward ()
+history-search-backward ()
+yank-nth-arg (M-C-y)
+yank-last-arg (M-. or M-_)
+yank-nth-arg
.
+Successive calls to yank-last-arg
move back through the history
+list, inserting the last argument of each line in turn.
+The history expansion facilities are used to extract the last argument,
+as if the `!$' history expansion had been specified.
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
delete-char (C-d)
+delete-char
, then
+return EOF.
+backward-delete-char (Rubout)
+forward-backward-delete-char ()
+quoted-insert (C-q or C-v)
+self-insert (a, b, A, 1, !, ...)
+transpose-chars (C-t)
+transpose-words (M-t)
+upcase-word (M-u)
+downcase-word (M-l)
+capitalize-word (M-c)
+overwrite-mode ()
+emacs
mode; vi
mode does overwrite differently.
+Each call to readline()
starts in insert mode.
+
+
+In overwrite mode, characters bound to self-insert
replace
+the text at point rather than pushing the text to the right.
+Characters bound to backward-delete-char
replace the character
+before point with a space.
+
+ +By default, this command is unbound. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
kill-line (C-k)
+backward-kill-line (C-x Rubout)
+unix-line-discard (C-u)
+kill-whole-line ()
+kill-word (M-d)
+forward-word
.
+backward-kill-word (M-DEL)
+backward-word
.
+shell-kill-word ()
+shell-forward-word
.
+backward-kill-word ()
+shell-backward-word
.
+unix-word-rubout (C-w)
+unix-filename-rubout ()
+delete-horizontal-space ()
+kill-region ()
+copy-region-as-kill ()
+copy-backward-word ()
+backward-word
.
+By default, this command is unbound.
+copy-forward-word ()
+forward-word
.
+By default, this command is unbound.
+yank (C-y)
+yank-pop (M-y)
+yank
or yank-pop
.
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
digit-argument (M-0, M-1, ... M--)
+universal-argument ()
+universal-argument
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+By default, this is not bound to a key.
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
complete (TAB)
+possible-completions (M-?)
+insert-completions (M-*)
+possible-completions
.
+menu-complete ()
+complete
, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of menu-complete
steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung
+(subject to the setting of bell-style
)
+and the original text is restored.
+An argument of n moves n positions forward in the list
+of matches; a negative argument may be used to move backward
+through the list.
+This command is intended to be bound to TAB, but is unbound
+by default.
+menu-complete-backward ()
+menu-complete
, but moves backward through the list
+of possible completions, as if menu-complete
had been given a
+negative argument.
+delete-char-or-list ()
+delete-char
).
+If at the end of the line, behaves identically to
+possible-completions
.
+This command is unbound by default.
+complete-filename (M-/)
+possible-filename-completions (C-x /)
+complete-username (M-~)
+possible-username-completions (C-x ~)
+complete-variable (M-$)
+possible-variable-completions (C-x $)
+complete-hostname (M-@)
+possible-hostname-completions (C-x @)
+complete-command (M-!)
+possible-command-completions (C-x !)
+dynamic-complete-history (M-TAB)
+dabbrev-expand ()
+complete-into-braces (M-{)
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
start-kbd-macro (C-x ()
+end-kbd-macro (C-x ))
+call-last-kbd-macro (C-x e)
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
re-read-init-file (C-x C-r)
+abort (C-g)
+bell-style
).
+do-uppercase-version (M-a, M-b, M-x, ...)
+prefix-meta (ESC)
+undo (C-_ or C-x C-u)
+revert-line (M-r)
+undo
+command enough times to get back to the beginning.
+tilde-expand (M-&)
+set-mark (C-@)
+exchange-point-and-mark (C-x C-x)
+character-search (C-])
+character-search-backward (M-C-])
+skip-csi-sequence ()
+insert-comment (M-#)
+comment-begin
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle: if
+the characters at the beginning of the line do not match the value
+of comment-begin
, the value is inserted, otherwise
+the characters in comment-begin
are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+The default value of comment-begin
causes this command
+to make the current line a shell comment.
+If a numeric argument causes the comment character to be removed, the line
+will be executed by the shell.
+dump-functions ()
+dump-variables ()
+dump-macros ()
+glob-complete-word (M-g)
+glob-expand-word (C-x *)
+glob-list-expansions (C-x g)
+glob-expand-word
is displayed, and the line is redrawn.
+If a numeric argument is supplied, a `*' is appended before
+pathname expansion.
+display-shell-version (C-x C-v)
+shell-expand-line (M-C-e)
+history-expand-line (M-^)
+magic-space ()
+alias-expand-line ()
+history-and-alias-expand-line ()
+insert-last-argument (M-. or M-_)
+yank-last-arg
.
+operate-and-get-next (C-o)
+edit-and-execute-command (C-xC-e)
+$VISUAL
, $EDITOR
, and emacs
+as the editor, in that order.
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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 (see section 4.3.1 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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+When word completion is attempted for an argument to a command for
+which a completion specification (a compspec) has been defined
+using the complete
builtin (see section 8.7 Programmable Completion Builtins),
+the programmable completion facilities are invoked.
+
+
+First, the command name is identified.
+If a compspec has been defined for that command, the
+compspec is used to generate the list of possible completions for the word.
+If the command word is the empty string (completion attempted at the
+beginning of an empty line), any compspec defined with
+the `-E' option to complete
is used.
+If the command word is a full pathname, a compspec for the full
+pathname is searched for first.
+If no compspec is found for the full pathname, an attempt is made to
+find a compspec for the portion following the final slash.
+If those searches do not result in a compspec, any compspec defined with
+the `-D' option to complete
is used as the default.
+
+ +Once a compspec has been found, it is used to generate the list of +matching words. +If a compspec is not found, the default Bash completion +described above (see section 8.4.6 Letting Readline Type For You) is performed. +
+
+First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the `-f' or `-d' option is used for filename or
+directory name completion, the shell variable FIGNORE
is
+used to filter the matches.
+See section 5.2 Bash Variables, for a description of FIGNORE
.
+
+
+Any completions specified by a filename expansion pattern to the
+`-G' option are generated next.
+The words generated by the pattern need not match the word being completed.
+The GLOBIGNORE
shell variable is not used to filter the matches,
+but the FIGNORE
shell variable is used.
+
+
+Next, the string specified as the argument to the `-W' option
+is considered.
+The string is first split using the characters in the IFS
+special variable as delimiters.
+Shell quoting is honored.
+Each word is then expanded using
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, and arithmetic expansion,
+as described above (see section 3.5 Shell Expansions).
+The results are split using the rules described above
+(see section 3.5.7 Word Splitting).
+The results of the expansion are prefix-matched against the word being
+completed, and the matching words become the possible completions.
+
+
+After these matches have been generated, any shell function or command
+specified with the `-F' and `-C' options is invoked.
+When the command or function is invoked, the COMP_LINE
,
+COMP_POINT
, COMP_KEY
, and COMP_TYPE
variables are
+assigned values as described above (see section 5.2 Bash Variables).
+If a shell function is being invoked, the COMP_WORDS
and
+COMP_CWORD
variables are also set.
+When the function or command is invoked, the first argument is the
+name of the command whose arguments are being completed, the
+second argument is the word being completed, and the third argument
+is the word preceding the word being completed on the current command line.
+No filtering of the generated completions against the word being completed
+is performed; the function or command has complete freedom in generating
+the matches.
+
+
+Any function specified with `-F' is invoked first.
+The function may use any of the shell facilities, including the
+compgen
and compopt
builtins described below
+(see section 8.7 Programmable Completion Builtins), to generate the matches.
+It must put the possible completions in the COMPREPLY
array
+variable.
+
+ +Next, any command specified with the `-C' option is invoked +in an environment equivalent to command substitution. +It should print a list of completions, one per line, to +the standard output. +Backslash may be used to escape a newline, if necessary. +
+ +After all of the possible completions are generated, any filter +specified with the `-X' option is applied to the list. +The filter is a pattern as used for pathname expansion; a `&' +in the pattern is replaced with the text of the word being completed. +A literal `&' may be escaped with a backslash; the backslash +is removed before attempting a match. +Any completion that matches the pattern will be removed from the list. +A leading `!' negates the pattern; in this case any completion +not matching the pattern will be removed. +
+ +Finally, any prefix and suffix specified with the `-P' and `-S' +options are added to each member of the completion list, and the result is +returned to the Readline completion code as the list of possible +completions. +
+
+If the previously-applied actions do not generate any matches, and the
+`-o dirnames' option was supplied to complete
when the
+compspec was defined, directory name completion is attempted.
+
+
+If the `-o plusdirs' option was supplied to complete
when
+the compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+
+
+By default, if a compspec is found, whatever it generates is returned to
+the completion code as the full set of possible completions.
+The default Bash completions are not attempted, and the Readline default
+of filename completion is disabled.
+If the `-o bashdefault' option was supplied to complete
when
+the compspec was defined, the default Bash completions are attempted
+if the compspec generates no matches.
+If the `-o default' option was supplied to complete
when the
+compspec was defined, Readline's default completion will be performed
+if the compspec (and, if attempted, the default Bash completions)
+generate no matches.
+
+ +When a compspec indicates that directory name completion is desired, +the programmable completion functions force Readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the mark-directories Readline variable, regardless +of the setting of the mark-symlinked-directories Readline variable. +
+ +There is some support for dynamically modifying completions. This is +most useful when used in combination with a default completion specified +with `-D'. It's possible for shell functions executed as completion +handlers to indicate that completion should be retried by returning an +exit status of 124. If a shell function returns 124, and changes +the compspec associated with the command on which completion is being +attempted (supplied as the first argument when the function is executed), +programmable completion restarts from the beginning, with an +attempt to find a compspec for that command. This allows a set of +completions to be built dynamically as completion is attempted, rather than +being loaded all at once. +
+ +For instance, assuming that there is a library of compspecs, each kept in a +file corresponding to the name of the command, the following default +completion function would load completions dynamically: +
+ +
_completion_loader() +{ + . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 +} +complete -D -F _completion_loader + |
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Two builtin commands are available to manipulate the programmable completion +facilities. +
+ +
compgen
+
|
+
+Generate possible completion matches for word according to
+the options, which may be any option accepted by the
+complete
+builtin with the exception of `-p' and `-r', and write
+the matches to the standard output.
+When using the `-F' or `-C' options, the various shell variables
+set by the programmable completion facilities, while available, will not
+have useful values.
+
+ +The matches will be generated in the same way as if the programmable +completion code had generated them directly from a completion specification +with the same flags. +If word is specified, only those completions matching word +will be displayed. +
+ +The return value is true unless an invalid option is supplied, or no +matches were generated. +
+ +
complete
+
|
+ +Specify how arguments to each name should be completed. +If the `-p' option is supplied, or if no options are supplied, existing +completion specifications are printed in a way that allows them to be +reused as input. +The `-r' option removes a completion specification for +each name, or, if no names are supplied, all +completion specifications. +The `-D' option indicates that the remaining options and actions should +apply to the "default" command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The `-E' option indicates that the remaining options and actions should +apply to "empty" command completion; that is, completion attempted on a +blank line. +
+ +The process of applying these completion specifications when word completion +is attempted is described above (see section 8.6 Programmable Completion). The +`-D' option takes precedence over `-E'. +
+
+Other options, if specified, have the following meanings.
+The arguments to the `-G', `-W', and `-X' options
+(and, if necessary, the `-P' and `-S' options)
+should be quoted to protect them from expansion before the
+complete
builtin is invoked.
+
+ +
-o comp-option
++ +
bashdefault
++ +
default
++ +
dirnames
++ +
filenames
++ +
nospace
++ +
plusdirs
++ +
+ +
-A action
++ +
alias
++ +
arrayvar
++ +
binding
++ +
builtin
++ +
command
++ +
directory
++ +
disabled
++ +
enabled
++ +
export
++ +
file
++ +
function
++ +
group
++ +
helptopic
+help
builtin (see section 4.2 Bash Builtin Commands).
++ +
hostname
+HOSTFILE
shell variable (see section 5.2 Bash Variables).
++ +
job
++ +
keyword
++ +
running
++ +
service
++ +
setopt
+set
builtin
+(see section 4.3.1 The Set Builtin).
++ +
shopt
+shopt
builtin
+(see section 4.2 Bash Builtin Commands).
++ +
signal
++ +
stopped
++ +
user
++ +
variable
++ +
-G globpat
++ +
-W wordlist
+IFS
special variable as delimiters, and each resultant word
+is expanded.
+The possible completions are the members of the resultant list which
+match the word being completed.
++ +
-C command
++ +
-F function
+COMPREPLY
array variable.
++ +
-X filterpat
++ +
-P prefix
++ +
-S suffix
++ +The return value is true unless an invalid option is supplied, an option +other than `-p' or `-r' is supplied without a name +argument, an attempt is made to remove a completion specification for +a name for which no specification exists, or +an error occurs adding a completion specification. +
+ +
compopt
+
|
complete
+builtin described above.
+The `-D' option indicates that the remaining options should
+apply to the "default" command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The `-E' option indicates that the remaining options should
+apply to "empty" command completion; that is, completion attempted on a
+blank line.
++ +The `-D' option takes precedence over `-E'. +
+ +The return value is true unless an invalid option is supplied, an attempt +is made to modify the options for a name for which no completion +specification exists, or an output error occurs. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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 other programs, +see the GNU Readline Library Manual. +
+ +
++
+ 9.1 Bash History Facilities How Bash lets you manipulate your command + history. + 9.2 Bash History Builtins The Bash builtin commands that manipulate + the command history. + 9.3 History Expansion What it feels like using History as a user.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+When the `-o history' option to the set
builtin
+is enabled (see section 4.3.1 The Set Builtin),
+the shell provides access to the command history,
+the list of commands previously typed.
+The value of the HISTSIZE
shell variable is used as the
+number of commands to save in a history list.
+The text of the last $HISTSIZE
+commands (default 500) is saved.
+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').
+The file named by the value of 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 the file
+named by $HISTFILE
.
+If the histappend
shell option is set (see section 4.2 Bash Builtin Commands),
+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.
+
+
+If the HISTTIMEFORMAT
is set, the time stamp information
+associated with each history entry is written to the history file,
+marked with the history comment character.
+When the history file is read, lines beginning with the history
+comment character followed immediately by a digit are interpreted
+as timestamps for the previous history line.
+
+
+The builtin command fc
may be used to list or edit and re-execute
+a portion of the history list.
+The history
builtin may be used to display or modify the history
+list and manipulate the history file.
+When using command-line editing, search commands
+are available in each editing mode that provide access to the
+history list (see section 8.4.2 Commands For Manipulating The History).
+
+
+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.
+The shopt
builtin is used to set these options.
+See section 4.2 Bash Builtin Commands, for a description of shopt
.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Bash provides two builtin commands which manipulate the +history list and history file. +
+ +
fc
+
|
+
+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 (see section 6.6 Aliases).
+
+ +
history
+history [n] +history -c +history -d offset +history [-anrw] [filename] +history -ps arg + |
+
+With no options, display the history list with line numbers.
+Lines prefixed with a `*' have been modified.
+An argument of n lists only the last n lines.
+If the shell variable HISTTIMEFORMAT
is set and not null,
+it is used as a format string for strftime to display
+the time stamp associated with each displayed history entry.
+No intervening blank is printed between the formatted time stamp
+and the history line.
+
+ +Options, if supplied, have the following meanings: +
+ +
-c
++ +
-d offset
++ +
-a
++ +
-n
++ +
-r
++ +
-w
++ +
-p
++ +
-s
++ +
+
+When any of the `-w', `-r', `-a', or `-n' options 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.
+
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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 history list 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 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 words +surrounded by quotes are considered 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 (see section 4.2 Bash Builtin Commands) 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.
+This is most useful in conjunction with Readline.
+
+
+The shell allows control of the various characters used by the
+history expansion mechanism with the histchars
variable,
+as explained above (see section 5.2 Bash Variables). The shell uses
+the history comment character to mark history timestamps when
+writing the history file.
+
+ +
++
+ 9.3.1 Event Designators How to specify which history line to use. + 9.3.2 Word Designators Specifying which words are of interest. + 9.3.3 Modifiers Modifying the results of substitution.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +An event designator is a reference to a command line entry in the +history list. + +
+ +
!
+extglob
shell option is enabled using the shopt
builtin).
++ +
!n
++ +
!-n
++ +
!!
++ +
!string
++ +
!?string[?]
++ +
^string1^string2^
+!!:s/string1/string2/
.
++ +
!#
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Word designators are used to select desired words from the event. +A `:' separates the event specification from the word designator. It +may 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. +
+ +For example, +
+ +
!!
++ +
!!:$
+!$
.
++ +
!fi:2
+fi
.
++ +Here are the word designators: + +
0 (zero)
+0
th word. For many applications, this is the command word.
++ +
n
++ +
^
++ +
$
++ +
%
++ +
x-y
++ +
*
+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*
++ +
x-
++ +
+ +If a word designator is supplied without an event specification, the +previous command is used as the event. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +After the optional word designator, you can add a sequence of one or more +of the following modifiers, each preceded by a `:'. +
+ +
h
++ +
t
++ +
r
++ +
e
++ +
p
++ +
q
++ +
x
++ +
s/old/new/
++ +
&
++ +
g
+a
+gs/old/new/
,
+or with `&'.
++ +
G
++ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +This chapter provides basic instructions for installing Bash on +the various supported platforms. The distribution supports the +GNU operating systems, nearly every version of Unix, and several +non-Unix systems such as BeOS and Interix. +Other independent ports exist for +MS-DOS, OS/2, and Windows platforms. +
+ +
++
+ 10.1 Basic Installation Installation instructions. + 10.2 Compilers and Options How to set special options for various + systems. + 10.3 Compiling For Multiple Architectures How to compile Bash for more + than one kind of system from + the same source tree. + 10.4 Installation Names How to set the various paths used by the installation. + 10.5 Specifying the System Type How to configure Bash for a particular system. + 10.6 Sharing Defaults How to share default configuration values among GNU + programs. + 10.7 Operation Controls Options recognized by the configuration program. + 10.8 Optional Features How to enable and disable optional features when + building Bash.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +These are installation instructions for Bash. +
+ +The simplest way to compile Bash is: +
+ +
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 some time.
+While running, it prints messages telling which features it is
+checking for.
+
+ +
bashbug
bug
+reporting script.
++ +
+ +
bash
and bashbug
.
+This will also install the manual pages and Info file.
++ +
+
+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', `doc', and `support' directories,
+each directory under `lib', and several others). 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.
+
+
+To find out more about the options and arguments that the
+configure
script understands, type
+
+ +
bash-2.04$ ./configure --help + |
+ +at the Bash prompt in your Bash source directory. +
+
+If you need to do unusual things to compile Bash, please
+try to figure out how configure
could check whether or not
+to do them, and mail diffs or instructions to
+bash-maintainers@gnu.org 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.50 or
+newer.
+
+
+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'.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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',
+or by specifying a value for the DESTDIR
`make'
+variable when running `make install'.
+
+
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.
+If you give configure
the option
+`--exec-prefix=PATH', `make install' will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+There may be some features configure
can not figure out
+automatically, but need to determine by the type of host Bash
+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., `i386-unknown-freebsd4.2').
+
+ +See the file `support/config.sub' for the possible +values of each field. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+configure
recognizes the following options to control how it
+operates.
+
+ +
--cache-file=file
+configure
.
++ +
--help
+configure
, and exit.
++ +
--quiet
+--silent
+-q
++ +
--srcdir=dir
+configure
can determine that directory automatically.
++ +
--version
+configure
+script, and exit.
+
+
+configure
also accepts some other, not widely used, boilerplate
+options. `configure --help' prints the complete list.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+The Bash configure
has a number of `--enable-feature'
+options, where feature indicates an optional part of Bash.
+There are also several `--with-package' options,
+where package is something like `bash-malloc' or `purify'.
+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-afs
++ +
--with-bash-malloc
+malloc
in the directory `lib/malloc'. This is not the same
+malloc
that appears in GNU libc, but an older version
+originally derived from the 4.2 BSD malloc
. This malloc
+is very fast, but wastes some space on each allocation.
+This option is enabled by default.
+The `NOTES' file contains a list of systems for
+which this should be turned off, and configure
disables this
+option automatically for a number of systems.
++ +
--with-curses
++ +
--with-gnu-malloc
+--with-bash-malloc
.
++ +
--with-installed-readline[=PREFIX]
+yes
or not
+supplied, configure
uses the values of the make variables
+includedir
and libdir
, which are subdirectories of prefix
+by default, to find the installed version of Readline if it is not in
+the standard system include and library directories.
+If PREFIX is no
, Bash links with the version in
+`lib/readline'.
+If PREFIX is set to any other value, configure
treats it as
+a directory pathname and looks for
+the installed version of Readline in subdirectories of that directory
+(include files in PREFIX/include
and the library in
+PREFIX/lib
).
++ +
--with-purify
++ +
--enable-minimal-config
++ +There are several `--enable-' options that alter how Bash is +compiled and linked, rather than changing run-time features. +
+ +
--enable-largefile
++ +
--enable-profiling
+gprof
each time it is executed.
++ +
--enable-static-link
+gcc
is being used.
+This could be used to build a version to use as root's 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 +`xpg-echo-default' are +enabled by default, unless the operating system does not provide the +necessary support. +
+ +
--enable-alias
+alias
and unalias
+builtins (see section 6.6 Aliases).
++ +
--enable-arith-for-command
+for
command
+that behaves like the C language for
statement
+(see section 3.2.4.1 Looping Constructs).
++ +
--enable-array-variables
++ +
--enable-bang-history
+csh
-like history substitution
+(see section 9.3 History Expansion).
++ +
--enable-brace-expansion
+csh
-like brace expansion
+( b{a,b}c
==> bac bbc
).
+See 3.5.1 Brace Expansion, for a complete description.
++ +
--enable-casemod-attributes
+declare
builtin
+and assignment statements. Variables with the uppercase attribute,
+for example, will have their values converted to uppercase upon assignment.
++ +
--enable-casemod-expansion
++ +
--enable-command-timing
+time
as a reserved word and for
+displaying timing statistics for the pipeline following time
+(see section 3.2.2 Pipelines).
+This allows pipelines as well as shell builtins and functions to be timed.
++ +
--enable-cond-command
+[[
conditional command.
+(see section 3.2.4.2 Conditional Constructs).
++ +
--enable-cond-regexp
+[[
conditional command.
+(see section 3.2.4.2 Conditional Constructs).
++ +
--enable-coprocesses
+coproc
reserved word
+(see section 3.2.2 Pipelines).
++ +
--enable-debugger
++ +
--enable-directory-stack
+csh
-like directory stack and the
+pushd
, popd
, and dirs
builtins
+(see section 6.8 The Directory Stack).
++ +
--enable-disabled-builtins
+xxx
has been disabled using `enable -n xxx'.
+See 4.2 Bash Builtin Commands, for details of the builtin
and
+enable
builtin commands.
++ +
--enable-dparen-arithmetic
+((...))
command
+(see section 3.2.4.2 Conditional Constructs).
++ +
--enable-extended-glob
++ +
--enable-extended-glob-default
++ +
--enable-help-builtin
+help
builtin, which displays help on shell builtins and
+variables (see section 4.2 Bash Builtin Commands).
++ +
--enable-history
+fc
and history
+builtin commands (see section 9.1 Bash History Facilities).
++ +
--enable-job-control
++ +
--enable-multibyte
++ +
--enable-net-redirections
+/dev/tcp/host/port
and
+/dev/udp/host/port
+when used in redirections (see section 3.6 Redirections).
++ +
--enable-process-substitution
++ +
--enable-progcomp
++ +
--enable-prompt-string-decoding
+$PS1
, $PS2
, $PS3
, and $PS4
prompt
+strings. See 6.9 Controlling the Prompt, for a complete list of prompt
+string escape sequences.
++ +
--enable-readline
++ +
--enable-restricted
+rbash
, enters a restricted mode. See
+6.10 The Restricted Shell, for a description of restricted mode.
++ +
--enable-select
+select
builtin, which allows the generation of simple
+menus (see section 3.2.4.2 Conditional Constructs).
++ +
--enable-separate-helpfiles
+help
builtin
+instead of storing the text internally.
++ +
--enable-single-help-strings
+help
builtin as a single string for
+each help topic. This aids in translating the text to different languages.
+You may need to disable this if your compiler cannot handle very long string
+literals.
++ +
--enable-strict-posix-default
++ +
--enable-usg-echo-default
+--enable-xpg-echo-default
.
++ +
--enable-xpg-echo-default
+echo
builtin expand backslash-escaped characters by default,
+without requiring the `-e' option.
+This sets the default value of the xpg_echo
shell option to on
,
+which makes the Bash echo
behave more like the version specified in
+the Single Unix Specification, version 3.
+See section 4.2 Bash Builtin Commands, for a description of the escape sequences that
+echo
recognizes.
++ +
+
+The file `config-top.h' 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.
+
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +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. +The latest version of Bash is always available for FTP from +ftp://ftp.gnu.org/pub/gnu/bash/. +
+
+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 encouraged to mail that as well!
+Suggestions and `philosophical' bug reports may be mailed
+to bug-bash@gnu.org or posted to the Usenet
+newsgroup gnu.bash.bug
.
+
+ +All bug reports should include: +
+
+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.ramey@case.edu. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+
+Bash implements essentially the same grammar, parameter and
+variable expansion, redirection, and quoting as the Bourne Shell.
+Bash uses the POSIX standard as the specification of
+how these features are to be implemented. There are some
+differences between the traditional Bourne shell and Bash; this
+section quickly details the differences of significance. A
+number of these differences are explained in greater depth in
+previous sections.
+This section uses the version of sh
included in SVR4.2 (the
+last version of the historical Bourne shell) as the baseline reference.
+
+ +
sh
behavior (see section 6.11 Bash POSIX Mode).
++ +
+ +
bind
builtin.
++ +
complete
, compgen
, and compopt
, to
+manipulate it.
++ +
history
and fc
builtins to manipulate it.
+The Bash history list maintains timestamp information and uses the
+value of the HISTTIMEFORMAT
variable to display it.
++ +
csh
-like history expansion
+(see section 9.3 History Expansion).
++ +
+ +
$'...'
quoting syntax, which expands ANSI-C
+backslash-escaped characters in the text between the single quotes,
+is supported (see section 3.1.2.4 ANSI-C Quoting).
++ +
$"..."
quoting syntax to do
+locale-specific translation of the characters between the double
+quotes. The `-D', `--dump-strings', and `--dump-po-strings'
+invocation options list the translatable strings found in a script
+(see section 3.1.2.5 Locale-Specific Translation).
++ +
!
keyword to negate the return value of
+a pipeline (see section 3.2.2 Pipelines).
+Very useful when an if
statement needs to act only if a test fails.
+The Bash `-o pipefail' option to set
will cause a pipeline to
+return a failure status if any command fails.
++ +
time
reserved word and command timing (see section 3.2.2 Pipelines).
+The display of the timing statistics may be controlled with the
+TIMEFORMAT
variable.
++ +
for (( expr1 ; expr2 ; expr3 ))
+arithmetic for command, similar to the C language (see section 3.2.4.1 Looping Constructs).
++ +
select
compound command, which allows the
+generation of simple menus (see section 3.2.4.2 Conditional Constructs).
++ +
[[
compound command, which makes conditional
+testing part of the shell grammar (see section 3.2.4.2 Conditional Constructs), including
+optional regular expression matching.
++ +
case
and
+[[
constructs.
++ +
+ +
alias
and unalias
+builtins (see section 6.6 Aliases).
++ +
((
compound command
+(see section 3.2.4.2 Conditional Constructs),
+and arithmetic expansion (see section 6.5 Shell Arithmetic).
++ +
export
+command.
++ +
+ +
+ +
${#xx}
, which returns the length of ${xx}
,
+is supported (see section 3.5.3 Shell Parameter Expansion).
++ +
${var:
offset[:
length]}
,
+which expands to the substring of var
's value of length
+length, beginning at offset, is present
+(see section 3.5.3 Shell Parameter Expansion).
++ +
${var/[/]
pattern[/
replacement]}
,
+which matches pattern and replaces it with replacement in
+the value of var
, is available (see section 3.5.3 Shell Parameter Expansion).
++ +
${!prefix}*
expansion, which expands to
+the names of all shell variables whose names begin with prefix,
+is available (see section 3.5.3 Shell Parameter Expansion).
++ +
${!word}
+(see section 3.5.3 Shell Parameter Expansion).
++ +
$9
using
+${num}
.
++ +
$()
form of command substitution
+is implemented (see section 3.5.4 Command Substitution),
+and preferred to the Bourne shell's "
(which
+is also implemented for backwards compatibility).
++ +
+ +
UID
, EUID
, and GROUPS
), the current host
+(HOSTTYPE
, OSTYPE
, MACHTYPE
, and HOSTNAME
),
+and the instance of Bash that is running (BASH
,
+BASH_VERSION
, and BASH_VERSINFO
). See section 5.2 Bash Variables,
+for details.
++ +
IFS
variable is used to split only the results of expansion,
+not all words (see section 3.5.7 Word Splitting).
+This closes a longstanding shell security hole.
++ +
+ +
extglob
+shell option is enabled (see section 3.5.8.1 Pattern Matching).
++ +
sh
does not separate the two name spaces.
++ +
local
builtin, and thus useful recursive functions may be written
+(see section 4.2 Bash Builtin Commands).
++ +
sh
, all variable assignments
+preceding commands are global unless the command is executed from the
+file system.
++ +
+ +
+ +
+ +
+ +
+ +
+ +
noclobber
option is available to avoid overwriting existing
+files with output redirection (see section 4.3.1 The Set Builtin).
+The `>|' redirection operator may be used to override noclobber
.
++ +
cd
and pwd
builtins (see section 4.1 Bourne Shell Builtins)
+each take `-L' and `-P' options to switch between logical and
+physical modes.
++ +
builtin
and command
builtins (see section 4.2 Bash Builtin Commands).
++ +
command
builtin allows selective disabling of functions
+when command lookup is performed (see section 4.2 Bash Builtin Commands).
++ +
enable
+builtin (see section 4.2 Bash Builtin Commands).
++ +
exec
builtin takes additional options that allow users
+to control the contents of the environment passed to the executed
+command, and what the zeroth argument to the command is to be
+(see section 4.1 Bourne Shell Builtins).
++ +
export -f
(see section 3.3 Shell Functions).
++ +
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.
++ +
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'
+(see section 4.1 Bourne Shell Builtins).
++ +
help
builtin for quick reference to shell
+facilities (see section 4.2 Bash Builtin Commands).
++ +
printf
builtin is available to display formatted output
+(see section 4.2 Bash Builtin Commands).
++ +
read
builtin (see section 4.2 Bash Builtin Commands)
+will read a line ending in `\' with
+the `-r' option, and will use the REPLY
variable as a
+default if no non-option 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.
+The read
builtin also has additional options to control input:
+the `-s' option will turn off echoing of input characters as
+they are read, the `-t' option will allow read
to time out
+if input does not arrive within a specified number of seconds, the
+`-n' option will allow reading only a specified number of
+characters rather than a full line, and the `-d' option will read
+until a particular character rather than newline.
++ +
return
builtin may be used to abort execution of scripts
+executed with the .
or source
builtins
+(see section 4.1 Bourne Shell Builtins).
++ +
shopt
builtin, for finer control of shell
+optional capabilities (see section 4.3.2 The Shopt Builtin), and allows these options
+to be set and unset at shell invocation (see section 6.1 Invoking Bash).
++ +
set
+builtin (see section 4.3.1 The Set Builtin).
++ +
xtrace
) option displays commands other than
+simple commands when performing an execution trace
+(see section 4.3.1 The Set Builtin).
++ +
test
builtin (see section 4.1 Bourne Shell Builtins)
+is slightly different, as it implements the POSIX algorithm,
+which specifies the behavior based on the number of arguments.
++ +
caller
builtin, which displays the context of
+any active subroutine call (a shell function or a script executed with
+the .
or source
builtins). This supports the bash
+debugger.
++ +
trap
builtin (see section 4.1 Bourne Shell Builtins) allows a
+DEBUG
pseudo-signal specification, similar to EXIT
.
+Commands specified with a DEBUG
trap are executed before every
+simple command, for
command, case
command,
+select
command, every arithmetic for
command, and before
+the first command executes in a shell function.
+The DEBUG
trap is not inherited by shell functions unless the
+function has been given the trace
attribute or the
+functrace
option has been enabled using the shopt
builtin.
+The extdebug
shell option has additional effects on the
+DEBUG
trap.
+
+
+The trap
builtin (see section 4.1 Bourne Shell Builtins) allows an
+ERR
pseudo-signal specification, similar to EXIT
and DEBUG
.
+Commands specified with an ERR
trap are executed after a simple
+command fails, with a few exceptions.
+The ERR
trap is not inherited by shell functions unless the
+-o errtrace
option to the set
builtin is enabled.
+
+
+The trap
builtin (see section 4.1 Bourne Shell Builtins) allows a
+RETURN
pseudo-signal specification, similar to
+EXIT
and DEBUG
.
+Commands specified with an RETURN
trap are executed before
+execution resumes after a shell function or a shell script executed with
+.
or source
returns.
+The RETURN
trap is not inherited by shell functions unless the
+function has been given the trace
attribute or the
+functrace
option has been enabled using the shopt
builtin.
+
+ +
type
builtin is more extensive and gives more information
+about the names it finds (see section 4.2 Bash Builtin Commands).
++ +
umask
builtin permits a `-p' option to cause
+the output to be displayed in the form of a umask
command
+that may be reused as input (see section 4.1 Bourne Shell Builtins).
++ +
csh
-like directory stack, and provides the
+pushd
, popd
, and dirs
builtins to manipulate it
+(see section 6.8 The Directory Stack).
+Bash also makes the directory stack visible as the value of the
+DIRSTACK
shell variable.
++ +
+ +
+ +
disown
builtin can remove a job from the internal shell
+job table (see section 7.2 Job Control Builtins) or suppress the sending
+of SIGHUP
to a job when the shell exits as the result of a
+SIGHUP
.
++ +
+ +
mldmode
and priv
) not present in Bash.
++ +
stop
or newgrp
builtins.
++ +
SHACCT
variable or perform shell accounting.
++ +
sh
uses a TIMEOUT
variable like Bash uses
+TMOUT
.
++ +
+ +More features unique to Bash may be found in 6. Bash Features. +
+ +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +Since Bash is a completely new implementation, it does not suffer from +many of the limitations of the SVR4.2 shell. For instance: +
+ +
if
or while
+statement.
++ +
EOF
under certain circumstances.
+This can be the cause of some hard-to-find errors.
++ +
SIGSEGV
. If the shell is started from a process with
+SIGSEGV
blocked (e.g., by using the system()
C library
+function call), it misbehaves badly.
++ +
+ +
SIGSEGV
,
+SIGALRM
, or SIGCHLD
.
++ +
IFS
, MAILCHECK
,
+PATH
, PS1
, or PS2
variables to be unset.
++ +
+ +
-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 `-'.
++ +
+ +
jsh
+(it turns on job control).
+[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
+ +
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +http://fsf.org/ + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + |
+ +
+ +The purpose of this License is to make a manual, textbook, or other +functional and useful document free in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +
+ +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +
+ +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +
+ +
+ +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +
+ +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +
+ +A "Secondary Section" is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +
+ +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +
+ +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +
+ +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". +
+ +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. +
+ +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. +
+ +The "publisher" means any person or entity that distributes copies +of the Document to the public. +
+ +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. +
+ +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +
+ +
+ +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +
+ +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +
+ +
+ +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +
+ +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +
+ +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +
+ +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +
+ +
+ +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. +
+ +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +
+ +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +
+ +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +
+ +
+ +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +
+ +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +
+ +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all +sections Entitled "Endorsements." +
+ +
+ +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +
+ +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +
+ +
+ +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +
+ +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +
+ +
+ +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +
+ +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +
+ +
+ +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +
+ +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +
+ +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +
+ +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +
+ +
+ +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. +
+ +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +
+ +
+ +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the +site means any set of copyrightable works thus published on the MMC +site. +
+ +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +
+ +"Incorporate" means to publish or republish a Document, in whole or +in part, as part of another Document. +
+ +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +
+ +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +
+ +
+ +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +
+ +
Copyright (C) year your name. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + |
+ +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: +
+ +
with the Invariant Sections being list their titles, with + the Front-Cover Texts being list, and with the Back-Cover Texts + being list. + |
+ +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +
+ +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
+ +
++
+ D.1 Index of Shell Builtin Commands Index of Bash builtin commands. + D.2 Index of Shell Reserved Words Index of Bash reserved words. + D.3 Parameter and Variable Index Quick reference helps you find the + variable you want. + D.4 Function Index Index of bindable Readline functions. + D.5 Concept Index General index for concepts described in + this manual.
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
Jump to: | .
+
+:
+
+[
+
+ +A + +B + +C + +D + +E + +F + +G + +H + +J + +K + +L + +M + +P + +R + +S + +T + +U + +W + + |
---|
Jump to: | .
+
+:
+
+[
+
+ +A + +B + +C + +D + +E + +F + +G + +H + +J + +K + +L + +M + +P + +R + +S + +T + +U + +W + + |
---|
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
Jump to: | !
+
+[
+
+]
+
+{
+
+}
+
+ +C + +D + +E + +F + +I + +S + +T + +U + +W + + |
---|
Jump to: | !
+
+[
+
+]
+
+{
+
+}
+
+ +C + +D + +E + +F + +I + +S + +T + +U + +W + + |
---|
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
Jump to: | !
+
+#
+
+$
+
+*
+
+-
+
+0
+
+?
+
+@
+
+_
+
+ +A + +B + +C + +D + +E + +F + +G + +H + +I + +K + +L + +M + +O + +P + +R + +S + +T + +U + +V + + |
---|
Jump to: | !
+
+#
+
+$
+
+*
+
+-
+
+0
+
+?
+
+@
+
+_
+
+ +A + +B + +C + +D + +E + +F + +G + +H + +I + +K + +L + +M + +O + +P + +R + +S + +T + +U + +V + + |
---|
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
Jump to: | A + +B + +C + +D + +E + +F + +G + +H + +I + +K + +M + +N + +O + +P + +Q + +R + +S + +T + +U + +Y + + |
---|
Jump to: | A + +B + +C + +D + +E + +F + +G + +H + +I + +K + +M + +N + +O + +P + +Q + +R + +S + +T + +U + +Y + + |
---|
[ < ] | +[ > ] | +[ << ] | +[ Up ] | +[ >> ] | +[Top] | +[Contents] | +[Index] | +[ ? ] | +
Jump to: | A + +B + +C + +D + +E + +F + +H + +I + +J + +K + +L + +M + +N + +O + +P + +Q + +R + +S + +T + +V + +W + +Y + + |
---|
Jump to: | A + +B + +C + +D + +E + +F + +H + +I + +J + +K + +L + +M + +N + +O + +P + +Q + +R + +S + +T + +V + +W + +Y + + |
---|
+ +
[Top] | +[Contents] | +[Index] | +[ ? ] | +
[Top] | +[Contents] | +[Index] | +[ ? ] | +
+1. Introduction ++
+2. Definitions +
+3. Basic Shell Features +
+4. Shell Builtin Commands +
+5. Shell Variables +
+6. Bash Features +
+7. Job Control +
+8. Command Line Editing +
+9. Using History Interactively +
+10. Installing Bash +
+A. Reporting Bugs +
+B. Major Differences From The Bourne Shell +
+C. GNU Free Documentation License +
+D. Indexes +
+ +
[Top] | +[Contents] | +[Index] | +[ ? ] | +
Button | +Name | +Go to | +From 1.2.3 go to | +
---|---|---|---|
+ [ < ] | ++Back + | ++previous section in reading order + | ++1.2.2 + | +
+ [ > ] | ++Forward + | ++next section in reading order + | ++1.2.4 + | +
+ [ << ] | ++FastBack + | ++previous or up-and-previous section + | ++1.1 + | +
+ [ Up ] | ++Up + | ++up section + | ++1.2 + | +
+ [ >> ] | ++FastForward + | ++next or up-and-next section + | ++1.3 + | +
+ [Top] | ++Top + | ++cover (top) of document + | ++ + | +
+ [Contents] | ++Contents + | ++table of contents + | ++ + | +
+ [Index] | ++Index + | ++concept index + | ++ + | +
+ [ ? ] | ++About + | ++this page + | ++ + | +