1
\input texinfo.tex @c -*- texinfo -*-
3
@setfilename bashref.info
4
@settitle Bash Reference Manual
10
This text is a brief description of the features that are present in
11
the Bash shell (version @value{VERSION}, @value{UPDATED}).
13
This is Edition @value{EDITION}, last updated @value{UPDATED},
14
of @cite{The GNU Bash Reference Manual},
15
for @code{Bash}, Version @value{VERSION}.
17
Copyright @copyright{} 1988--2014 Free Software Foundation, Inc.
20
Permission is granted to copy, distribute and/or modify this document
21
under the terms of the GNU Free Documentation License, Version 1.3 or
22
any later version published by the Free Software Foundation; with no
23
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
24
A copy of the license is included in the section entitled
25
``GNU Free Documentation License''.
35
* Bash: (bash). The GNU Bourne-Again SHell.
41
@title Bash Reference Manual
42
@subtitle Reference Documentation for Bash
43
@subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}.
44
@subtitle @value{UPDATED-MONTH}
45
@author Chet Ramey, Case Western Reserve University
46
@author Brian Fox, Free Software Foundation
49
@vskip 0pt plus 1filll
57
@node Top, Introduction, (dir), (dir)
60
This text is a brief description of the features that are present in
61
the Bash shell (version @value{VERSION}, @value{UPDATED}).
62
The Bash home page is @url{http://www.gnu.org/software/bash/}.
64
This is Edition @value{EDITION}, last updated @value{UPDATED},
65
of @cite{The GNU Bash Reference Manual},
66
for @code{Bash}, Version @value{VERSION}.
68
Bash contains features that appear in other popular shells, and some
69
features that only appear in Bash. Some of the shells that Bash has
70
borrowed concepts from are the Bourne Shell (@file{sh}), the Korn Shell
71
(@file{ksh}), and the C-shell (@file{csh} and its successor,
72
@file{tcsh}). The following menu breaks the features up into
73
categories, noting which features were inspired by other shells and
74
which are specific to Bash.
76
This manual is meant as a brief introduction to features found in
77
Bash. The Bash manual page should be used as the definitive
78
reference on shell behavior.
81
* Introduction:: An introduction to the shell.
82
* Definitions:: Some definitions used in the rest of this
84
* Basic Shell Features:: The shell "building blocks".
85
* Shell Builtin Commands:: Commands that are a part of the shell.
86
* Shell Variables:: Variables used or set by Bash.
87
* Bash Features:: Features found only in Bash.
88
* Job Control:: What job control is and how Bash allows you
90
* Command Line Editing:: Chapter describing the command line
92
* Using History Interactively:: Command History Expansion
93
* Installing Bash:: How to build and install Bash on your system.
94
* Reporting Bugs:: How to report bugs in Bash.
95
* Major Differences From The Bourne Shell:: A terse list of the differences
96
between Bash and historical
98
* GNU Free Documentation License:: Copying and sharing this documentation.
99
* Indexes:: Various indexes for this manual.
104
@chapter Introduction
106
* What is Bash?:: A short description of Bash.
107
* What is a shell?:: A brief introduction to shells.
111
@section What is Bash?
113
Bash is the shell, or command language interpreter,
114
for the @sc{gnu} operating system.
115
The name is an acronym for the @samp{Bourne-Again SHell},
116
a pun on Stephen Bourne, the author of the direct ancestor of
117
the current Unix shell @code{sh},
118
which appeared in the Seventh Edition Bell Labs Research version
121
Bash is largely compatible with @code{sh} and incorporates useful
122
features from the Korn shell @code{ksh} and the C shell @code{csh}.
123
It is intended to be a conformant implementation of the @sc{ieee}
124
@sc{posix} Shell and Tools portion of the @sc{ieee} @sc{posix}
125
specification (@sc{ieee} Standard 1003.1).
126
It offers functional improvements over @code{sh} for both interactive and
129
While the @sc{gnu} operating system provides other shells, including
130
a version of @code{csh}, Bash is the default shell.
131
Like other @sc{gnu} software, Bash is quite portable. It currently runs
132
on nearly every version of Unix and a few other operating systems @minus{}
133
independently-supported ports exist for @sc{ms-dos}, @sc{os/2},
134
and Windows platforms.
136
@node What is a shell?
137
@section What is a shell?
139
At its base, a shell is simply a macro processor that executes
140
commands. The term macro processor means functionality where text
141
and symbols are expanded to create larger expressions.
143
A Unix shell is both a command interpreter and a programming
144
language. As a command interpreter, the shell provides the user
145
interface to the rich set of @sc{gnu} utilities. The programming
146
language features allow these utilities to be combined.
147
Files containing commands can be created, and become
148
commands themselves. These new commands have the same status as
149
system commands in directories such as @file{/bin}, allowing users
150
or groups to establish custom environments to automate their common
153
Shells may be used interactively or non-interactively. In
154
interactive mode, they accept input typed from the keyboard.
155
When executing non-interactively, shells execute commands read
158
A shell allows execution of @sc{gnu} commands, both synchronously and
160
The shell waits for synchronous commands to complete before accepting
161
more input; asynchronous commands continue to execute in parallel
162
with the shell while it reads and executes additional commands.
163
The @dfn{redirection} constructs permit
164
fine-grained control of the input and output of those commands.
165
Moreover, the shell allows control over the contents of commands'
168
Shells also provide a small set of built-in
169
commands (@dfn{builtins}) implementing functionality impossible
170
or inconvenient to obtain via separate utilities.
171
For example, @code{cd}, @code{break}, @code{continue}, and
172
@code{exec} cannot be implemented outside of the shell because
173
they directly manipulate the shell itself.
174
The @code{history}, @code{getopts}, @code{kill}, or @code{pwd}
175
builtins, among others, could be implemented in separate utilities,
176
but they are more convenient to use as builtin commands.
177
All of the shell builtins are described in
180
While executing commands is essential, most of the power (and
181
complexity) of shells is due to their embedded programming
182
languages. Like any high-level language, the shell provides
183
variables, flow control constructs, quoting, and functions.
185
Shells offer features geared specifically for
186
interactive use rather than to augment the programming language.
187
These interactive features include job control, command line
188
editing, command history and aliases. Each of these features is
189
described in this manual.
193
These definitions are used throughout the remainder of this manual.
199
A family of open system standards based on Unix. Bash
200
is primarily concerned with the Shell and Utilities portion of the
201
@sc{posix} 1003.1 standard.
204
A space or tab character.
208
A command that is implemented internally by the shell itself, rather
209
than by an executable program somewhere in the file system.
211
@item control operator
212
@cindex control operator
213
A @code{token} that performs a control function. It is a @code{newline}
214
or one of the following:
215
@samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;},
216
@samp{|}, @samp{|&}, @samp{(}, or @samp{)}.
220
The value returned by a command to its caller. The value is restricted
221
to eight bits, so the maximum value is 255.
225
A unit of text that is the result of one of the shell expansions. After
226
expansion, when executing a command, the resulting fields are used as
227
the command name and arguments.
231
A string of characters used to identify a file.
235
A set of processes comprising a pipeline, and any processes descended
236
from it, that are all in the same process group.
240
A mechanism by which users can selectively stop (suspend) and restart
241
(resume) execution of processes.
244
@cindex metacharacter
245
A character that, when unquoted, separates words. A metacharacter is
246
a @code{blank} or one of the following characters:
247
@samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or
253
A @code{word} consisting solely of letters, numbers, and underscores,
254
and beginning with a letter or underscore. @code{Name}s are used as
255
shell variable and function names.
256
Also referred to as an @code{identifier}.
259
@cindex operator, shell
260
A @code{control operator} or a @code{redirection operator}.
261
@xref{Redirections}, for a list of redirection operators.
262
Operators contain at least one unquoted @code{metacharacter}.
265
@cindex process group
266
A collection of related processes each having the same process
269
@item process group ID
270
@cindex process group ID
271
A unique identifier that represents a @code{process group}
275
@cindex reserved word
276
A @code{word} that has a special meaning to the shell. Most reserved
277
words introduce shell flow control constructs, such as @code{for} and
281
@cindex return status
282
A synonym for @code{exit status}.
286
A mechanism by which a process may be notified by the kernel
287
of an event occurring in the system.
289
@item special builtin
290
@cindex special builtin
291
A shell builtin command that has been classified as special by the
296
A sequence of characters considered a single unit by the shell.
297
It is either a @code{word} or an @code{operator}.
301
A sequence of characters treated as a unit by the shell.
302
Words may not include unquoted @code{metacharacters}.
305
@node Basic Shell Features
306
@chapter Basic Shell Features
309
Bash is an acronym for @samp{Bourne-Again SHell}.
311
the traditional Unix shell originally written by Stephen Bourne.
312
All of the Bourne shell builtin commands are available in Bash,
313
The rules for evaluation and quoting are taken from the @sc{posix}
314
specification for the `standard' Unix shell.
316
This chapter briefly summarizes the shell's `building blocks':
317
commands, control structures, shell functions, shell @i{parameters},
319
@i{redirections}, which are a way to direct input and output from
320
and to named files, and how the shell executes commands.
323
* Shell Syntax:: What your input means to the shell.
324
* Shell Commands:: The types of commands you can use.
325
* Shell Functions:: Grouping commands by name.
326
* Shell Parameters:: How the shell stores values.
327
* Shell Expansions:: How Bash expands parameters and the various
328
expansions available.
329
* Redirections:: A way to control where input and output go.
330
* Executing Commands:: What happens when you run a command.
331
* Shell Scripts:: Executing files of shell commands.
335
@section Shell Syntax
337
* Shell Operation:: The basic operation of the shell.
338
* Quoting:: How to remove the special meaning from characters.
339
* Comments:: How to specify comments.
342
When the shell reads input, it proceeds through a
343
sequence of operations. If the input indicates the beginning of a
344
comment, the shell ignores the comment symbol (@samp{#}), and the rest
347
Otherwise, roughly speaking, the shell reads its input and
348
divides the input into words and operators, employing the quoting rules
349
to select which meanings to assign various words and characters.
351
The shell then parses these tokens into commands and other constructs,
352
removes the special meaning of certain words or characters, expands
353
others, redirects input and output as needed, executes the specified
354
command, waits for the command's exit status, and makes that exit status
355
available for further inspection or processing.
357
@node Shell Operation
358
@subsection Shell Operation
360
The following is a brief description of the shell's operation when it
361
reads and executes a command. Basically, the shell does the
366
Reads its input from a file (@pxref{Shell Scripts}), from a string
367
supplied as an argument to the @option{-c} invocation option
368
(@pxref{Invoking Bash}), or from the user's terminal.
371
Breaks the input into words and operators, obeying the quoting rules
372
described in @ref{Quoting}. These tokens are separated by
373
@code{metacharacters}. Alias expansion is performed by this step
377
Parses the tokens into simple and compound commands
378
(@pxref{Shell Commands}).
381
Performs the various shell expansions (@pxref{Shell Expansions}), breaking
382
the expanded tokens into lists of filenames (@pxref{Filename Expansion})
383
and commands and arguments.
386
Performs any necessary redirections (@pxref{Redirections}) and removes
387
the redirection operators and their operands from the argument list.
390
Executes the command (@pxref{Executing Commands}).
393
Optionally waits for the command to complete and collects its exit
394
status (@pxref{Exit Status}).
402
* Escape Character:: How to remove the special meaning from a single
404
* Single Quotes:: How to inhibit all interpretation of a sequence
406
* Double Quotes:: How to suppress most of the interpretation of a
407
sequence of characters.
408
* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
409
* Locale Translation:: How to translate strings into different languages.
412
Quoting is used to remove the special meaning of certain
413
characters or words to the shell. Quoting can be used to
414
disable special treatment for special characters, to prevent
415
reserved words from being recognized as such, and to prevent
418
Each of the shell metacharacters (@pxref{Definitions})
419
has special meaning to the shell and must be quoted if it is to
421
When the command history expansion facilities are being used
422
(@pxref{History Interaction}), the
423
@var{history expansion} character, usually @samp{!}, must be quoted
424
to prevent history expansion. @xref{Bash History Facilities}, for
425
more details concerning history expansion.
427
There are three quoting mechanisms: the
428
@var{escape character}, single quotes, and double quotes.
430
@node Escape Character
431
@subsubsection Escape Character
432
A non-quoted backslash @samp{\} is the Bash escape character.
433
It preserves the literal value of the next character that follows,
434
with the exception of @code{newline}. If a @code{\newline} pair
435
appears, and the backslash itself is not quoted, the @code{\newline}
436
is treated as a line continuation (that is, it is removed from
437
the input stream and effectively ignored).
440
@subsubsection Single Quotes
442
Enclosing characters in single quotes (@samp{'}) preserves the literal value
443
of each character within the quotes. A single quote may not occur
444
between single quotes, even when preceded by a backslash.
447
@subsubsection Double Quotes
449
Enclosing characters in double quotes (@samp{"}) preserves the literal value
450
of all characters within the quotes, with the exception of
451
@samp{$}, @samp{`}, @samp{\},
452
and, when history expansion is enabled, @samp{!}.
453
The characters @samp{$} and @samp{`}
454
retain their special meaning within double quotes (@pxref{Shell Expansions}).
455
The backslash retains its special meaning only when followed by one of
456
the following characters:
457
@samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}.
458
Within double quotes, backslashes that are followed by one of these
459
characters are removed. Backslashes preceding characters without a
460
special meaning are left unmodified.
461
A double quote may be quoted within double quotes by preceding it with
463
If enabled, history expansion will be performed unless an @samp{!}
464
appearing in double quotes is escaped using a backslash.
465
The backslash preceding the @samp{!} is not removed.
467
The special parameters @samp{*} and @samp{@@} have special meaning
468
when in double quotes (@pxref{Shell Parameter Expansion}).
471
@subsubsection ANSI-C Quoting
472
@cindex quoting, ANSI
474
Words of the form @code{$'@var{string}'} are treated specially. The
475
word expands to @var{string}, with backslash-escaped characters replaced
476
as specified by the ANSI C standard. Backslash escape sequences, if
477
present, are decoded as follows:
486
an escape character (not ANSI C)
504
the eight-bit character whose value is the octal value @var{nnn}
505
(one to three digits)
507
the eight-bit character whose value is the hexadecimal value @var{HH}
508
(one or two hex digits)
510
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
511
@var{HHHH} (one to four hex digits)
512
@item \U@var{HHHHHHHH}
513
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
514
@var{HHHHHHHH} (one to eight hex digits)
516
a control-@var{x} character
520
The expanded result is single-quoted, as if the dollar sign had not
523
@node Locale Translation
524
@subsubsection Locale-Specific Translation
526
@cindex internationalization
527
@cindex native languages
528
@cindex translation, native languages
530
A double-quoted string preceded by a dollar sign (@samp{$}) will cause
531
the string to be translated according to the current locale.
532
If the current locale is @code{C} or @code{POSIX}, the dollar sign
534
If the string is translated and replaced, the replacement is
539
@vindex TEXTDOMAINDIR
540
Some systems use the message catalog selected by the @env{LC_MESSAGES}
541
shell variable. Others create the name of the message catalog from the
542
value of the @env{TEXTDOMAIN} shell variable, possibly adding a
543
suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you
544
may need to set the @env{TEXTDOMAINDIR} variable to the location of
545
the message catalog files. Still others use both variables in this
547
@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
551
@cindex comments, shell
553
In a non-interactive shell, or an interactive shell in which the
554
@code{interactive_comments} option to the @code{shopt}
555
builtin is enabled (@pxref{The Shopt Builtin}),
556
a word beginning with @samp{#}
557
causes that word and all remaining characters on that line to
558
be ignored. An interactive shell without the @code{interactive_comments}
559
option enabled does not allow comments. The @code{interactive_comments}
560
option is on by default in interactive shells.
561
@xref{Interactive Shells}, for a description of what makes
565
@section Shell Commands
566
@cindex commands, shell
568
A simple shell command such as @code{echo a b c} consists of the command
569
itself followed by arguments, separated by spaces.
571
More complex shell commands are composed of simple commands arranged together
572
in a variety of ways: in a pipeline in which the output of one command
573
becomes the input of a second, in a loop or conditional construct, or in
577
* Simple Commands:: The most common type of command.
578
* Pipelines:: Connecting the input and output of several
580
* Lists:: How to execute commands sequentially.
581
* Compound Commands:: Shell commands for control flow.
582
* Coprocesses:: Two-way communication between commands.
583
* GNU Parallel:: Running commands in parallel.
586
@node Simple Commands
587
@subsection Simple Commands
588
@cindex commands, simple
590
A simple command is the kind of command encountered most often.
591
It's just a sequence of words separated by @code{blank}s, terminated
592
by one of the shell's control operators (@pxref{Definitions}). The
593
first word generally specifies a command to be executed, with the
594
rest of the words being that command's arguments.
596
The return status (@pxref{Exit Status}) of a simple command is
597
its exit status as provided
598
by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if
599
the command was terminated by signal @var{n}.
602
@subsection Pipelines
604
@cindex commands, pipelines
606
A @code{pipeline} is a sequence of simple commands separated by one of
607
the control operators @samp{|} or @samp{|&}.
611
@cindex command timing
612
The format for a pipeline is
614
[time [-p]] [!] @var{command1} [ | or |& @var{command2} ] @dots{}
618
The output of each command in the pipeline is connected via a pipe
619
to the input of the next command.
620
That is, each command reads the previous command's output. This
621
connection is performed before any redirections specified by the
624
If @samp{|&} is used, @var{command1}'s standard error, in addition to
625
its standard output, is connected to
626
@var{command2}'s standard input through the pipe;
627
it is shorthand for @code{2>&1 |}.
628
This implicit redirection of the standard error to the standard output is
629
performed after any redirections specified by the command.
631
The reserved word @code{time} causes timing statistics
632
to be printed for the pipeline once it finishes.
633
The statistics currently consist of elapsed (wall-clock) time and
634
user and system time consumed by the command's execution.
635
The @option{-p} option changes the output format to that specified
637
When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
638
it does not recognize @code{time} as a reserved word if the next
639
token begins with a @samp{-}.
640
The @env{TIMEFORMAT} variable may be set to a format string that
641
specifies how the timing information should be displayed.
642
@xref{Bash Variables}, for a description of the available formats.
643
The use of @code{time} as a reserved word permits the timing of
644
shell builtins, shell functions, and pipelines. An external
645
@code{time} command cannot time these easily.
647
When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), @code{time}
648
may be followed by a newline. In this case, the shell displays the
649
total user and system time consumed by the shell and its children.
650
The @env{TIMEFORMAT} variable may be used to specify the format of
651
the time information.
653
If the pipeline is not executed asynchronously (@pxref{Lists}), the
654
shell waits for all commands in the pipeline to complete.
656
Each command in a pipeline is executed in its own subshell
657
(@pxref{Command Execution Environment}). The exit
658
status of a pipeline is the exit status of the last command in the
659
pipeline, unless the @code{pipefail} option is enabled
660
(@pxref{The Set Builtin}).
661
If @code{pipefail} is enabled, the pipeline's return status is the
662
value of the last (rightmost) command to exit with a non-zero status,
663
or zero if all commands exit successfully.
664
If the reserved word @samp{!} precedes the pipeline, the
665
exit status is the logical negation of the exit status as described
667
The shell waits for all commands in the pipeline to terminate before
671
@subsection Lists of Commands
672
@cindex commands, lists
674
A @code{list} is a sequence of one or more pipelines separated by one
675
of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||},
676
and optionally terminated by one of @samp{;}, @samp{&}, or a
679
Of these list operators, @samp{&&} and @samp{||}
680
have equal precedence, followed by @samp{;} and @samp{&},
681
which have equal precedence.
683
A sequence of one or more newlines may appear in a @code{list}
684
to delimit commands, equivalent to a semicolon.
686
If a command is terminated by the control operator @samp{&},
687
the shell executes the command asynchronously in a subshell.
688
This is known as executing the command in the @var{background}.
689
The shell does not wait for the command to finish, and the return
691
When job control is not active (@pxref{Job Control}),
692
the standard input for asynchronous commands, in the absence of any
693
explicit redirections, is redirected from @code{/dev/null}.
695
Commands separated by a @samp{;} are executed sequentially; the shell
696
waits for each command to terminate in turn. The return status is the
697
exit status of the last command executed.
699
@sc{and} and @sc{or} lists are sequences of one or more pipelines
700
separated by the control operators @samp{&&} and @samp{||},
701
respectively. @sc{and} and @sc{or} lists are executed with left
704
An @sc{and} list has the form
706
@var{command1} && @var{command2}
710
@var{command2} is executed if, and only if, @var{command1}
711
returns an exit status of zero.
713
An @sc{or} list has the form
715
@var{command1} || @var{command2}
719
@var{command2} is executed if, and only if, @var{command1}
720
returns a non-zero exit status.
723
@sc{and} and @sc{or} lists is the exit status of the last command
724
executed in the list.
726
@node Compound Commands
727
@subsection Compound Commands
728
@cindex commands, compound
731
* Looping Constructs:: Shell commands for iterative action.
732
* Conditional Constructs:: Shell commands for conditional execution.
733
* Command Grouping:: Ways to group commands.
736
Compound commands are the shell programming constructs.
737
Each construct begins with a reserved word or control operator and is
738
terminated by a corresponding reserved word or operator.
739
Any redirections (@pxref{Redirections}) associated with a compound command
740
apply to all commands within that compound command unless explicitly overridden.
742
In most cases a list of commands in a compound command's description may be
743
separated from the rest of the command by one or more newlines, and may be
744
followed by a newline in place of a semicolon.
746
Bash provides looping constructs, conditional commands, and mechanisms
747
to group commands and execute them as a unit.
749
@node Looping Constructs
750
@subsubsection Looping Constructs
751
@cindex commands, looping
753
Bash supports the following looping constructs.
755
Note that wherever a @samp{;} appears in the description of a
756
command's syntax, it may be replaced with one or more newlines.
763
The syntax of the @code{until} command is:
766
until @var{test-commands}; do @var{consequent-commands}; done
769
Execute @var{consequent-commands} as long as
770
@var{test-commands} has an exit status which is not zero.
771
The return status is the exit status of the last command executed
772
in @var{consequent-commands}, or zero if none was executed.
776
The syntax of the @code{while} command is:
779
while @var{test-commands}; do @var{consequent-commands}; done
782
Execute @var{consequent-commands} as long as
783
@var{test-commands} has an exit status of zero.
784
The return status is the exit status of the last command executed
785
in @var{consequent-commands}, or zero if none was executed.
789
The syntax of the @code{for} command is:
792
for @var{name} [ [in [@var{words} @dots{}] ] ; ] do @var{commands}; done
795
Expand @var{words}, and execute @var{commands} once for each member
796
in the resultant list, with @var{name} bound to the current member.
797
If @samp{in @var{words}} is not present, the @code{for} command
798
executes the @var{commands} once for each positional parameter that is
799
set, as if @samp{in "$@@"} had been specified
800
(@pxref{Special Parameters}).
801
The return status is the exit status of the last command that executes.
802
If there are no items in the expansion of @var{words}, no commands are
803
executed, and the return status is zero.
805
An alternate form of the @code{for} command is also supported:
808
for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done
811
First, the arithmetic expression @var{expr1} is evaluated according
812
to the rules described below (@pxref{Shell Arithmetic}).
813
The arithmetic expression @var{expr2} is then evaluated repeatedly
814
until it evaluates to zero.
815
Each time @var{expr2} evaluates to a non-zero value, @var{commands} are
816
executed and the arithmetic expression @var{expr3} is evaluated.
817
If any expression is omitted, it behaves as if it evaluates to 1.
818
The return value is the exit status of the last command in @var{commands}
819
that is executed, or false if any of the expressions is invalid.
822
The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins})
823
may be used to control loop execution.
825
@node Conditional Constructs
826
@subsubsection Conditional Constructs
827
@cindex commands, conditional
836
The syntax of the @code{if} command is:
839
if @var{test-commands}; then
840
@var{consequent-commands};
841
[elif @var{more-test-commands}; then
842
@var{more-consequents};]
843
[else @var{alternate-consequents};]
847
The @var{test-commands} list is executed, and if its return status is zero,
848
the @var{consequent-commands} list is executed.
849
If @var{test-commands} returns a non-zero status, each @code{elif} list
850
is executed in turn, and if its exit status is zero,
851
the corresponding @var{more-consequents} is executed and the
853
If @samp{else @var{alternate-consequents}} is present, and
854
the final command in the final @code{if} or @code{elif} clause
855
has a non-zero exit status, then @var{alternate-consequents} is executed.
856
The return status is the exit status of the last command executed, or
857
zero if no condition tested true.
863
The syntax of the @code{case} command is:
866
case @var{word} in [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{} esac
869
@code{case} will selectively execute the @var{command-list} corresponding to
870
the first @var{pattern} that matches @var{word}.
871
If the shell option @code{nocasematch}
872
(see the description of @code{shopt} in @ref{The Shopt Builtin})
873
is enabled, the match is performed without regard to the case
874
of alphabetic characters.
875
The @samp{|} is used to separate multiple patterns, and the @samp{)}
876
operator terminates a pattern list.
877
A list of patterns and an associated command-list is known
880
Each clause must be terminated with @samp{;;}, @samp{;&}, or @samp{;;&}.
881
The @var{word} undergoes tilde expansion, parameter expansion, command
882
substitution, arithmetic expansion, and quote removal before matching is
883
attempted. Each @var{pattern} undergoes tilde expansion, parameter
884
expansion, command substitution, and arithmetic expansion.
886
There may be an arbitrary number of @code{case} clauses, each terminated
887
by a @samp{;;}, @samp{;&}, or @samp{;;&}.
888
The first pattern that matches determines the
889
command-list that is executed.
890
It's a common idiom to use @samp{*} as the final pattern to define the
891
default case, since that pattern will always match.
893
Here is an example using @code{case} in a script that could be used to
894
describe one interesting feature of an animal:
897
echo -n "Enter the name of an animal: "
899
echo -n "The $ANIMAL has "
901
horse | dog | cat) echo -n "four";;
902
man | kangaroo ) echo -n "two";;
903
*) echo -n "an unknown number of";;
910
If the @samp{;;} operator is used, no subsequent matches are attempted after
911
the first pattern match.
912
Using @samp{;&} in place of @samp{;;} causes execution to continue with
913
the @var{command-list} associated with the next clause, if any.
914
Using @samp{;;&} in place of @samp{;;} causes the shell to test the patterns
915
in the next clause, if any, and execute any associated @var{command-list}
916
on a successful match.
918
The return status is zero if no @var{pattern} is matched. Otherwise, the
919
return status is the exit status of the @var{command-list} executed.
924
The @code{select} construct allows the easy generation of menus.
925
It has almost the same syntax as the @code{for} command:
928
select @var{name} [in @var{words} @dots{}]; do @var{commands}; done
931
The list of words following @code{in} is expanded, generating a list
932
of items. The set of expanded words is printed on the standard
933
error output stream, each preceded by a number. If the
934
@samp{in @var{words}} is omitted, the positional parameters are printed,
935
as if @samp{in "$@@"} had been specified.
936
The @env{PS3} prompt is then displayed and a line is read from the
938
If the line consists of a number corresponding to one of the displayed
939
words, then the value of @var{name} is set to that word.
940
If the line is empty, the words and prompt are displayed again.
941
If @code{EOF} is read, the @code{select} command completes.
942
Any other value read causes @var{name} to be set to null.
943
The line read is saved in the variable @env{REPLY}.
945
The @var{commands} are executed after each selection until a
946
@code{break} command is executed, at which
947
point the @code{select} command completes.
949
Here is an example that allows the user to pick a filename from the
950
current directory, and displays the name and index of the file
956
echo you picked $fname \($REPLY\)
963
(( @var{expression} ))
966
The arithmetic @var{expression} is evaluated according to the rules
967
described below (@pxref{Shell Arithmetic}).
968
If the value of the expression is non-zero, the return status is 0;
969
otherwise the return status is 1. This is exactly equivalent to
971
let "@var{expression}"
974
@xref{Bash Builtins}, for a full description of the @code{let} builtin.
980
[[ @var{expression} ]]
983
Return a status of 0 or 1 depending on the evaluation of
984
the conditional expression @var{expression}.
985
Expressions are composed of the primaries described below in
986
@ref{Bash Conditional Expressions}.
987
Word splitting and filename expansion are not performed on the words
988
between the @code{[[} and @code{]]}; tilde expansion, parameter and
989
variable expansion, arithmetic expansion, command substitution, process
990
substitution, and quote removal are performed.
991
Conditional operators such as @samp{-f} must be unquoted to be recognized
994
When used with @code{[[}, the @samp{<} and @samp{>} operators sort
995
lexicographically using the current locale.
997
When the @samp{==} and @samp{!=} operators are used, the string to the
998
right of the operator is considered a pattern and matched according
999
to the rules described below in @ref{Pattern Matching},
1000
as if the @code{extglob} shell option were enabled.
1001
The @samp{=} operator is identical to @samp{==}.
1002
If the shell option @code{nocasematch}
1003
(see the description of @code{shopt} in @ref{The Shopt Builtin})
1004
is enabled, the match is performed without regard to the case
1005
of alphabetic characters.
1006
The return value is 0 if the string matches (@samp{==}) or does not
1007
match (@samp{!=})the pattern, and 1 otherwise.
1008
Any part of the pattern may be quoted to force the quoted portion
1009
to be matched as a string.
1011
An additional binary operator, @samp{=~}, is available, with the same
1012
precedence as @samp{==} and @samp{!=}.
1013
When it is used, the string to the right of the operator is considered
1014
an extended regular expression and matched accordingly (as in @i{regex}3)).
1015
The return value is 0 if the string matches
1016
the pattern, and 1 otherwise.
1017
If the regular expression is syntactically incorrect, the conditional
1018
expression's return value is 2.
1019
If the shell option @code{nocasematch}
1020
(see the description of @code{shopt} in @ref{The Shopt Builtin})
1021
is enabled, the match is performed without regard to the case
1022
of alphabetic characters.
1023
Any part of the pattern may be quoted to force the quoted portion
1024
to be matched as a string.
1025
Bracket expressions in regular expressions must be treated carefully,
1026
since normal quoting characters lose their meanings between brackets.
1027
If the pattern is stored in a shell variable, quoting the variable
1028
expansion forces the entire pattern to be matched as a string.
1029
Substrings matched by parenthesized subexpressions within the regular
1030
expression are saved in the array variable @code{BASH_REMATCH}.
1031
The element of @code{BASH_REMATCH} with index 0 is the portion of the string
1032
matching the entire regular expression.
1033
The element of @code{BASH_REMATCH} with index @var{n} is the portion of the
1034
string matching the @var{n}th parenthesized subexpression.
1036
For example, the following will match a line
1037
(stored in the shell variable @var{line})
1038
if there is a sequence of characters in the value consisting of
1039
any number, including zero, of
1040
space characters, zero or one instances of @samp{a}, then a @samp{b}:
1042
[[ $line =~ [[:space:]]*(a)?b ]]
1046
That means values like @samp{aab} and @samp{ aaaaaab} will match, as
1047
will a line containing a @samp{b} anywhere in its value.
1049
Storing the regular expression in a shell variable is often a useful
1050
way to avoid problems with quoting characters that are special to the
1052
It is sometimes difficult to specify a regular expression literally
1053
without using quotes, or to keep track of the quoting used by regular
1054
expressions while paying attention to the shell's quote removal.
1055
Using a shell variable to store the pattern decreases these problems.
1056
For example, the following is equivalent to the above:
1058
pattern='[[:space:]]*(a)?b'
1059
[[ $line =~ $pattern ]]
1063
If you want to match a character that's special to the regular expression
1064
grammar, it has to be quoted to remove its special meaning.
1065
This means that in the pattern @samp{xxx.txt}, the @samp{.} matches any
1066
character in the string (its usual regular expression meaning), but in the
1067
pattern @samp{"xxx.txt"} it can only match a literal @samp{.}.
1068
Shell programmers should take special care with backslashes, since backslashes
1069
are used both by the shell and regular expressions to remove the special
1070
meaning from the following character.
1071
The following two sets of commands are @emph{not} equivalent:
1078
[[ . =~ "$pattern" ]]
1083
The first two matches will succeed, but the second two will not, because
1084
in the second two the backslash will be part of the pattern to be matched.
1085
In the first two examples, the backslash removes the special meaning from
1086
@samp{.}, so the literal @samp{.} matches.
1087
If the string in the first examples were anything other than @samp{.}, say
1088
@samp{a}, the pattern would not match, because the quoted @samp{.} in the
1089
pattern loses its special meaning of matching any single character.
1091
Expressions may be combined using the following operators, listed
1092
in decreasing order of precedence:
1095
@item ( @var{expression} )
1096
Returns the value of @var{expression}.
1097
This may be used to override the normal precedence of operators.
1099
@item ! @var{expression}
1100
True if @var{expression} is false.
1102
@item @var{expression1} && @var{expression2}
1103
True if both @var{expression1} and @var{expression2} are true.
1105
@item @var{expression1} || @var{expression2}
1106
True if either @var{expression1} or @var{expression2} is true.
1110
The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the
1111
value of @var{expression1} is sufficient to determine the return
1112
value of the entire conditional expression.
1115
@node Command Grouping
1116
@subsubsection Grouping Commands
1117
@cindex commands, grouping
1119
Bash provides two ways to group a list of commands to be executed
1120
as a unit. When commands are grouped, redirections may be applied
1121
to the entire command list. For example, the output of all the
1122
commands in the list may be redirected to a single stream.
1130
Placing a list of commands between parentheses causes a subshell
1131
environment to be created (@pxref{Command Execution Environment}), and each
1132
of the commands in @var{list} to be executed in that subshell. Since the
1133
@var{list} is executed in a subshell, variable assignments do not remain in
1134
effect after the subshell completes.
1143
Placing a list of commands between curly braces causes the list to
1144
be executed in the current shell context. No subshell is created.
1145
The semicolon (or newline) following @var{list} is required.
1148
In addition to the creation of a subshell, there is a subtle difference
1149
between these two constructs due to historical reasons. The braces
1150
are @code{reserved words}, so they must be separated from the @var{list}
1151
by @code{blank}s or other shell metacharacters.
1152
The parentheses are @code{operators}, and are
1153
recognized as separate tokens by the shell even if they are not separated
1154
from the @var{list} by whitespace.
1156
The exit status of both of these constructs is the exit status of
1160
@subsection Coprocesses
1163
A @code{coprocess} is a shell command preceded by the @code{coproc}
1165
A coprocess is executed asynchronously in a subshell, as if the command
1166
had been terminated with the @samp{&} control operator, with a two-way pipe
1167
established between the executing shell and the coprocess.
1169
The format for a coprocess is:
1171
coproc [@var{NAME}] @var{command} [@var{redirections}]
1175
This creates a coprocess named @var{NAME}.
1176
If @var{NAME} is not supplied, the default name is @var{COPROC}.
1177
@var{NAME} must not be supplied if @var{command} is a simple
1178
command (@pxref{Simple Commands}); otherwise, it is interpreted as
1179
the first word of the simple command.
1181
When the coprocess is executed, the shell creates an array variable
1183
named @env{NAME} in the context of the executing shell.
1184
The standard output of @var{command}
1185
is connected via a pipe to a file descriptor in the executing shell,
1186
and that file descriptor is assigned to @env{NAME}[0].
1187
The standard input of @var{command}
1188
is connected via a pipe to a file descriptor in the executing shell,
1189
and that file descriptor is assigned to @env{NAME}[1].
1190
This pipe is established before any redirections specified by the
1191
command (@pxref{Redirections}).
1192
The file descriptors can be utilized as arguments to shell commands
1193
and redirections using standard word expansions.
1194
The file descriptors are not available in subshells.
1196
The process ID of the shell spawned to execute the coprocess is
1197
available as the value of the variable @env{NAME}_PID.
1199
builtin command may be used to wait for the coprocess to terminate.
1201
Since the coprocess is created as an asynchronous command,
1202
the @code{coproc} command always returns success.
1203
The return status of a coprocess is the exit status of @var{command}.
1206
@subsection GNU Parallel
1208
There are ways to run commands in parallel that are not built into Bash.
1209
GNU Parallel is a tool to do just that.
1211
GNU Parallel, as its name suggests, can be used to build and run commands
1212
in parallel. You may run the same command with different arguments, whether
1213
they are filenames, usernames, hostnames, or lines read from files. GNU
1214
Parallel provides shorthand references to many of the most common operations
1215
(input lines, various portions of the input line, different ways to specify
1216
the input source, and so on). Parallel can replace @code{xargs} or feed
1217
commands from its input sources to several different instances of Bash.
1219
For a complete description, refer to the GNU Parallel documentation. A few
1220
examples should provide a brief introduction to its use.
1222
For example, it is easy to replace @code{xargs} to gzip all html files in the
1223
current directory and its subdirectories:
1225
find . -type f -name '*.html' -print | parallel gzip
1228
If you need to protect special characters such as newlines in file names,
1229
use find's @option{-print0} option and parallel's @option{-0} option.
1231
You can use Parallel to move files from the current directory when the
1232
number of files is too large to process with one @code{mv} invocation:
1234
ls | parallel mv @{@} destdir
1237
As you can see, the @{@} is replaced with each line read from standard input.
1238
While using @code{ls} will work in most instances, it is not sufficient to
1239
deal with all filenames.
1240
If you need to accommodate special characters in filenames, you can use
1243
find . -depth 1 \! -name '.*' -print0 | parallel -0 mv @{@} destdir
1247
as alluded to above.
1249
This will run as many @code{mv} commands as there are files in the current
1251
You can emulate a parallel @code{xargs} by adding the @option{-X} option:
1253
find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv @{@} destdir
1256
GNU Parallel can replace certain common idioms that operate on lines read
1257
from a file (in this case, filenames listed one per line):
1259
while IFS= read -r x; do
1260
do-something1 "$x" "config-$x"
1261
do-something2 < "$x"
1262
done < file | process-output
1266
with a more compact syntax reminiscent of lambdas:
1268
cat list | parallel "do-something1 @{@} config-@{@} ; do-something2 < @{@}" | process-output
1271
Parallel provides a built-in mechanism to remove filename extensions, which
1272
lends itself to batch file transformations or renaming:
1274
ls *.gz | parallel -j+0 "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}"
1277
This will recompress all files in the current directory with names ending
1278
in .gz using bzip2, running one job per CPU (-j+0) in parallel.
1279
(We use @code{ls} for brevity here; using @code{find} as above is more
1280
robust in the face of filenames containing unexpected characters.)
1281
Parallel can take arguments from the command line; the above can also be
1285
parallel "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}" ::: *.gz
1288
If a command generates output, you may want to preserve the input order in
1289
the output. For instance, the following command
1291
@{ echo foss.org.my ; echo debian.org; echo freenetproject.org; @} | parallel traceroute
1294
will display as output the traceroute invocation that finishes first.
1295
Adding the @option{-k} option
1297
@{ echo foss.org.my ; echo debian.org; echo freenetproject.org; @} | parallel -k traceroute
1300
will ensure that the output of @code{traceroute foss.org.my} is displayed first.
1302
Finally, Parallel can be used to run a sequence of shell commands in parallel,
1303
similar to @samp{cat file | bash}.
1304
It is not uncommon to take a list of filenames, create a series of shell
1305
commands to operate on them, and feed that list of commnds to a shell.
1306
Parallel can speed this up. Assuming that @file{file} contains a list of
1307
shell commands, one per line,
1310
parallel -j 10 < file
1314
will evaluate the commands using the shell (since no explicit command is
1315
supplied as an argument), in blocks of ten shell jobs at a time.
1317
@node Shell Functions
1318
@section Shell Functions
1319
@cindex shell function
1320
@cindex functions, shell
1322
Shell functions are a way to group commands for later execution
1323
using a single name for the group. They are executed just like
1324
a "regular" command.
1325
When the name of a shell function is used as a simple command name,
1326
the list of commands associated with that function name is executed.
1327
Shell functions are executed in the current
1328
shell context; no new process is created to interpret them.
1330
Functions are declared using this syntax:
1333
@var{name} () @var{compound-command} [ @var{redirections} ]
1339
function @var{name} [()] @var{compound-command} [ @var{redirections} ]
1342
This defines a shell function named @var{name}. The reserved
1343
word @code{function} is optional.
1344
If the @code{function} reserved
1345
word is supplied, the parentheses are optional.
1346
The @var{body} of the function is the compound command
1347
@var{compound-command} (@pxref{Compound Commands}).
1348
That command is usually a @var{list} enclosed between @{ and @}, but
1349
may be any compound command listed above.
1350
@var{compound-command} is executed whenever @var{name} is specified as the
1352
When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
1353
@var{name} may not be the same as one of the special builtins
1354
(@pxref{Special Builtins}).
1355
Any redirections (@pxref{Redirections}) associated with the shell function
1356
are performed when the function is executed.
1358
A function definition may be deleted using the @option{-f} option to the
1359
@code{unset} builtin (@pxref{Bourne Shell Builtins}).
1361
The exit status of a function definition is zero unless a syntax error
1362
occurs or a readonly function with the same name already exists.
1363
When executed, the exit status of a function is the exit status of the
1364
last command executed in the body.
1366
Note that for historical reasons, in the most common usage the curly braces
1367
that surround the body of the function must be separated from the body by
1368
@code{blank}s or newlines.
1369
This is because the braces are reserved words and are only recognized
1370
as such when they are separated from the command list
1371
by whitespace or another shell metacharacter.
1372
Also, when using the braces, the @var{list} must be terminated by a semicolon,
1373
a @samp{&}, or a newline.
1375
When a function is executed, the arguments to the
1376
function become the positional parameters
1377
during its execution (@pxref{Positional Parameters}).
1378
The special parameter @samp{#} that expands to the number of
1379
positional parameters is updated to reflect the change.
1380
Special parameter @code{0} is unchanged.
1381
The first element of the @env{FUNCNAME} variable is set to the
1382
name of the function while the function is executing.
1384
All other aspects of the shell execution
1385
environment are identical between a function and its caller
1386
with these exceptions:
1387
the @env{DEBUG} and @env{RETURN} traps
1388
are not inherited unless the function has been given the
1389
@code{trace} attribute using the @code{declare} builtin or
1390
the @code{-o functrace} option has been enabled with
1391
the @code{set} builtin,
1392
(in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps),
1393
and the @env{ERR} trap is not inherited unless the @code{-o errtrace}
1394
shell option has been enabled.
1395
@xref{Bourne Shell Builtins}, for the description of the
1396
@code{trap} builtin.
1398
The @env{FUNCNEST} variable, if set to a numeric value greater
1399
than 0, defines a maximum function nesting level. Function
1400
invocations that exceed the limit cause the entire command to
1403
If the builtin command @code{return}
1404
is executed in a function, the function completes and
1405
execution resumes with the next command after the function
1407
Any command associated with the @code{RETURN} trap is executed
1408
before execution resumes.
1409
When a function completes, the values of the
1410
positional parameters and the special parameter @samp{#}
1411
are restored to the values they had prior to the function's
1412
execution. If a numeric argument is given to @code{return},
1413
that is the function's return status; otherwise the function's
1414
return status is the exit status of the last command executed
1415
before the @code{return}.
1417
Variables local to the function may be declared with the
1418
@code{local} builtin. These variables are visible only to
1419
the function and the commands it invokes.
1421
Function names and definitions may be listed with the
1422
@option{-f} option to the @code{declare} (@code{typeset})
1423
builtin command (@pxref{Bash Builtins}).
1424
The @option{-F} option to @code{declare} or @code{typeset}
1425
will list the function names only
1426
(and optionally the source file and line number, if the @code{extdebug}
1427
shell option is enabled).
1428
Functions may be exported so that subshells
1429
automatically have them defined with the
1430
@option{-f} option to the @code{export} builtin
1431
(@pxref{Bourne Shell Builtins}).
1432
Note that shell functions and variables with the same name may result
1433
in multiple identically-named entries in the environment passed to the
1435
Care should be taken in cases where this may cause a problem.
1437
Functions may be recursive.
1438
The @code{FUNCNEST} variable may be used to limit the depth of the
1439
function call stack and restrict the number of function invocations.
1440
By default, no limit is placed on the number of recursive calls.
1442
@node Shell Parameters
1443
@section Shell Parameters
1445
@cindex variable, shell
1446
@cindex shell variable
1449
* Positional Parameters:: The shell's command-line arguments.
1450
* Special Parameters:: Parameters denoted by special characters.
1453
A @var{parameter} is an entity that stores values.
1454
It can be a @code{name}, a number, or one of the special characters
1456
A @var{variable} is a parameter denoted by a @code{name}.
1457
A variable has a @var{value} and zero or more @var{attributes}.
1458
Attributes are assigned using the @code{declare} builtin command
1459
(see the description of the @code{declare} builtin in @ref{Bash Builtins}).
1461
A parameter is set if it has been assigned a value. The null string is
1462
a valid value. Once a variable is set, it may be unset only by using
1463
the @code{unset} builtin command.
1465
A variable may be assigned to by a statement of the form
1467
@var{name}=[@var{value}]
1471
is not given, the variable is assigned the null string. All
1472
@var{value}s undergo tilde expansion, parameter and variable expansion,
1473
command substitution, arithmetic expansion, and quote
1474
removal (detailed below). If the variable has its @code{integer}
1475
attribute set, then @var{value}
1476
is evaluated as an arithmetic expression even if the @code{$((@dots{}))}
1477
expansion is not used (@pxref{Arithmetic Expansion}).
1478
Word splitting is not performed, with the exception
1479
of @code{"$@@"} as explained below.
1480
Filename expansion is not performed.
1481
Assignment statements may also appear as arguments to the
1483
@code{declare}, @code{typeset}, @code{export}, @code{readonly},
1484
and @code{local} builtin commands.
1485
When in @sc{posix} mode (@pxref{Bash POSIX Mode}), these builtins may appear
1486
in a command after one or more instances of the @code{command} builtin
1487
and retain these assignment statement properties.
1489
In the context where an assignment statement is assigning a value
1490
to a shell variable or array index (@pxref{Arrays}), the @samp{+=}
1491
operator can be used to
1492
append to or add to the variable's previous value.
1493
When @samp{+=} is applied to a variable for which the @var{integer} attribute
1494
has been set, @var{value} is evaluated as an arithmetic expression and
1495
added to the variable's current value, which is also evaluated.
1496
When @samp{+=} is applied to an array variable using compound assignment
1497
(@pxref{Arrays}), the
1498
variable's value is not unset (as it is when using @samp{=}), and new
1499
values are appended to the array beginning at one greater than the array's
1500
maximum index (for indexed arrays), or added as additional key-value pairs
1501
in an associative array.
1502
When applied to a string-valued variable, @var{value} is expanded and
1503
appended to the variable's value.
1505
A variable can be assigned the @var{nameref} attribute using the
1506
@option{-n} option to the \fBdeclare\fP or \fBlocal\fP builtin commands
1507
(@pxref{Bash Builtins})
1508
to create a @var{nameref}, or a reference to another variable.
1509
This allows variables to be manipulated indirectly.
1510
Whenever the nameref variable is referenced or assigned to, the operation
1511
is actually performed on the variable specified by the nameref variable's
1513
A nameref is commonly used within shell functions to refer to a variable
1514
whose name is passed as an argument to the function.
1515
For instance, if a variable name is passed to a shell function as its first
1521
inside the function creates a nameref variable @var{ref} whose value is
1522
the variable name passed as the first argument.
1523
References and assignments to @var{ref} are treated as references and
1524
assignments to the variable whose name was passed as @code{$1}.
1526
If the control variable in a @code{for} loop has the nameref attribute,
1527
the list of words can be a list of shell variables, and a name reference
1528
will be established for each word in the list, in turn, when the loop is
1530
Array variables cannot be given the @option{-n} attribute.
1531
However, nameref variables can reference array variables and subscripted
1533
Namerefs can be unset using the @option{-n} option to the @code{unset} builtin
1534
(@pxref{Bourne Shell Builtins}).
1535
Otherwise, if @code{unset} is executed with the name of a nameref variable
1536
as an argument, the variable referenced by the nameref variable will be unset.
1538
@node Positional Parameters
1539
@subsection Positional Parameters
1540
@cindex parameters, positional
1542
A @var{positional parameter} is a parameter denoted by one or more
1543
digits, other than the single digit @code{0}. Positional parameters are
1544
assigned from the shell's arguments when it is invoked,
1545
and may be reassigned using the @code{set} builtin command.
1546
Positional parameter @code{N} may be referenced as @code{$@{N@}}, or
1547
as @code{$N} when @code{N} consists of a single digit.
1548
Positional parameters may not be assigned to with assignment statements.
1549
The @code{set} and @code{shift} builtins are used to set and
1550
unset them (@pxref{Shell Builtin Commands}).
1551
The positional parameters are
1552
temporarily replaced when a shell function is executed
1553
(@pxref{Shell Functions}).
1555
When a positional parameter consisting of more than a single
1556
digit is expanded, it must be enclosed in braces.
1558
@node Special Parameters
1559
@subsection Special Parameters
1560
@cindex parameters, special
1562
The shell treats several parameters specially. These parameters may
1563
only be referenced; assignment to them is not allowed.
1569
($*) Expands to the positional parameters, starting from one.
1570
When the expansion is not within double quotes, each positional parameter
1571
expands to a separate word.
1572
In contexts where it is performed, those words
1573
are subject to further word splitting and pathname expansion.
1574
When the expansion occurs within double quotes, it expands to a single word
1575
with the value of each parameter separated by the first character
1577
special variable. That is, @code{"$*"} is equivalent
1578
to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c}
1579
is the first character of the value of the @code{IFS}
1581
If @env{IFS} is unset, the parameters are separated by spaces.
1582
If @env{IFS} is null, the parameters are joined without intervening
1587
($@@) Expands to the positional parameters, starting from one. When the
1588
expansion occurs within double quotes, each parameter expands to a
1589
separate word. That is, @code{"$@@"} is equivalent to
1590
@code{"$1" "$2" @dots{}}.
1591
If the double-quoted expansion occurs within a word, the expansion of
1592
the first parameter is joined with the beginning part of the original
1593
word, and the expansion of the last parameter is joined with the last
1594
part of the original word.
1595
When there are no positional parameters, @code{"$@@"} and
1597
expand to nothing (i.e., they are removed).
1601
($#) Expands to the number of positional parameters in decimal.
1605
($?) Expands to the exit status of the most recently executed foreground
1610
($-, a hyphen.) Expands to the current option flags as specified upon
1611
invocation, by the @code{set}
1612
builtin command, or those set by the shell itself
1613
(such as the @option{-i} option).
1617
($$) Expands to the process @sc{id} of the shell. In a @code{()} subshell, it
1618
expands to the process @sc{id} of the invoking shell, not the subshell.
1622
($!) Expands to the process @sc{id} of the job most recently placed into the
1623
background, whether executed as an asynchronous command or using
1624
the @code{bg} builtin (@pxref{Job Control Builtins}).
1628
($0) Expands to the name of the shell or shell script. This is set at
1629
shell initialization. If Bash is invoked with a file of commands
1630
(@pxref{Shell Scripts}), @code{$0} is set to the name of that file.
1631
If Bash is started with the @option{-c} option (@pxref{Invoking Bash}),
1632
then @code{$0} is set to the first argument after the string to be
1633
executed, if one is present. Otherwise, it is set
1634
to the filename used to invoke Bash, as given by argument zero.
1638
($_, an underscore.)
1639
At shell startup, set to the absolute pathname used to invoke the
1640
shell or shell script being executed as passed in the environment
1642
Subsequently, expands to the last argument to the previous command,
1644
Also set to the full pathname used to invoke each command executed
1645
and placed in the environment exported to that command.
1646
When checking mail, this parameter holds the name of the mail file.
1649
@node Shell Expansions
1650
@section Shell Expansions
1653
Expansion is performed on the command line after it has been split into
1654
@code{token}s. There are seven kinds of expansion performed:
1657
@item brace expansion
1658
@item tilde expansion
1659
@item parameter and variable expansion
1660
@item command substitution
1661
@item arithmetic expansion
1662
@item word splitting
1663
@item filename expansion
1667
* Brace Expansion:: Expansion of expressions within braces.
1668
* Tilde Expansion:: Expansion of the ~ character.
1669
* Shell Parameter Expansion:: How Bash expands variables to their values.
1670
* Command Substitution:: Using the output of a command as an argument.
1671
* Arithmetic Expansion:: How to use arithmetic in shell expansions.
1672
* Process Substitution:: A way to write and read to and from a
1674
* Word Splitting:: How the results of expansion are split into separate
1676
* Filename Expansion:: A shorthand for specifying filenames matching patterns.
1677
* Quote Removal:: How and when quote characters are removed from
1681
The order of expansions is:
1683
tilde expansion, parameter and variable expansion, arithmetic expansion,
1684
and command substitution (done in a left-to-right fashion);
1686
and filename expansion.
1688
On systems that can support it, there is an additional expansion
1689
available: @var{process substitution}.
1690
This is performed at the
1691
same time as tilde, parameter, variable, and arithmetic expansion and
1692
command substitution.
1694
Only brace expansion, word splitting, and filename expansion
1695
can change the number of words of the expansion; other expansions
1696
expand a single word to a single word.
1697
The only exceptions to this are the expansions of
1698
@code{"$@@"} (@pxref{Special Parameters}) and @code{"$@{@var{name}[@@]@}"}
1701
After all expansions, @code{quote removal} (@pxref{Quote Removal})
1704
@node Brace Expansion
1705
@subsection Brace Expansion
1706
@cindex brace expansion
1707
@cindex expansion, brace
1709
Brace expansion is a mechanism by which arbitrary strings may be generated.
1710
This mechanism is similar to
1711
@var{filename expansion} (@pxref{Filename Expansion}),
1712
but the filenames generated need not exist.
1713
Patterns to be brace expanded take the form of an optional @var{preamble},
1714
followed by either a series of comma-separated strings or a sequence expression
1715
between a pair of braces,
1716
followed by an optional @var{postscript}.
1717
The preamble is prefixed to each string contained within the braces, and
1718
the postscript is then appended to each resulting string, expanding left
1721
Brace expansions may be nested.
1722
The results of each expanded string are not sorted; left to right order
1726
bash$ echo a@{d,c,b@}e
1730
A sequence expression takes the form @code{@{@var{x}..@var{y}[..@var{incr}]@}},
1731
where @var{x} and @var{y} are either integers or single characters,
1732
and @var{incr}, an optional increment, is an integer.
1733
When integers are supplied, the expression expands to each number between
1734
@var{x} and @var{y}, inclusive.
1735
Supplied integers may be prefixed with @samp{0} to force each term to have the
1737
When either @var{x} or @var{y} begins with a zero, the shell
1738
attempts to force all generated terms to contain the same number of digits,
1739
zero-padding where necessary.
1740
When characters are supplied, the expression expands to each character
1741
lexicographically between @var{x} and @var{y}, inclusive,
1742
using the default C locale.
1743
Note that both @var{x} and @var{y} must be of the same type.
1744
When the increment is supplied, it is used as the difference between
1745
each term. The default increment is 1 or -1 as appropriate.
1747
Brace expansion is performed before any other expansions,
1748
and any characters special to other expansions are preserved
1749
in the result. It is strictly textual. Bash
1750
does not apply any syntactic interpretation to the context of the
1751
expansion or the text between the braces.
1752
To avoid conflicts with parameter expansion, the string @samp{$@{}
1753
is not considered eligible for brace expansion.
1755
A correctly-formed brace expansion must contain unquoted opening
1756
and closing braces, and at least one unquoted comma or a valid
1757
sequence expression.
1758
Any incorrectly formed brace expansion is left unchanged.
1760
A @{ or @samp{,} may be quoted with a backslash to prevent its
1761
being considered part of a brace expression.
1762
To avoid conflicts with parameter expansion, the string @samp{$@{}
1763
is not considered eligible for brace expansion.
1765
This construct is typically used as shorthand when the common
1766
prefix of the strings to be generated is longer than in the
1769
mkdir /usr/local/src/bash/@{old,new,dist,bugs@}
1773
chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@}
1776
@node Tilde Expansion
1777
@subsection Tilde Expansion
1778
@cindex tilde expansion
1779
@cindex expansion, tilde
1781
If a word begins with an unquoted tilde character (@samp{~}), all of the
1782
characters up to the first unquoted slash (or all characters,
1783
if there is no unquoted slash) are considered a @var{tilde-prefix}.
1784
If none of the characters in the tilde-prefix are quoted, the
1785
characters in the tilde-prefix following the tilde are treated as a
1786
possible @var{login name}.
1787
If this login name is the null string, the tilde is replaced with the
1788
value of the @env{HOME} shell variable.
1789
If @env{HOME} is unset, the home directory of the user executing the
1790
shell is substituted instead.
1791
Otherwise, the tilde-prefix is replaced with the home directory
1792
associated with the specified login name.
1794
If the tilde-prefix is @samp{~+}, the value of
1795
the shell variable @env{PWD} replaces the tilde-prefix.
1796
If the tilde-prefix is @samp{~-}, the value of the shell variable
1797
@env{OLDPWD}, if it is set, is substituted.
1799
If the characters following the tilde in the tilde-prefix consist of a
1800
number @var{N}, optionally prefixed by a @samp{+} or a @samp{-},
1801
the tilde-prefix is replaced with the
1802
corresponding element from the directory stack, as it would be displayed
1803
by the @code{dirs} builtin invoked with the characters following tilde
1804
in the tilde-prefix as an argument (@pxref{The Directory Stack}).
1805
If the tilde-prefix, sans the tilde, consists of a number without a
1806
leading @samp{+} or @samp{-}, @samp{+} is assumed.
1808
If the login name is invalid, or the tilde expansion fails, the word is
1811
Each variable assignment is checked for unquoted tilde-prefixes immediately
1812
following a @samp{:} or the first @samp{=}.
1813
In these cases, tilde expansion is also performed.
1814
Consequently, one may use filenames with tildes in assignments to
1815
@env{PATH}, @env{MAILPATH}, and @env{CDPATH},
1816
and the shell assigns the expanded value.
1818
The following table shows how Bash treats unquoted tilde-prefixes:
1822
The value of @code{$HOME}
1827
The subdirectory @code{foo} of the home directory of the user
1834
@file{$@{OLDPWD-'~-'@}/foo}
1837
The string that would be displayed by @samp{dirs +@var{N}}
1840
The string that would be displayed by @samp{dirs +@var{N}}
1843
The string that would be displayed by @samp{dirs -@var{N}}
1846
@node Shell Parameter Expansion
1847
@subsection Shell Parameter Expansion
1848
@cindex parameter expansion
1849
@cindex expansion, parameter
1851
The @samp{$} character introduces parameter expansion,
1852
command substitution, or arithmetic expansion. The parameter name
1853
or symbol to be expanded may be enclosed in braces, which
1854
are optional but serve to protect the variable to be expanded from
1855
characters immediately following it which could be
1856
interpreted as part of the name.
1858
When braces are used, the matching ending brace is the first @samp{@}}
1859
not escaped by a backslash or within a quoted string, and not within an
1860
embedded arithmetic expansion, command substitution, or parameter
1863
The basic form of parameter expansion is $@{@var{parameter}@}.
1864
The value of @var{parameter} is substituted.
1865
The @var{parameter} is a shell parameter as described above
1866
(@pxref{Shell Parameters}) or an array reference (@pxref{Arrays}).
1867
The braces are required when @var{parameter}
1868
is a positional parameter with more than one digit,
1869
or when @var{parameter} is followed by a character that is not to be
1870
interpreted as part of its name.
1872
If the first character of @var{parameter} is an exclamation point (!),
1873
it introduces a level of variable indirection.
1874
Bash uses the value of the variable formed from the rest of
1875
@var{parameter} as the name of the variable; this variable is then
1876
expanded and that value is used in the rest of the substitution, rather
1877
than the value of @var{parameter} itself.
1878
This is known as @code{indirect expansion}.
1879
The exceptions to this are the expansions of $@{!@var{prefix}*@}
1880
and $@{!@var{name}[@@]@}
1882
The exclamation point must immediately follow the left brace in order to
1883
introduce indirection.
1885
In each of the cases below, @var{word} is subject to tilde expansion,
1886
parameter expansion, command substitution, and arithmetic expansion.
1888
When not performing substring expansion, using the form described
1889
below (e.g., @samp{:-}), Bash tests for a parameter that is unset or null.
1890
Omitting the colon results in a test only for a parameter that is unset.
1891
Put another way, if the colon is included,
1892
the operator tests for both @var{parameter}'s existence and that its value
1893
is not null; if the colon is omitted, the operator tests only for existence.
1897
@item $@{@var{parameter}:@minus{}@var{word}@}
1898
If @var{parameter} is unset or null, the expansion of
1899
@var{word} is substituted. Otherwise, the value of
1900
@var{parameter} is substituted.
1902
@item $@{@var{parameter}:=@var{word}@}
1904
is unset or null, the expansion of @var{word}
1905
is assigned to @var{parameter}.
1906
The value of @var{parameter} is then substituted.
1907
Positional parameters and special parameters may not be assigned to
1910
@item $@{@var{parameter}:?@var{word}@}
1912
is null or unset, the expansion of @var{word} (or a message
1913
to that effect if @var{word}
1914
is not present) is written to the standard error and the shell, if it
1915
is not interactive, exits. Otherwise, the value of @var{parameter} is
1918
@item $@{@var{parameter}:+@var{word}@}
1920
is null or unset, nothing is substituted, otherwise the expansion of
1921
@var{word} is substituted.
1923
@item $@{@var{parameter}:@var{offset}@}
1924
@itemx $@{@var{parameter}:@var{offset}:@var{length}@}
1925
This is referred to as Substring Expansion.
1926
It expands to up to @var{length} characters of the value of @var{parameter}
1927
starting at the character specified by @var{offset}.
1928
If @var{parameter} is @samp{@@}, an indexed array subscripted by
1929
@samp{@@} or @samp{*}, or an associative array name, the results differ as
1931
If @var{length} is omitted, it expands to the substring of the value of
1932
@var{parameter} starting at the character specified by @var{offset}
1933
and extending to the end of the value.
1934
@var{length} and @var{offset} are arithmetic expressions
1935
(@pxref{Shell Arithmetic}).
1937
If @var{offset} evaluates to a number less than zero, the value
1938
is used as an offset in characters
1939
from the end of the value of @var{parameter}.
1940
If @var{length} evaluates to a number less than zero,
1941
it is interpreted as an offset in characters
1942
from the end of the value of @var{parameter} rather than
1943
a number of characters, and the expansion is the characters between
1944
@var{offset} and that result.
1945
Note that a negative offset must be separated from the colon by at least
1946
one space to avoid being confused with the @samp{:-} expansion.
1948
Here are some examples illustrating substring expansion on parameters and
1952
$ string=01234567890abcdefgh
1955
$ echo ${string:7:0}
1957
$ echo ${string:7:2}
1959
$ echo ${string:7:-2}
1961
$ echo ${string: -7}
1963
$ echo ${string: -7:0}
1965
$ echo ${string: -7:2}
1967
$ echo ${string: -7:-2}
1969
$ set -- 01234567890abcdefgh
1986
$ array[0]=01234567890abcdefgh
1987
$ echo ${array[0]:7}
1989
$ echo ${array[0]:7:0}
1991
$ echo ${array[0]:7:2}
1993
$ echo ${array[0]:7:-2}
1995
$ echo ${array[0]: -7}
1997
$ echo ${array[0]: -7:0}
1999
$ echo ${array[0]: -7:2}
2001
$ echo ${array[0]: -7:-2}
2005
If @var{parameter} is @samp{@@}, the result is @var{length} positional
2006
parameters beginning at @var{offset}.
2007
A negative @var{offset} is taken relative to one greater than the greatest
2008
positional parameter, so an offset of -1 evaluates to the last positional
2010
It is an expansion error if @var{length} evaluates to a number less than zero.
2012
The following examples illustrate substring expansion using positional
2016
$ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
2018
7 8 9 0 a b c d e f g h
2024
bash: -2: substring expression < 0
2028
./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
2035
If @var{parameter} is an indexed array name subscripted
2036
by @samp{@@} or @samp{*}, the result is the @var{length}
2037
members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}.
2038
A negative @var{offset} is taken relative to one greater than the maximum
2039
index of the specified array.
2040
It is an expansion error if @var{length} evaluates to a number less than zero.
2042
These examples show how you can use substring expansion with indexed
2046
$ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
2047
$ echo ${array[@]:7}
2048
7 8 9 0 a b c d e f g h
2049
$ echo ${array[@]:7:2}
2051
$ echo ${array[@]: -7:2}
2053
$ echo ${array[@]: -7:-2}
2054
bash: -2: substring expression < 0
2055
$ echo ${array[@]:0}
2056
0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
2057
$ echo ${array[@]:0:2}
2059
$ echo ${array[@]: -7:0}
2063
Substring expansion applied to an associative array produces undefined
2066
Substring indexing is zero-based unless the positional parameters
2067
are used, in which case the indexing starts at 1 by default.
2068
If @var{offset} is 0, and the positional parameters are used, @code{$@@} is
2069
prefixed to the list.
2071
@item $@{!@var{prefix}*@}
2072
@itemx $@{!@var{prefix}@@@}
2073
Expands to the names of variables whose names begin with @var{prefix},
2074
separated by the first character of the @env{IFS} special variable.
2075
When @samp{@@} is used and the expansion appears within double quotes, each
2076
variable name expands to a separate word.
2078
@item $@{!@var{name}[@@]@}
2079
@itemx $@{!@var{name}[*]@}
2080
If @var{name} is an array variable, expands to the list of array indices
2081
(keys) assigned in @var{name}.
2082
If @var{name} is not an array, expands to 0 if @var{name} is set and null
2084
When @samp{@@} is used and the expansion appears within double quotes, each
2085
key expands to a separate word.
2087
@item $@{#@var{parameter}@}
2088
The length in characters of the expanded value of @var{parameter} is
2090
If @var{parameter} is @samp{*} or @samp{@@}, the value substituted
2091
is the number of positional parameters.
2092
If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@},
2093
the value substituted is the number of elements in the array.
2095
is an indexed array name subscripted by a negative number, that number is
2096
interpreted as relative to one greater than the maximum index of
2097
@var{parameter}, so negative indices count back from the end of the
2098
array, and an index of -1 references the last element.
2100
@item $@{@var{parameter}#@var{word}@}
2101
@itemx $@{@var{parameter}##@var{word}@}
2103
is expanded to produce a pattern just as in filename
2104
expansion (@pxref{Filename Expansion}). If the pattern matches
2105
the beginning of the expanded value of @var{parameter},
2106
then the result of the expansion is the expanded value of @var{parameter}
2107
with the shortest matching pattern (the @samp{#} case) or the
2108
longest matching pattern (the @samp{##} case) deleted.
2109
If @var{parameter} is @samp{@@} or @samp{*},
2110
the pattern removal operation is applied to each positional
2111
parameter in turn, and the expansion is the resultant list.
2112
If @var{parameter} is an array variable subscripted with
2113
@samp{@@} or @samp{*},
2114
the pattern removal operation is applied to each member of the
2115
array in turn, and the expansion is the resultant list.
2117
@item $@{@var{parameter}%@var{word}@}
2118
@itemx $@{@var{parameter}%%@var{word}@}
2119
The @var{word} is expanded to produce a pattern just as in
2121
If the pattern matches a trailing portion of the expanded value of
2122
@var{parameter}, then the result of the expansion is the value of
2123
@var{parameter} with the shortest matching pattern (the @samp{%} case)
2124
or the longest matching pattern (the @samp{%%} case) deleted.
2125
If @var{parameter} is @samp{@@} or @samp{*},
2126
the pattern removal operation is applied to each positional
2127
parameter in turn, and the expansion is the resultant list.
2129
is an array variable subscripted with @samp{@@} or @samp{*},
2130
the pattern removal operation is applied to each member of the
2131
array in turn, and the expansion is the resultant list.
2133
@item $@{@var{parameter}/@var{pattern}/@var{string}@}
2135
The @var{pattern} is expanded to produce a pattern just as in
2137
@var{Parameter} is expanded and the longest match of @var{pattern}
2138
against its value is replaced with @var{string}.
2139
If @var{pattern} begins with @samp{/}, all matches of @var{pattern} are
2140
replaced with @var{string}. Normally only the first match is replaced.
2141
If @var{pattern} begins with @samp{#}, it must match at the beginning
2142
of the expanded value of @var{parameter}.
2143
If @var{pattern} begins with @samp{%}, it must match at the end
2144
of the expanded value of @var{parameter}.
2145
If @var{string} is null, matches of @var{pattern} are deleted
2146
and the @code{/} following @var{pattern} may be omitted.
2147
If @var{parameter} is @samp{@@} or @samp{*},
2148
the substitution operation is applied to each positional
2149
parameter in turn, and the expansion is the resultant list.
2151
is an array variable subscripted with @samp{@@} or @samp{*},
2152
the substitution operation is applied to each member of the
2153
array in turn, and the expansion is the resultant list.
2155
@item $@{@var{parameter}^@var{pattern}@}
2156
@itemx $@{@var{parameter}^^@var{pattern}@}
2157
@itemx $@{@var{parameter},@var{pattern}@}
2158
@itemx $@{@var{parameter},,@var{pattern}@}
2159
This expansion modifies the case of alphabetic characters in @var{parameter}.
2160
The @var{pattern} is expanded to produce a pattern just as in
2162
Each character in the expanded value of @var{parameter} is tested against
2163
@var{pattern}, and, if it matches the pattern, its case is converted.
2164
The pattern should not attempt to match more than one character.
2165
The @samp{^} operator converts lowercase letters matching @var{pattern}
2166
to uppercase; the @samp{,} operator converts matching uppercase letters
2168
The @samp{^^} and @samp{,,} expansions convert each matched character in the
2169
expanded value; the @samp{^} and @samp{,} expansions match and convert only
2170
the first character in the expanded value.
2171
If @var{pattern} is omitted, it is treated like a @samp{?}, which matches
2173
If @var{parameter} is @samp{@@} or @samp{*},
2174
the case modification operation is applied to each positional
2175
parameter in turn, and the expansion is the resultant list.
2177
is an array variable subscripted with @samp{@@} or @samp{*},
2178
the case modification operation is applied to each member of the
2179
array in turn, and the expansion is the resultant list.
2182
@node Command Substitution
2183
@subsection Command Substitution
2184
@cindex command substitution
2186
Command substitution allows the output of a command to replace
2188
Command substitution occurs when a command is enclosed as follows:
2199
Bash performs the expansion by executing @var{command} and
2200
replacing the command substitution with the standard output of the
2201
command, with any trailing newlines deleted.
2202
Embedded newlines are not deleted, but they may be removed during
2204
The command substitution @code{$(cat @var{file})} can be
2205
replaced by the equivalent but faster @code{$(< @var{file})}.
2207
When the old-style backquote form of substitution is used,
2208
backslash retains its literal meaning except when followed by
2209
@samp{$}, @samp{`}, or @samp{\}.
2210
The first backquote not preceded by a backslash terminates the
2211
command substitution.
2212
When using the @code{$(@var{command})} form, all characters between
2213
the parentheses make up the command; none are treated specially.
2215
Command substitutions may be nested. To nest when using the backquoted
2216
form, escape the inner backquotes with backslashes.
2218
If the substitution appears within double quotes, word splitting and
2219
filename expansion are not performed on the results.
2221
@node Arithmetic Expansion
2222
@subsection Arithmetic Expansion
2223
@cindex expansion, arithmetic
2224
@cindex arithmetic expansion
2226
Arithmetic expansion allows the evaluation of an arithmetic expression
2227
and the substitution of the result. The format for arithmetic expansion is:
2230
$(( @var{expression} ))
2233
The expression is treated as if it were within double quotes, but
2234
a double quote inside the parentheses is not treated specially.
2235
All tokens in the expression undergo parameter and variable expansion,
2236
command substitution, and quote removal.
2237
The result is treated as the arithmetic expression to be evaluated.
2238
Arithmetic expansions may be nested.
2240
The evaluation is performed according to the rules listed below
2241
(@pxref{Shell Arithmetic}).
2242
If the expression is invalid, Bash prints a message indicating
2243
failure to the standard error and no substitution occurs.
2245
@node Process Substitution
2246
@subsection Process Substitution
2247
@cindex process substitution
2249
Process substitution is supported on systems that support named
2250
pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files.
2251
It takes the form of
2261
The process @var{list} is run with its input or output connected to a
2262
@sc{fifo} or some file in @file{/dev/fd}. The name of this file is
2263
passed as an argument to the current command as the result of the
2264
expansion. If the @code{>(@var{list})} form is used, writing to
2265
the file will provide input for @var{list}. If the
2266
@code{<(@var{list})} form is used, the file passed as an
2267
argument should be read to obtain the output of @var{list}.
2268
Note that no space may appear between the @code{<} or @code{>}
2269
and the left parenthesis, otherwise the construct would be interpreted
2272
When available, process substitution is performed simultaneously with
2273
parameter and variable expansion, command substitution, and arithmetic
2276
@node Word Splitting
2277
@subsection Word Splitting
2278
@cindex word splitting
2280
The shell scans the results of parameter expansion, command substitution,
2281
and arithmetic expansion that did not occur within double quotes for
2284
The shell treats each character of @env{$IFS} as a delimiter, and splits
2285
the results of the other expansions into words using these characters
2286
as field terminators.
2287
If @env{IFS} is unset, or its value is exactly @code{<space><tab><newline>},
2288
the default, then sequences of
2289
@code{ <space>}, @code{<tab>}, and @code{<newline>}
2290
at the beginning and end of the results of the previous
2291
expansions are ignored, and any sequence of @env{IFS}
2292
characters not at the beginning or end serves to delimit words.
2293
If @env{IFS} has a value other than the default, then sequences of
2294
the whitespace characters @code{space} and @code{tab}
2295
are ignored at the beginning and end of the
2296
word, as long as the whitespace character is in the
2297
value of @env{IFS} (an @env{IFS} whitespace character).
2298
Any character in @env{IFS} that is not @env{IFS}
2299
whitespace, along with any adjacent @env{IFS}
2300
whitespace characters, delimits a field. A sequence of @env{IFS}
2301
whitespace characters is also treated as a delimiter.
2302
If the value of @env{IFS} is null, no word splitting occurs.
2304
Explicit null arguments (@code{""} or @code{''}) are retained.
2305
Unquoted implicit null arguments, resulting from the expansion of
2306
parameters that have no values, are removed.
2307
If a parameter with no value is expanded within double quotes, a
2308
null argument results and is retained.
2310
Note that if no expansion occurs, no splitting
2313
@node Filename Expansion
2314
@subsection Filename Expansion
2316
* Pattern Matching:: How the shell matches patterns.
2318
@cindex expansion, filename
2319
@cindex expansion, pathname
2320
@cindex filename expansion
2321
@cindex pathname expansion
2323
After word splitting, unless the @option{-f} option has been set
2324
(@pxref{The Set Builtin}), Bash scans each word for the characters
2325
@samp{*}, @samp{?}, and @samp{[}.
2326
If one of these characters appears, then the word is
2327
regarded as a @var{pattern},
2328
and replaced with an alphabetically sorted list of
2329
filenames matching the pattern (@pxref{Pattern Matching}).
2330
If no matching filenames are found,
2331
and the shell option @code{nullglob} is disabled, the word is left
2333
If the @code{nullglob} option is set, and no matches are found, the word
2335
If the @code{failglob} shell option is set, and no matches are found,
2336
an error message is printed and the command is not executed.
2337
If the shell option @code{nocaseglob} is enabled, the match is performed
2338
without regard to the case of alphabetic characters.
2340
When a pattern is used for filename expansion, the character @samp{.}
2341
at the start of a filename or immediately following a slash
2342
must be matched explicitly, unless the shell option @code{dotglob} is set.
2343
When matching a filename, the slash character must always be
2345
In other cases, the @samp{.} character is not treated specially.
2347
See the description of @code{shopt} in @ref{The Shopt Builtin},
2348
for a description of the @code{nocaseglob}, @code{nullglob},
2349
@code{failglob}, and @code{dotglob} options.
2351
The @env{GLOBIGNORE}
2352
shell variable may be used to restrict the set of filenames matching a
2353
pattern. If @env{GLOBIGNORE}
2354
is set, each matching filename that also matches one of the patterns in
2355
@env{GLOBIGNORE} is removed from the list of matches. The filenames
2356
@file{.} and @file{..}
2357
are always ignored when @env{GLOBIGNORE}
2358
is set and not null.
2359
However, setting @env{GLOBIGNORE} to a non-null value has the effect of
2360
enabling the @code{dotglob}
2361
shell option, so all other filenames beginning with a
2362
@samp{.} will match.
2363
To get the old behavior of ignoring filenames beginning with a
2364
@samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}.
2365
The @code{dotglob} option is disabled when @env{GLOBIGNORE}
2368
@node Pattern Matching
2369
@subsubsection Pattern Matching
2370
@cindex pattern matching
2371
@cindex matching, pattern
2373
Any character that appears in a pattern, other than the special pattern
2374
characters described below, matches itself.
2375
The @sc{nul} character may not occur in a pattern.
2376
A backslash escapes the following character; the
2377
escaping backslash is discarded when matching.
2378
The special pattern characters must be quoted if they are to be matched
2381
The special pattern characters have the following meanings:
2384
Matches any string, including the null string.
2385
When the @code{globstar} shell option is enabled, and @samp{*} is used in
2386
a filename expansion context, two adjacent @samp{*}s used as a single
2387
pattern will match all files and zero or more directories and
2389
If followed by a @samp{/}, two adjacent @samp{*}s will match only
2390
directories and subdirectories.
2392
Matches any single character.
2394
Matches any one of the enclosed characters. A pair of characters
2395
separated by a hyphen denotes a @var{range expression};
2396
any character that falls between those two characters, inclusive,
2397
using the current locale's collating sequence and character set,
2398
is matched. If the first character following the
2399
@samp{[} is a @samp{!} or a @samp{^}
2400
then any character not enclosed is matched. A @samp{@minus{}}
2401
may be matched by including it as the first or last character
2402
in the set. A @samp{]} may be matched by including it as the first
2403
character in the set.
2404
The sorting order of characters in range expressions is determined by
2405
the current locale and the values of the
2406
@env{LC_COLLATE} and @env{LC_ALL} shell variables, if set.
2408
For example, in the default C locale, @samp{[a-dx-z]} is equivalent to
2409
@samp{[abcdxyz]}. Many locales sort characters in dictionary order, and in
2410
these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
2411
it might be equivalent to @samp{[aBbCcDdxXyYz]}, for example. To obtain
2412
the traditional interpretation of ranges in bracket expressions, you can
2413
force the use of the C locale by setting the @env{LC_COLLATE} or
2414
@env{LC_ALL} environment variable to the value @samp{C}, or enable the
2415
@code{globasciiranges} shell option.
2417
Within @samp{[} and @samp{]}, @var{character classes} can be specified
2419
@code{[:}@var{class}@code{:]}, where @var{class} is one of the
2420
following classes defined in the @sc{posix} standard:
2422
alnum alpha ascii blank cntrl digit graph lower
2423
print punct space upper word xdigit
2426
A character class matches any character belonging to that class.
2427
The @code{word} character class matches letters, digits, and the character
2430
Within @samp{[} and @samp{]}, an @var{equivalence class} can be
2431
specified using the syntax @code{[=}@var{c}@code{=]}, which
2432
matches all characters with the same collation weight (as defined
2433
by the current locale) as the character @var{c}.
2435
Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]}
2436
matches the collating symbol @var{symbol}.
2439
If the @code{extglob} shell option is enabled using the @code{shopt}
2440
builtin, several extended pattern matching operators are recognized.
2441
In the following description, a @var{pattern-list} is a list of one
2442
or more patterns separated by a @samp{|}.
2443
Composite patterns may be formed using one or more of the following
2447
@item ?(@var{pattern-list})
2448
Matches zero or one occurrence of the given patterns.
2450
@item *(@var{pattern-list})
2451
Matches zero or more occurrences of the given patterns.
2453
@item +(@var{pattern-list})
2454
Matches one or more occurrences of the given patterns.
2456
@item @@(@var{pattern-list})
2457
Matches one of the given patterns.
2459
@item !(@var{pattern-list})
2460
Matches anything except one of the given patterns.
2464
@subsection Quote Removal
2466
After the preceding expansions, all unquoted occurrences of the
2467
characters @samp{\}, @samp{'}, and @samp{"} that did not
2468
result from one of the above expansions are removed.
2471
@section Redirections
2474
Before a command is executed, its input and output
2475
may be @var{redirected}
2476
using a special notation interpreted by the shell.
2477
Redirection allows commands' file handles to be
2478
duplicated, opened, closed,
2479
made to refer to different files,
2480
and can change the files the command reads from and writes to.
2481
Redirection may also be used to modify file handles in the
2482
current shell execution environment. The following redirection
2483
operators may precede or appear anywhere within a
2484
simple command or may follow a command.
2485
Redirections are processed in the order they appear, from
2488
Each redirection that may be preceded by a file descriptor number
2489
may instead be preceded by a word of the form @{@var{varname}@}.
2490
In this case, for each redirection operator except
2491
>&- and <&-, the shell will allocate a file descriptor greater
2492
than 10 and assign it to @{@var{varname}@}. If >&- or <&- is preceded
2493
by @{@var{varname}@}, the value of @var{varname} defines the file
2494
descriptor to close.
2496
In the following descriptions, if the file descriptor number is
2497
omitted, and the first character of the redirection operator is
2498
@samp{<}, the redirection refers to the standard input (file
2499
descriptor 0). If the first character of the redirection operator
2500
is @samp{>}, the redirection refers to the standard output (file
2503
The word following the redirection operator in the following
2504
descriptions, unless otherwise noted, is subjected to brace expansion,
2505
tilde expansion, parameter expansion, command substitution, arithmetic
2506
expansion, quote removal, filename expansion, and word splitting.
2507
If it expands to more than one word, Bash reports an error.
2509
Note that the order of redirections is significant. For example,
2512
ls > @var{dirlist} 2>&1
2515
directs both standard output (file descriptor 1) and standard error
2516
(file descriptor 2) to the file @var{dirlist}, while the command
2518
ls 2>&1 > @var{dirlist}
2521
directs only the standard output to file @var{dirlist},
2522
because the standard error was made a copy of the standard output
2523
before the standard output was redirected to @var{dirlist}.
2525
Bash handles several filenames specially when they are used in
2526
redirections, as described in the following table:
2529
@item /dev/fd/@var{fd}
2530
If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated.
2533
File descriptor 0 is duplicated.
2536
File descriptor 1 is duplicated.
2539
File descriptor 2 is duplicated.
2541
@item /dev/tcp/@var{host}/@var{port}
2542
If @var{host} is a valid hostname or Internet address, and @var{port}
2543
is an integer port number or service name, Bash attempts to open
2544
the corresponding TCP socket.
2546
@item /dev/udp/@var{host}/@var{port}
2547
If @var{host} is a valid hostname or Internet address, and @var{port}
2548
is an integer port number or service name, Bash attempts to open
2549
the corresponding UDP socket.
2552
A failure to open or create a file causes the redirection to fail.
2554
Redirections using file descriptors greater than 9 should be used with
2555
care, as they may conflict with file descriptors the shell uses
2558
@subsection Redirecting Input
2559
Redirection of input causes the file whose name results from
2560
the expansion of @var{word}
2561
to be opened for reading on file descriptor @code{n},
2562
or the standard input (file descriptor 0) if @code{n}
2565
The general format for redirecting input is:
2567
[@var{n}]<@var{word}
2570
@subsection Redirecting Output
2571
Redirection of output causes the file whose name results from
2572
the expansion of @var{word}
2573
to be opened for writing on file descriptor @var{n},
2574
or the standard output (file descriptor 1) if @var{n}
2575
is not specified. If the file does not exist it is created;
2576
if it does exist it is truncated to zero size.
2578
The general format for redirecting output is:
2580
[@var{n}]>[|]@var{word}
2583
If the redirection operator is @samp{>}, and the @code{noclobber}
2584
option to the @code{set} builtin has been enabled, the redirection
2585
will fail if the file whose name results from the expansion of
2586
@var{word} exists and is a regular file.
2587
If the redirection operator is @samp{>|}, or the redirection operator is
2588
@samp{>} and the @code{noclobber} option is not enabled, the redirection
2589
is attempted even if the file named by @var{word} exists.
2591
@subsection Appending Redirected Output
2592
Redirection of output in this fashion
2593
causes the file whose name results from
2594
the expansion of @var{word}
2595
to be opened for appending on file descriptor @var{n},
2596
or the standard output (file descriptor 1) if @var{n}
2597
is not specified. If the file does not exist it is created.
2599
The general format for appending output is:
2601
[@var{n}]>>@var{word}
2604
@subsection Redirecting Standard Output and Standard Error
2605
This construct allows both the
2606
standard output (file descriptor 1) and
2607
the standard error output (file descriptor 2)
2608
to be redirected to the file whose name is the
2609
expansion of @var{word}.
2611
There are two formats for redirecting standard output and
2622
Of the two forms, the first is preferred.
2623
This is semantically equivalent to
2627
When using the second form, @var{word} may not expand to a number or
2628
@samp{-}. If it does, other redirection operators apply
2629
(see Duplicating File Descriptors below) for compatibility reasons.
2631
@subsection Appending Standard Output and Standard Error
2632
This construct allows both the
2633
standard output (file descriptor 1) and
2634
the standard error output (file descriptor 2)
2635
to be appended to the file whose name is the
2636
expansion of @var{word}.
2638
The format for appending standard output and standard error is:
2643
This is semantically equivalent to
2647
(see Duplicating File Descriptors below).
2649
@subsection Here Documents
2650
This type of redirection instructs the shell to read input from the
2651
current source until a line containing only @var{word}
2652
(with no trailing blanks) is seen. All of
2653
the lines read up to that point are then used as the standard
2654
input for a command.
2656
The format of here-documents is:
2658
<<[@minus{}]@var{word}
2663
No parameter and variable expansion, command substitution,
2664
arithmetic expansion, or filename expansion is performed on
2665
@var{word}. If any characters in @var{word} are quoted, the
2666
@var{delimiter} is the result of quote removal on @var{word},
2667
and the lines in the here-document are not expanded.
2668
If @var{word} is unquoted,
2669
all lines of the here-document are subjected to
2670
parameter expansion, command substitution, and arithmetic expansion,
2671
the character sequence @code{\newline} is ignored, and @samp{\}
2672
must be used to quote the characters
2673
@samp{\}, @samp{$}, and @samp{`}.
2675
If the redirection operator is @samp{<<-},
2676
then all leading tab characters are stripped from input lines and the
2677
line containing @var{delimiter}.
2678
This allows here-documents within shell scripts to be indented in a
2681
@subsection Here Strings
2682
A variant of here documents, the format is:
2687
The @var{word} undergoes
2688
brace expansion, tilde expansion, parameter and variable expansion,
2689
command substitution, arithmetic expansion, and quote removal.
2690
Pathname expansion and word splitting are not performed.
2691
The result is supplied as a single string to the command on its
2694
@subsection Duplicating File Descriptors
2695
The redirection operator
2697
[@var{n}]<&@var{word}
2700
is used to duplicate input file descriptors.
2702
expands to one or more digits, the file descriptor denoted by @var{n}
2703
is made to be a copy of that file descriptor.
2704
If the digits in @var{word} do not specify a file descriptor open for
2705
input, a redirection error occurs.
2707
evaluates to @samp{-}, file descriptor @var{n} is closed.
2708
If @var{n} is not specified, the standard input (file descriptor 0) is used.
2712
[@var{n}]>&@var{word}
2715
is used similarly to duplicate output file descriptors. If
2716
@var{n} is not specified, the standard output (file descriptor 1) is used.
2717
If the digits in @var{word} do not specify a file descriptor open for
2718
output, a redirection error occurs.
2720
evaluates to @samp{-}, file descriptor @var{n} is closed.
2721
As a special case, if @var{n} is omitted, and @var{word} does not
2722
expand to one or more digits or @samp{-}, the standard output and standard
2723
error are redirected as described previously.
2725
@subsection Moving File Descriptors
2726
The redirection operator
2728
[@var{n}]<&@var{digit}-
2731
moves the file descriptor @var{digit} to file descriptor @var{n},
2732
or the standard input (file descriptor 0) if @var{n} is not specified.
2733
@var{digit} is closed after being duplicated to @var{n}.
2735
Similarly, the redirection operator
2737
[@var{n}]>&@var{digit}-
2740
moves the file descriptor @var{digit} to file descriptor @var{n},
2741
or the standard output (file descriptor 1) if @var{n} is not specified.
2743
@subsection Opening File Descriptors for Reading and Writing
2744
The redirection operator
2746
[@var{n}]<>@var{word}
2749
causes the file whose name is the expansion of @var{word}
2750
to be opened for both reading and writing on file descriptor
2751
@var{n}, or on file descriptor 0 if @var{n}
2752
is not specified. If the file does not exist, it is created.
2754
@node Executing Commands
2755
@section Executing Commands
2758
* Simple Command Expansion:: How Bash expands simple commands before
2760
* Command Search and Execution:: How Bash finds commands and runs them.
2761
* Command Execution Environment:: The environment in which Bash
2762
executes commands that are not
2764
* Environment:: The environment given to a command.
2765
* Exit Status:: The status returned by commands and how Bash
2767
* Signals:: What happens when Bash or a command it runs
2771
@node Simple Command Expansion
2772
@subsection Simple Command Expansion
2773
@cindex command expansion
2775
When a simple command is executed, the shell performs the following
2776
expansions, assignments, and redirections, from left to right.
2780
The words that the parser has marked as variable assignments (those
2781
preceding the command name) and redirections are saved for later
2785
The words that are not variable assignments or redirections are
2786
expanded (@pxref{Shell Expansions}).
2787
If any words remain after expansion, the first word
2788
is taken to be the name of the command and the remaining words are
2792
Redirections are performed as described above (@pxref{Redirections}).
2795
The text after the @samp{=} in each variable assignment undergoes tilde
2796
expansion, parameter expansion, command substitution, arithmetic expansion,
2797
and quote removal before being assigned to the variable.
2800
If no command name results, the variable assignments affect the current
2801
shell environment. Otherwise, the variables are added to the environment
2802
of the executed command and do not affect the current shell environment.
2803
If any of the assignments attempts to assign a value to a readonly variable,
2804
an error occurs, and the command exits with a non-zero status.
2806
If no command name results, redirections are performed, but do not
2807
affect the current shell environment. A redirection error causes the
2808
command to exit with a non-zero status.
2810
If there is a command name left after expansion, execution proceeds as
2811
described below. Otherwise, the command exits. If one of the expansions
2812
contained a command substitution, the exit status of the command is
2813
the exit status of the last command substitution performed. If there
2814
were no command substitutions, the command exits with a status of zero.
2816
@node Command Search and Execution
2817
@subsection Command Search and Execution
2818
@cindex command execution
2819
@cindex command search
2821
After a command has been split into words, if it results in a
2822
simple command and an optional list of arguments, the following
2827
If the command name contains no slashes, the shell attempts to
2828
locate it. If there exists a shell function by that name, that
2829
function is invoked as described in @ref{Shell Functions}.
2832
If the name does not match a function, the shell searches for
2833
it in the list of shell builtins. If a match is found, that
2837
If the name is neither a shell function nor a builtin,
2838
and contains no slashes, Bash searches each element of
2839
@env{$PATH} for a directory containing an executable file
2840
by that name. Bash uses a hash table to remember the full
2841
pathnames of executable files to avoid multiple @env{PATH} searches
2842
(see the description of @code{hash} in @ref{Bourne Shell Builtins}).
2843
A full search of the directories in @env{$PATH}
2844
is performed only if the command is not found in the hash table.
2845
If the search is unsuccessful, the shell searches for a defined shell
2846
function named @code{command_not_found_handle}.
2847
If that function exists, it is invoked with the original command and
2848
the original command's arguments as its arguments, and the function's
2849
exit status becomes the exit status of the shell.
2850
If that function is not defined, the shell prints an error
2851
message and returns an exit status of 127.
2854
If the search is successful, or if the command name contains
2855
one or more slashes, the shell executes the named program in
2856
a separate execution environment.
2857
Argument 0 is set to the name given, and the remaining arguments
2858
to the command are set to the arguments supplied, if any.
2861
If this execution fails because the file is not in executable
2862
format, and the file is not a directory, it is assumed to be a
2863
@var{shell script} and the shell executes it as described in
2864
@ref{Shell Scripts}.
2867
If the command was not begun asynchronously, the shell waits for
2868
the command to complete and collects its exit status.
2872
@node Command Execution Environment
2873
@subsection Command Execution Environment
2874
@cindex execution environment
2876
The shell has an @var{execution environment}, which consists of the
2881
open files inherited by the shell at invocation, as modified by
2882
redirections supplied to the @code{exec} builtin
2885
the current working directory as set by @code{cd}, @code{pushd}, or
2886
@code{popd}, or inherited by the shell at invocation
2889
the file creation mode mask as set by @code{umask} or inherited from
2893
current traps set by @code{trap}
2896
shell parameters that are set by variable assignment or with @code{set}
2897
or inherited from the shell's parent in the environment
2900
shell functions defined during execution or inherited from the shell's
2901
parent in the environment
2904
options enabled at invocation (either by default or with command-line
2905
arguments) or by @code{set}
2908
options enabled by @code{shopt} (@pxref{The Shopt Builtin})
2911
shell aliases defined with @code{alias} (@pxref{Aliases})
2914
various process @sc{id}s, including those of background jobs
2915
(@pxref{Lists}), the value of @code{$$}, and the value of
2920
When a simple command other than a builtin or shell function
2921
is to be executed, it
2922
is invoked in a separate execution environment that consists of
2923
the following. Unless otherwise noted, the values are inherited
2928
the shell's open files, plus any modifications and additions specified
2929
by redirections to the command
2932
the current working directory
2935
the file creation mode mask
2938
shell variables and functions marked for export, along with variables
2939
exported for the command, passed in the environment (@pxref{Environment})
2942
traps caught by the shell are reset to the values inherited from the
2943
shell's parent, and traps ignored by the shell are ignored
2947
A command invoked in this separate environment cannot affect the
2948
shell's execution environment.
2950
Command substitution, commands grouped with parentheses,
2951
and asynchronous commands are invoked in a
2952
subshell environment that is a duplicate of the shell environment,
2953
except that traps caught by the shell are reset to the values
2954
that the shell inherited from its parent at invocation. Builtin
2955
commands that are invoked as part of a pipeline are also executed
2956
in a subshell environment. Changes made to the subshell environment
2957
cannot affect the shell's execution environment.
2959
Subshells spawned to execute command substitutions inherit the value of
2960
the @option{-e} option from the parent shell. When not in @sc{posix} mode,
2961
Bash clears the @option{-e} option in such subshells.
2963
If a command is followed by a @samp{&} and job control is not active, the
2964
default standard input for the command is the empty file @file{/dev/null}.
2965
Otherwise, the invoked command inherits the file descriptors of the calling
2966
shell as modified by redirections.
2969
@subsection Environment
2972
When a program is invoked it is given an array of strings
2973
called the @var{environment}.
2974
This is a list of name-value pairs, of the form @code{name=value}.
2976
Bash provides several ways to manipulate the environment.
2977
On invocation, the shell scans its own environment and
2978
creates a parameter for each name found, automatically marking
2980
to child processes. Executed commands inherit the environment.
2981
The @code{export} and @samp{declare -x}
2982
commands allow parameters and functions to be added to and
2983
deleted from the environment. If the value of a parameter
2984
in the environment is modified, the new value becomes part
2985
of the environment, replacing the old. The environment
2986
inherited by any executed command consists of the shell's
2987
initial environment, whose values may be modified in the shell,
2988
less any pairs removed by the @code{unset} and @samp{export -n}
2989
commands, plus any additions via the @code{export} and
2990
@samp{declare -x} commands.
2992
The environment for any simple command
2993
or function may be augmented temporarily by prefixing it with
2994
parameter assignments, as described in @ref{Shell Parameters}.
2995
These assignment statements affect only the environment seen
2998
If the @option{-k} option is set (@pxref{The Set Builtin}), then all
2999
parameter assignments are placed in the environment for a command,
3000
not just those that precede the command name.
3002
When Bash invokes an external command, the variable @samp{$_}
3003
is set to the full pathname of the command and passed to that
3004
command in its environment.
3007
@subsection Exit Status
3010
The exit status of an executed command is the value returned by the
3011
@var{waitpid} system call or equivalent function. Exit statuses
3012
fall between 0 and 255, though, as explained below, the shell may
3013
use values above 125 specially. Exit statuses from shell builtins and
3014
compound commands are also limited to this range. Under certain
3015
circumstances, the shell will use special values to indicate specific
3018
For the shell's purposes, a command which exits with a
3019
zero exit status has succeeded.
3020
A non-zero exit status indicates failure.
3021
This seemingly counter-intuitive scheme is used so there
3022
is one well-defined way to indicate success and a variety of
3023
ways to indicate various failure modes.
3024
When a command terminates on a fatal signal whose number is @var{N},
3025
Bash uses the value 128+@var{N} as the exit status.
3027
If a command is not found, the child process created to
3028
execute it returns a status of 127. If a command is found
3029
but is not executable, the return status is 126.
3031
If a command fails because of an error during expansion or redirection,
3032
the exit status is greater than zero.
3034
The exit status is used by the Bash conditional commands
3035
(@pxref{Conditional Constructs}) and some of the list
3036
constructs (@pxref{Lists}).
3038
All of the Bash builtins return an exit status of zero if they succeed
3039
and a non-zero status on failure, so they may be used by the
3040
conditional and list constructs.
3041
All builtins return an exit status of 2 to indicate incorrect usage.
3045
@cindex signal handling
3047
When Bash is interactive, in the absence of any traps, it ignores
3048
@code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell),
3050
is caught and handled (so that the @code{wait} builtin is interruptible).
3051
When Bash receives a @code{SIGINT}, it breaks out of any executing loops.
3052
In all cases, Bash ignores @code{SIGQUIT}.
3053
If job control is in effect (@pxref{Job Control}), Bash
3054
ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
3056
Non-builtin commands started by Bash have signal handlers set to the
3057
values inherited by the shell from its parent.
3058
When job control is not in effect, asynchronous commands
3059
ignore @code{SIGINT} and @code{SIGQUIT} in addition to these inherited
3061
Commands run as a result of
3062
command substitution ignore the keyboard-generated job control signals
3063
@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
3065
The shell exits by default upon receipt of a @code{SIGHUP}.
3066
Before exiting, an interactive shell resends the @code{SIGHUP} to
3067
all jobs, running or stopped.
3068
Stopped jobs are sent @code{SIGCONT} to ensure that they receive
3070
To prevent the shell from sending the @code{SIGHUP} signal to a
3071
particular job, it should be removed
3072
from the jobs table with the @code{disown}
3073
builtin (@pxref{Job Control Builtins}) or marked
3074
to not receive @code{SIGHUP} using @code{disown -h}.
3076
If the @code{huponexit} shell option has been set with @code{shopt}
3077
(@pxref{The Shopt Builtin}), Bash sends a @code{SIGHUP} to all jobs when
3078
an interactive login shell exits.
3080
If Bash is waiting for a command to complete and receives a signal
3081
for which a trap has been set, the trap will not be executed until
3082
the command completes.
3083
When Bash is waiting for an asynchronous
3084
command via the @code{wait} builtin, the reception of a signal for
3085
which a trap has been set will cause the @code{wait} builtin to return
3086
immediately with an exit status greater than 128, immediately after
3087
which the trap is executed.
3090
@section Shell Scripts
3091
@cindex shell script
3093
A shell script is a text file containing shell commands. When such
3094
a file is used as the first non-option argument when invoking Bash,
3095
and neither the @option{-c} nor @option{-s} option is supplied
3096
(@pxref{Invoking Bash}),
3097
Bash reads and executes commands from the file, then exits. This
3098
mode of operation creates a non-interactive shell. The shell first
3099
searches for the file in the current directory, and looks in the
3100
directories in @env{$PATH} if not found there.
3103
a shell script, it sets the special parameter @code{0} to the name
3104
of the file, rather than the name of the shell, and the positional
3105
parameters are set to the remaining arguments, if any are given.
3106
If no additional arguments are supplied, the positional parameters
3109
A shell script may be made executable by using the @code{chmod} command
3110
to turn on the execute bit. When Bash finds such a file while
3111
searching the @env{$PATH} for a command, it spawns a subshell to
3112
execute it. In other words, executing
3114
filename @var{arguments}
3117
is equivalent to executing
3119
bash filename @var{arguments}
3123
if @code{filename} is an executable shell script.
3124
This subshell reinitializes itself, so that the effect is as if a
3125
new shell had been invoked to interpret the script, with the
3126
exception that the locations of commands remembered by the parent
3127
(see the description of @code{hash} in @ref{Bourne Shell Builtins})
3128
are retained by the child.
3130
Most versions of Unix make this a part of the operating system's command
3131
execution mechanism. If the first line of a script begins with
3132
the two characters @samp{#!}, the remainder of the line specifies
3133
an interpreter for the program.
3134
Thus, you can specify Bash, @code{awk}, Perl, or some other
3135
interpreter and write the rest of the script file in that language.
3137
The arguments to the interpreter
3138
consist of a single optional argument following the interpreter
3139
name on the first line of the script file, followed by the name of
3140
the script file, followed by the rest of the arguments. Bash
3141
will perform this action on operating systems that do not handle it
3142
themselves. Note that some older versions of Unix limit the interpreter
3143
name and argument to a maximum of 32 characters.
3145
Bash scripts often begin with @code{#! /bin/bash} (assuming that
3146
Bash has been installed in @file{/bin}), since this ensures that
3147
Bash will be used to interpret the script, even if it is executed
3148
under another shell.
3150
@node Shell Builtin Commands
3151
@chapter Shell Builtin Commands
3154
* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
3156
* Bash Builtins:: Table of builtins specific to Bash.
3157
* Modifying Shell Behavior:: Builtins to modify shell attributes and
3159
* Special Builtins:: Builtin commands classified specially by
3163
Builtin commands are contained within the shell itself.
3164
When the name of a builtin command is used as the first word of
3165
a simple command (@pxref{Simple Commands}), the shell executes
3166
the command directly, without invoking another program.
3167
Builtin commands are necessary to implement functionality impossible
3168
or inconvenient to obtain with separate utilities.
3170
This section briefly describes the builtins which Bash inherits from
3171
the Bourne Shell, as well as the builtin commands which are unique
3172
to or have been extended in Bash.
3174
Several builtin commands are described in other chapters: builtin
3175
commands which provide the Bash interface to the job control
3176
facilities (@pxref{Job Control Builtins}), the directory stack
3177
(@pxref{Directory Stack Builtins}), the command history
3178
(@pxref{Bash History Builtins}), and the programmable completion
3179
facilities (@pxref{Programmable Completion Builtins}).
3181
Many of the builtins have been extended by @sc{posix} or Bash.
3183
Unless otherwise noted, each builtin command documented as accepting
3184
options preceded by @samp{-} accepts @samp{--}
3185
to signify the end of the options.
3186
The @code{:}, @code{true}, @code{false}, and @code{test}
3187
builtins do not accept options and do not treat @samp{--} specially.
3188
The @code{exit}, @code{logout}, @code{break}, @code{continue}, @code{let},
3189
and @code{shift} builtins accept and process arguments beginning
3190
with @samp{-} without requiring @samp{--}.
3191
Other builtins that accept arguments but are not specified as accepting
3192
options interpret arguments beginning with @samp{-} as invalid options and
3193
require @samp{--} to prevent this interpretation.
3195
@node Bourne Shell Builtins
3196
@section Bourne Shell Builtins
3198
The following shell builtin commands are inherited from the Bourne Shell.
3199
These commands are implemented as specified by the @sc{posix} standard.
3202
@item : @r{(a colon)}
3208
Do nothing beyond expanding @var{arguments} and performing redirections.
3209
The return status is zero.
3211
@item . @r{(a period)}
3214
. @var{filename} [@var{arguments}]
3217
Read and execute commands from the @var{filename} argument in the
3218
current shell context. If @var{filename} does not contain a slash,
3219
the @env{PATH} variable is used to find @var{filename}.
3220
When Bash is not in @sc{posix} mode, the current directory is searched
3221
if @var{filename} is not found in @env{$PATH}.
3222
If any @var{arguments} are supplied, they become the positional
3223
parameters when @var{filename} is executed. Otherwise the positional
3224
parameters are unchanged.
3225
The return status is the exit status of the last command executed, or
3226
zero if no commands are executed. If @var{filename} is not found, or
3227
cannot be read, the return status is non-zero.
3228
This builtin is equivalent to @code{source}.
3236
Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop.
3237
If @var{n} is supplied, the @var{n}th enclosing loop is exited.
3238
@var{n} must be greater than or equal to 1.
3239
The return status is zero unless @var{n} is not greater than or equal to 1.
3244
cd [-L|[-P [-e]] [-@@] [@var{directory}]
3247
Change the current working directory to @var{directory}.
3248
If @var{directory} is not supplied, the value of the @env{HOME}
3249
shell variable is used.
3250
Any additional arguments following @var{directory} are ignored.
3251
If the shell variable
3252
@env{CDPATH} exists, it is used as a search path:
3253
each directory name in @env{CDPATH} is searched for
3254
@var{directory}, with alternative directory names in @env{CDPATH}
3255
separated by a colon (@samp{:}).
3256
If @var{directory} begins with a slash, @env{CDPATH} is not used.
3258
The @option{-P} option means to not follow symbolic links: symbolic links
3259
are resolved while @code{cd} is traversing @var{directory} and before
3260
processing an instance of @samp{..} in @var{directory}.
3262
By default, or when the @option{-L} option is supplied, symbolic links
3263
in @var{directory} are resolved after @code{cd} processes an instance
3264
of @samp{..} in @var{directory}.
3266
If @samp{..} appears in @var{directory}, it is processed by removing the
3267
immediately preceding pathname component, back to a slash or the beginning
3270
If the @option{-e} option is supplied with @option{-P}
3271
and the current working directory cannot be successfully determined
3272
after a successful directory change, @code{cd} will return an unsuccessful
3275
On systems that support it, the @option{-@@} option presents the extended
3276
attributes associated with a file as a directory.
3278
If @var{directory} is @samp{-}, it is converted to @env{$OLDPWD}
3279
before the directory change is attempted.
3281
If a non-empty directory name from @env{CDPATH} is used, or if
3282
@samp{-} is the first argument, and the directory change is
3283
successful, the absolute pathname of the new working directory is
3284
written to the standard output.
3286
The return status is zero if the directory is successfully changed,
3295
Resume the next iteration of an enclosing @code{for}, @code{while},
3296
@code{until}, or @code{select} loop.
3297
If @var{n} is supplied, the execution of the @var{n}th enclosing loop
3299
@var{n} must be greater than or equal to 1.
3300
The return status is zero unless @var{n} is not greater than or equal to 1.
3305
eval [@var{arguments}]
3308
The arguments are concatenated together into a single command, which is
3309
then read and executed, and its exit status returned as the exit status
3311
If there are no arguments or only empty arguments, the return status is
3317
exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]]
3321
is supplied, it replaces the shell without creating a new process.
3322
If the @option{-l} option is supplied, the shell places a dash at the
3323
beginning of the zeroth argument passed to @var{command}.
3324
This is what the @code{login} program does.
3325
The @option{-c} option causes @var{command} to be executed with an empty
3327
If @option{-a} is supplied, the shell passes @var{name} as the zeroth
3328
argument to @var{command}.
3330
cannot be executed for some reason, a non-interactive shell exits,
3331
unless the @code{execfail} shell option
3332
is enabled. In that case, it returns failure.
3333
An interactive shell returns failure if the file cannot be executed.
3334
If no @var{command} is specified, redirections may be used to affect
3335
the current shell environment. If there are no redirection errors, the
3336
return status is zero; otherwise the return status is non-zero.
3344
Exit the shell, returning a status of @var{n} to the shell's parent.
3345
If @var{n} is omitted, the exit status is that of the last command executed.
3346
Any trap on @code{EXIT} is executed before the shell terminates.
3351
export [-fn] [-p] [@var{name}[=@var{value}]]
3354
Mark each @var{name} to be passed to child processes
3355
in the environment. If the @option{-f} option is supplied, the @var{name}s
3356
refer to shell functions; otherwise the names refer to shell variables.
3357
The @option{-n} option means to no longer mark each @var{name} for export.
3358
If no @var{names} are supplied, or if the @option{-p} option is given, a
3359
list of names of all exported variables is displayed.
3360
The @option{-p} option displays output in a form that may be reused as input.
3361
If a variable name is followed by =@var{value}, the value of
3362
the variable is set to @var{value}.
3364
The return status is zero unless an invalid option is supplied, one of
3365
the names is not a valid shell variable name, or @option{-f} is supplied
3366
with a name that is not a shell function.
3371
getopts @var{optstring} @var{name} [@var{args}]
3374
@code{getopts} is used by shell scripts to parse positional parameters.
3375
@var{optstring} contains the option characters to be recognized; if a
3376
character is followed by a colon, the option is expected to have an
3377
argument, which should be separated from it by whitespace.
3378
The colon (@samp{:}) and question mark (@samp{?}) may not be
3379
used as option characters.
3380
Each time it is invoked, @code{getopts}
3381
places the next option in the shell variable @var{name}, initializing
3382
@var{name} if it does not exist,
3383
and the index of the next argument to be processed into the
3384
variable @env{OPTIND}.
3385
@env{OPTIND} is initialized to 1 each time the shell or a shell script
3387
When an option requires an argument,
3388
@code{getopts} places that argument into the variable @env{OPTARG}.
3389
The shell does not reset @env{OPTIND} automatically; it must be manually
3390
reset between multiple calls to @code{getopts} within the same shell
3391
invocation if a new set of parameters is to be used.
3393
When the end of options is encountered, @code{getopts} exits with a
3394
return value greater than zero.
3395
@env{OPTIND} is set to the index of the first non-option argument,
3396
and @var{name} is set to @samp{?}.
3399
normally parses the positional parameters, but if more arguments are
3400
given in @var{args}, @code{getopts} parses those instead.
3402
@code{getopts} can report errors in two ways. If the first character of
3403
@var{optstring} is a colon, @var{silent}
3404
error reporting is used. In normal operation, diagnostic messages
3405
are printed when invalid options or missing option arguments are
3407
If the variable @env{OPTERR}
3408
is set to 0, no error messages will be displayed, even if the first
3409
character of @code{optstring} is not a colon.
3411
If an invalid option is seen,
3412
@code{getopts} places @samp{?} into @var{name} and, if not silent,
3413
prints an error message and unsets @env{OPTARG}.
3414
If @code{getopts} is silent, the option character found is placed in
3415
@env{OPTARG} and no diagnostic message is printed.
3417
If a required argument is not found, and @code{getopts}
3418
is not silent, a question mark (@samp{?}) is placed in @var{name},
3419
@code{OPTARG} is unset, and a diagnostic message is printed.
3420
If @code{getopts} is silent, then a colon (@samp{:}) is placed in
3421
@var{name} and @env{OPTARG} is set to the option character found.
3426
hash [-r] [-p @var{filename}] [-dt] [@var{name}]
3429
Each time @code{hash} is invoked, it remembers the full pathnames of the
3430
commands specified as @var{name} arguments,
3431
so they need not be searched for on subsequent invocations.
3432
The commands are found by searching through the directories listed in
3434
Any previously-remembered pathname is discarded.
3435
The @option{-p} option inhibits the path search, and @var{filename} is
3436
used as the location of @var{name}.
3437
The @option{-r} option causes the shell to forget all remembered locations.
3438
The @option{-d} option causes the shell to forget the remembered location
3440
If the @option{-t} option is supplied, the full pathname to which each
3441
@var{name} corresponds is printed. If multiple @var{name} arguments are
3442
supplied with @option{-t} the @var{name} is printed before the hashed
3444
The @option{-l} option causes output to be displayed in a format
3445
that may be reused as input.
3446
If no arguments are given, or if only @option{-l} is supplied,
3447
information about remembered commands is printed.
3448
The return status is zero unless a @var{name} is not found or an invalid
3457
Print the absolute pathname of the current working directory.
3458
If the @option{-P} option is supplied, the pathname printed will not
3459
contain symbolic links.
3460
If the @option{-L} option is supplied, the pathname printed may contain
3462
The return status is zero unless an error is encountered while
3463
determining the name of the current directory or an invalid option
3469
readonly [-aAf] [-p] [@var{name}[=@var{value}]] @dots{}
3472
Mark each @var{name} as readonly.
3473
The values of these names may not be changed by subsequent assignment.
3474
If the @option{-f} option is supplied, each @var{name} refers to a shell
3476
The @option{-a} option means each @var{name} refers to an indexed
3477
array variable; the @option{-A} option means each @var{name} refers
3478
to an associative array variable.
3479
If both options are supplied, @option{-A} takes precedence.
3480
If no @var{name} arguments are given, or if the @option{-p}
3481
option is supplied, a list of all readonly names is printed.
3482
The other options may be used to restrict the output to a subset of
3483
the set of readonly names.
3484
The @option{-p} option causes output to be displayed in a format that
3485
may be reused as input.
3486
If a variable name is followed by =@var{value}, the value of
3487
the variable is set to @var{value}.
3488
The return status is zero unless an invalid option is supplied, one of
3489
the @var{name} arguments is not a valid shell variable or function name,
3490
or the @option{-f} option is supplied with a name that is not a shell function.
3498
Cause a shell function to stop executing and return the value @var{n}
3500
If @var{n} is not supplied, the return value is the exit status of the
3501
last command executed in the function.
3502
@code{return} may also be used to terminate execution of a script
3503
being executed with the @code{.} (@code{source}) builtin,
3504
returning either @var{n} or
3505
the exit status of the last command executed within the script as the exit
3506
status of the script.
3507
If @var{n} is supplied, the return value is its least significant
3509
Any command associated with the @code{RETURN} trap is executed
3510
before execution resumes after the function or script.
3511
The return status is non-zero if @code{return} is supplied a non-numeric
3512
argument or is used outside a function
3513
and not during the execution of a script by @code{.} or @code{source}.
3521
Shift the positional parameters to the left by @var{n}.
3522
The positional parameters from @var{n}+1 @dots{} @code{$#} are
3523
renamed to @code{$1} @dots{} @code{$#}-@var{n}.
3524
Parameters represented by the numbers @code{$#} to @code{$#}-@var{n}+1
3526
@var{n} must be a non-negative number less than or equal to @code{$#}.
3527
If @var{n} is zero or greater than @code{$#}, the positional parameters
3529
If @var{n} is not supplied, it is assumed to be 1.
3530
The return status is zero unless @var{n} is greater than @code{$#} or
3531
less than zero, non-zero otherwise.
3541
Evaluate a conditional express
3542
ion @var{expr} and return a status of 0
3543
(true) or 1 (false).
3544
Each operator and operand must be a separate argument.
3545
Expressions are composed of the primaries described below in
3546
@ref{Bash Conditional Expressions}.
3547
@code{test} does not accept any options, nor does it accept and ignore
3548
an argument of @option{--} as signifying the end of options.
3550
When the @code{[} form is used, the last argument to the command must
3553
Expressions may be combined using the following operators, listed in
3554
decreasing order of precedence.
3555
The evaluation depends on the number of arguments; see below.
3556
Operator precedence is used when there are five or more arguments.
3560
True if @var{expr} is false.
3562
@item ( @var{expr} )
3563
Returns the value of @var{expr}.
3564
This may be used to override the normal precedence of operators.
3566
@item @var{expr1} -a @var{expr2}
3567
True if both @var{expr1} and @var{expr2} are true.
3569
@item @var{expr1} -o @var{expr2}
3570
True if either @var{expr1} or @var{expr2} is true.
3573
The @code{test} and @code{[} builtins evaluate conditional
3574
expressions using a set of rules based on the number of arguments.
3578
The expression is false.
3581
The expression is true if and only if the argument is not null.
3584
If the first argument is @samp{!}, the expression is true if and
3585
only if the second argument is null.
3586
If the first argument is one of the unary conditional operators
3587
(@pxref{Bash Conditional Expressions}), the expression
3588
is true if the unary test is true.
3589
If the first argument is not a valid unary operator, the expression is
3593
The following conditions are applied in the order listed.
3594
If the second argument is one of the binary conditional
3595
operators (@pxref{Bash Conditional Expressions}), the
3596
result of the expression is the result of the binary test using the
3597
first and third arguments as operands.
3598
The @samp{-a} and @samp{-o} operators are considered binary operators
3599
when there are three arguments.
3600
If the first argument is @samp{!}, the value is the negation of
3601
the two-argument test using the second and third arguments.
3602
If the first argument is exactly @samp{(} and the third argument is
3603
exactly @samp{)}, the result is the one-argument test of the second
3605
Otherwise, the expression is false.
3608
If the first argument is @samp{!}, the result is the negation of
3609
the three-argument expression composed of the remaining arguments.
3610
Otherwise, the expression is parsed and evaluated according to
3611
precedence using the rules listed above.
3613
@item 5 or more arguments
3614
The expression is parsed and evaluated according to precedence
3615
using the rules listed above.
3618
When used with @code{test} or @samp{[}, the @samp{<} and @samp{>}
3619
operators sort lexicographically using ASCII ordering.
3627
Print out the user and system times used by the shell and its children.
3628
The return status is zero.
3633
trap [-lp] [@var{arg}] [@var{sigspec} @dots{}]
3636
The commands in @var{arg} are to be read and executed when the
3637
shell receives signal @var{sigspec}. If @var{arg} is absent (and
3638
there is a single @var{sigspec}) or
3639
equal to @samp{-}, each specified signal's disposition is reset
3640
to the value it had when the shell was started.
3641
If @var{arg} is the null string, then the signal specified by
3642
each @var{sigspec} is ignored by the shell and commands it invokes.
3643
If @var{arg} is not present and @option{-p} has been supplied,
3644
the shell displays the trap commands associated with each @var{sigspec}.
3645
If no arguments are supplied, or
3646
only @option{-p} is given, @code{trap} prints the list of commands
3647
associated with each signal number in a form that may be reused as
3649
The @option{-l} option causes the shell to print a list of signal names
3650
and their corresponding numbers.
3651
Each @var{sigspec} is either a signal name or a signal number.
3652
Signal names are case insensitive and the @code{SIG} prefix is optional.
3655
is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
3656
If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
3657
before every simple command, @code{for} command, @code{case} command,
3658
@code{select} command, every arithmetic @code{for} command, and before
3659
the first command executes in a shell function.
3660
Refer to the description of the @code{extdebug} option to the
3661
@code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its
3662
effect on the @code{DEBUG} trap.
3663
If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed
3664
each time a shell function or a script executed with the @code{.} or
3665
@code{source} builtins finishes executing.
3667
If a @var{sigspec} is @code{ERR}, the command @var{arg}
3668
is executed whenever
3669
a pipeline (which may consist of a single simple
3670
command), a list, or a compound command returns a
3671
non-zero exit status,
3672
subject to the following conditions.
3673
The @code{ERR} trap is not executed if the failed command is part of the
3674
command list immediately following an @code{until} or @code{while} keyword,
3675
part of the test following the @code{if} or @code{elif} reserved words,
3676
part of a command executed in a @code{&&} or @code{||} list
3677
except the command following the final @code{&&} or @code{||},
3678
any command in a pipeline but the last,
3679
or if the command's return
3680
status is being inverted using @code{!}.
3681
These are the same conditions obeyed by the @code{errexit} (@option{-e})
3684
Signals ignored upon entry to the shell cannot be trapped or reset.
3685
Trapped signals that are not being ignored are reset to their original
3686
values in a subshell or subshell environment when one is created.
3688
The return status is zero unless a @var{sigspec} does not specify a
3694
umask [-p] [-S] [@var{mode}]
3697
Set the shell process's file creation mask to @var{mode}. If
3698
@var{mode} begins with a digit, it is interpreted as an octal number;
3699
if not, it is interpreted as a symbolic mode mask similar
3700
to that accepted by the @code{chmod} command. If @var{mode} is
3701
omitted, the current value of the mask is printed. If the @option{-S}
3702
option is supplied without a @var{mode} argument, the mask is printed
3703
in a symbolic format.
3704
If the @option{-p} option is supplied, and @var{mode}
3705
is omitted, the output is in a form that may be reused as input.
3706
The return status is zero if the mode is successfully changed or if
3707
no @var{mode} argument is supplied, and non-zero otherwise.
3709
Note that when the mode is interpreted as an octal number, each number
3710
of the umask is subtracted from @code{7}. Thus, a umask of @code{022}
3711
results in permissions of @code{755}.
3716
unset [-fnv] [@var{name}]
3719
Remove each variable or function @var{name}.
3720
If the @option{-v} option is given, each
3721
@var{name} refers to a shell variable and that variable is remvoved.
3722
If the @option{-f} option is given, the @var{name}s refer to shell
3723
functions, and the function definition is removed.
3724
If the @option{-n} option is supplied, and @var{name} is a variable with
3725
the @var{nameref} attribute, @var{name} will be unset rather than the
3726
variable it references.
3727
@option{-n} has no effect if the @option{-f} option is supplied.
3728
If no options are supplied, each @var{name} refers to a variable; if
3729
there is no variable by that name, any function with that name is
3731
Readonly variables and functions may not be unset.
3732
The return status is zero unless a @var{name} is readonly.
3736
@section Bash Builtin Commands
3738
This section describes builtin commands which are unique to
3739
or have been extended in Bash.
3740
Some of these commands are specified in the @sc{posix} standard.
3747
alias [-p] [@var{name}[=@var{value}] @dots{}]
3750
Without arguments or with the @option{-p} option, @code{alias} prints
3751
the list of aliases on the standard output in a form that allows
3752
them to be reused as input.
3753
If arguments are supplied, an alias is defined for each @var{name}
3754
whose @var{value} is given. If no @var{value} is given, the name
3755
and value of the alias is printed.
3756
Aliases are described in @ref{Aliases}.
3761
bind [-m @var{keymap}] [-lpsvPSVX]
3762
bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}]
3763
bind [-m @var{keymap}] -f @var{filename}
3764
bind [-m @var{keymap}] -x @var{keyseq:shell-command}
3765
bind [-m @var{keymap}] @var{keyseq:function-name}
3766
bind @var{readline-command}
3769
Display current Readline (@pxref{Command Line Editing})
3770
key and function bindings,
3771
bind a key sequence to a Readline function or macro,
3772
or set a Readline variable.
3773
Each non-option argument is a command as it would appear in a
3774
Readline initialization file (@pxref{Readline Init File}),
3775
but each binding or command must be passed as a separate argument; e.g.,
3776
@samp{"\C-x\C-r":re-read-init-file}.
3778
Options, if supplied, have the following meanings:
3781
@item -m @var{keymap}
3782
Use @var{keymap} as the keymap to be affected by
3783
the subsequent bindings. Acceptable @var{keymap}
3786
@code{emacs-standard},
3791
@code{vi-command}, and
3793
@code{vi} is equivalent to @code{vi-command};
3794
@code{emacs} is equivalent to @code{emacs-standard}.
3797
List the names of all Readline functions.
3800
Display Readline function names and bindings in such a way that they
3801
can be used as input or in a Readline initialization file.
3804
List current Readline function names and bindings.
3807
Display Readline variable names and values in such a way that they
3808
can be used as input or in a Readline initialization file.
3811
List current Readline variable names and values.
3814
Display Readline key sequences bound to macros and the strings they output
3815
in such a way that they can be used as input or in a Readline
3816
initialization file.
3819
Display Readline key sequences bound to macros and the strings they output.
3821
@item -f @var{filename}
3822
Read key bindings from @var{filename}.
3824
@item -q @var{function}
3825
Query about which keys invoke the named @var{function}.
3827
@item -u @var{function}
3828
Unbind all keys bound to the named @var{function}.
3830
@item -r @var{keyseq}
3831
Remove any current binding for @var{keyseq}.
3833
@item -x @var{keyseq:shell-command}
3834
Cause @var{shell-command} to be executed whenever @var{keyseq} is
3836
When @var{shell-command} is executed, the shell sets the
3837
@code{READLINE_LINE} variable to the contents of the Readline line
3838
buffer and the @code{READLINE_POINT} variable to the current location
3839
of the insertion point.
3840
If the executed command changes the value of @code{READLINE_LINE} or
3841
@code{READLINE_POINT}, those new values will be reflected in the
3845
List all key sequences bound to shell commands and the associated commands
3846
in a format that can be reused as input.
3850
The return status is zero unless an invalid option is supplied or an
3856
builtin [@var{shell-builtin} [@var{args}]]
3859
Run a shell builtin, passing it @var{args}, and return its exit status.
3860
This is useful when defining a shell function with the same
3861
name as a shell builtin, retaining the functionality of the builtin within
3863
The return status is non-zero if @var{shell-builtin} is not a shell
3872
Returns the context of any active subroutine call (a shell function or
3873
a script executed with the @code{.} or @code{source} builtins).
3875
Without @var{expr}, @code{caller} displays the line number and source
3876
filename of the current subroutine call.
3877
If a non-negative integer is supplied as @var{expr}, @code{caller}
3878
displays the line number, subroutine name, and source file corresponding
3879
to that position in the current execution call stack. This extra
3880
information may be used, for example, to print a stack trace. The
3881
current frame is frame 0.
3883
The return value is 0 unless the shell is not executing a subroutine
3884
call or @var{expr} does not correspond to a valid position in the
3890
command [-pVv] @var{command} [@var{arguments} @dots{}]
3893
Runs @var{command} with @var{arguments} ignoring any shell function
3894
named @var{command}.
3895
Only shell builtin commands or commands found by searching the
3896
@env{PATH} are executed.
3897
If there is a shell function named @code{ls}, running @samp{command ls}
3898
within the function will execute the external command @code{ls}
3899
instead of calling the function recursively.
3900
The @option{-p} option means to use a default value for @env{PATH}
3901
that is guaranteed to find all of the standard utilities.
3902
The return status in this case is 127 if @var{command} cannot be
3903
found or an error occurred, and the exit status of @var{command}
3906
If either the @option{-V} or @option{-v} option is supplied, a
3907
description of @var{command} is printed. The @option{-v} option
3908
causes a single word indicating the command or file name used to
3909
invoke @var{command} to be displayed; the @option{-V} option produces
3910
a more verbose description. In this case, the return status is
3911
zero if @var{command} is found, and non-zero if not.
3916
declare [-aAfFgilnrtux] [-p] [@var{name}[=@var{value}] @dots{}]
3919
Declare variables and give them attributes. If no @var{name}s
3920
are given, then display the values of variables instead.
3922
The @option{-p} option will display the attributes and values of each
3924
When @option{-p} is used with @var{name} arguments, additional options,
3925
other than @option{-f} and @option{-F}, are ignored.
3927
When @option{-p} is supplied without @var{name} arguments, @code{declare}
3928
will display the attributes and values of all variables having the
3929
attributes specified by the additional options.
3930
If no other options are supplied with @option{-p}, @code{declare} will
3931
display the attributes and values of all shell variables. The @option{-f}
3932
option will restrict the display to shell functions.
3934
The @option{-F} option inhibits the display of function definitions;
3935
only the function name and attributes are printed.
3936
If the @code{extdebug} shell option is enabled using @code{shopt}
3937
(@pxref{The Shopt Builtin}), the source file name and line number where
3938
the function is defined are displayed as well.
3939
@option{-F} implies @option{-f}.
3941
The @option{-g} option forces variables to be created or modified at
3942
the global scope, even when @code{declare} is executed in a shell function.
3943
It is ignored in all other cases.
3945
The following options can be used to restrict output to variables with
3946
the specified attributes or to give variables attributes:
3950
Each @var{name} is an indexed array variable (@pxref{Arrays}).
3953
Each @var{name} is an associative array variable (@pxref{Arrays}).
3956
Use function names only.
3959
The variable is to be treated as
3960
an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is
3961
performed when the variable is assigned a value.
3964
When the variable is assigned a value, all upper-case characters are
3965
converted to lower-case.
3966
The upper-case attribute is disabled.
3969
Give each @var{name} the @var{nameref} attribute, making
3970
it a name reference to another variable.
3971
That other variable is defined by the value of @var{name}.
3972
All references and assignments to @var{name}, except for changing the
3973
@option{-n} attribute itself, are performed on the variable referenced by
3975
The @option{-n} attribute cannot be applied to array variables.
3978
Make @var{name}s readonly. These names cannot then be assigned values
3979
by subsequent assignment statements or unset.
3982
Give each @var{name} the @code{trace} attribute.
3983
Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from
3985
The trace attribute has no special meaning for variables.
3988
When the variable is assigned a value, all lower-case characters are
3989
converted to upper-case.
3990
The lower-case attribute is disabled.
3993
Mark each @var{name} for export to subsequent commands via
3997
Using @samp{+} instead of @samp{-} turns off the attribute instead,
3998
with the exceptions that @samp{+a}
3999
may not be used to destroy an array variable and @samp{+r} will not
4000
remove the readonly attribute.
4001
When used in a function, @code{declare} makes each @var{name} local,
4002
as with the @code{local} command, unless the @option{-g} option is used.
4003
If a variable name is followed by =@var{value}, the value of the variable
4004
is set to @var{value}.
4006
When using @option{-a} or @option{-A} and the compound assignment syntax to
4007
create array variables, additional attributes do not take effect until
4008
subsequent assignments.
4010
The return status is zero unless an invalid option is encountered,
4011
an attempt is made to define a function using @samp{-f foo=bar},
4012
an attempt is made to assign a value to a readonly variable,
4013
an attempt is made to assign a value to an array variable without
4014
using the compound assignment syntax (@pxref{Arrays}),
4015
one of the @var{names} is not a valid shell variable name,
4016
an attempt is made to turn off readonly status for a readonly variable,
4017
an attempt is made to turn off array status for an array variable,
4018
or an attempt is made to display a non-existent function with @option{-f}.
4023
echo [-neE] [@var{arg} @dots{}]
4026
Output the @var{arg}s, separated by spaces, terminated with a
4028
The return status is 0 unless a write error occurs.
4029
If @option{-n} is specified, the trailing newline is suppressed.
4030
If the @option{-e} option is given, interpretation of the following
4031
backslash-escaped characters is enabled.
4032
The @option{-E} option disables the interpretation of these escape characters,
4033
even on systems where they are interpreted by default.
4034
The @code{xpg_echo} shell option may be used to
4035
dynamically determine whether or not @code{echo} expands these
4036
escape characters by default.
4037
@code{echo} does not interpret @option{--} to mean the end of options.
4039
@code{echo} interprets the following escape sequences:
4046
suppress further output
4063
the eight-bit character whose value is the octal value @var{nnn}
4064
(zero to three octal digits)
4066
the eight-bit character whose value is the hexadecimal value @var{HH}
4067
(one or two hex digits)
4069
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
4070
@var{HHHH} (one to four hex digits)
4071
@item \U@var{HHHHHHHH}
4072
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
4073
@var{HHHHHHHH} (one to eight hex digits)
4079
enable [-a] [-dnps] [-f @var{filename}] [@var{name} @dots{}]
4082
Enable and disable builtin shell commands.
4083
Disabling a builtin allows a disk command which has the same name
4084
as a shell builtin to be executed without specifying a full pathname,
4085
even though the shell normally searches for builtins before disk commands.
4086
If @option{-n} is used, the @var{name}s become disabled. Otherwise
4087
@var{name}s are enabled. For example, to use the @code{test} binary
4088
found via @env{$PATH} instead of the shell builtin version, type
4089
@samp{enable -n test}.
4091
If the @option{-p} option is supplied, or no @var{name} arguments appear,
4092
a list of shell builtins is printed. With no other arguments, the list
4093
consists of all enabled shell builtins.
4094
The @option{-a} option means to list
4095
each builtin with an indication of whether or not it is enabled.
4097
The @option{-f} option means to load the new builtin command @var{name}
4098
from shared object @var{filename}, on systems that support dynamic loading.
4099
The @option{-d} option will delete a builtin loaded with @option{-f}.
4101
If there are no options, a list of the shell builtins is displayed.
4102
The @option{-s} option restricts @code{enable} to the @sc{posix} special
4103
builtins. If @option{-s} is used with @option{-f}, the new builtin becomes
4104
a special builtin (@pxref{Special Builtins}).
4106
The return status is zero unless a @var{name} is not a shell builtin
4107
or there is an error loading a new builtin from a shared object.
4112
help [-dms] [@var{pattern}]
4115
Display helpful information about builtin commands.
4116
If @var{pattern} is specified, @code{help} gives detailed help
4117
on all commands matching @var{pattern}, otherwise a list of
4118
the builtins is printed.
4120
Options, if supplied, have the following meanings:
4124
Display a short description of each @var{pattern}
4126
Display the description of each @var{pattern} in a manpage-like format
4128
Display only a short usage synopsis for each @var{pattern}
4131
The return status is zero unless no command matches @var{pattern}.
4136
let @var{expression} [@var{expression} @dots{}]
4139
The @code{let} builtin allows arithmetic to be performed on shell
4140
variables. Each @var{expression} is evaluated according to the
4141
rules given below in @ref{Shell Arithmetic}. If the
4142
last @var{expression} evaluates to 0, @code{let} returns 1;
4143
otherwise 0 is returned.
4148
local [@var{option}] @var{name}[=@var{value}] @dots{}
4151
For each argument, a local variable named @var{name} is created,
4152
and assigned @var{value}.
4153
The @var{option} can be any of the options accepted by @code{declare}.
4154
@code{local} can only be used within a function; it makes the variable
4155
@var{name} have a visible scope restricted to that function and its
4156
children. The return status is zero unless @code{local} is used outside
4157
a function, an invalid @var{name} is supplied, or @var{name} is a
4166
Exit a login shell, returning a status of @var{n} to the shell's
4172
mapfile [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}]
4173
[-C @var{callback}] [-c @var{quantum}] [@var{array}]
4176
Read lines from the standard input into the indexed array variable @var{array},
4177
or from file descriptor @var{fd}
4178
if the @option{-u} option is supplied.
4179
The variable @code{MAPFILE} is the default @var{array}.
4180
Options, if supplied, have the following meanings:
4185
Copy at most @var{count} lines. If @var{count} is 0, all lines are copied.
4187
Begin assigning to @var{array} at index @var{origin}.
4188
The default index is 0.
4190
Discard the first @var{count} lines read.
4192
Remove a trailing newline from each line read.
4194
Read lines from file descriptor @var{fd} instead of the standard input.
4196
Evaluate @var{callback} each time @var{quantum}P lines are read.
4197
The @option{-c} option specifies @var{quantum}.
4199
Specify the number of lines read between each call to @var{callback}.
4202
If @option{-C} is specified without @option{-c},
4203
the default quantum is 5000.
4204
When @var{callback} is evaluated, it is supplied the index of the next
4205
array element to be assigned and the line to be assigned to that element
4206
as additional arguments.
4207
@var{callback} is evaluated after the line is read but before the
4208
array element is assigned.
4210
If not supplied with an explicit origin, @code{mapfile} will clear @var{array}
4211
before assigning to it.
4213
@code{mapfile} returns successfully unless an invalid option or option
4214
argument is supplied, @var{array} is invalid or unassignable, or @var{array}
4215
is not an indexed array.
4220
printf [-v @var{var}] @var{format} [@var{arguments}]
4223
Write the formatted @var{arguments} to the standard output under the
4224
control of the @var{format}.
4225
The @option{-v} option causes the output to be assigned to the variable
4226
@var{var} rather than being printed to the standard output.
4228
The @var{format} is a character string which contains three types of objects:
4229
plain characters, which are simply copied to standard output, character
4230
escape sequences, which are converted and copied to the standard output, and
4231
format specifications, each of which causes printing of the next successive
4233
In addition to the standard @code{printf(1)} formats, @code{printf}
4234
interprets the following extensions:
4238
Causes @code{printf} to expand backslash escape sequences in the
4239
corresponding @var{argument},
4240
except that @samp{\c} terminates output, backslashes in
4241
@samp{\'}, @samp{\"}, and @samp{\?} are not removed, and octal escapes
4242
beginning with @samp{\0} may contain up to four digits.
4244
Causes @code{printf} to output the
4245
corresponding @var{argument} in a format that can be reused as shell input.
4246
@item %(@var{datefmt})T
4247
Causes @code{printf} to output the date-time string resulting from using
4248
@var{datefmt} as a format string for @code{strftime}(3).
4249
The corresponding @var{argument} is an integer representing the number of
4250
seconds since the epoch.
4251
Two special argument values may be used: -1 represents the current
4252
time, and -2 represents the time the shell was invoked.
4253
If no argument is specified, conversion behaves as if -1 had been given.
4254
This is an exception to the usual @code{printf} behavior.
4258
Arguments to non-string format specifiers are treated as C language constants,
4259
except that a leading plus or minus sign is allowed, and if the leading
4260
character is a single or double quote, the value is the ASCII value of
4261
the following character.
4263
The @var{format} is reused as necessary to consume all of the @var{arguments}.
4264
If the @var{format} requires more @var{arguments} than are supplied, the
4265
extra format specifications behave as if a zero value or null string, as
4266
appropriate, had been supplied. The return value is zero on success,
4267
non-zero on failure.
4272
read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}]
4273
[-N @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}]
4276
One line is read from the standard input, or from the file descriptor
4277
@var{fd} supplied as an argument to the @option{-u} option, and the first word
4278
is assigned to the first @var{name}, the second word to the second @var{name},
4279
and so on, with leftover words and their intervening separators assigned
4280
to the last @var{name}.
4281
If there are fewer words read from the input stream than names,
4282
the remaining names are assigned empty values.
4283
The characters in the value of the @env{IFS} variable
4284
are used to split the line into words using the same rules the shell
4285
uses for expansion (described above in @ref{Word Splitting}).
4286
The backslash character @samp{\} may be used to remove any special
4287
meaning for the next character read and for line continuation.
4288
If no names are supplied, the line read is assigned to the
4289
variable @env{REPLY}.
4290
The return code is zero, unless end-of-file is encountered, @code{read}
4291
times out (in which case the return code is greater than 128),
4292
a variable assignment error (such as assigning to a readonly variable) occurs,
4293
or an invalid file descriptor is supplied as the argument to @option{-u}.
4295
Options, if supplied, have the following meanings:
4298
@item -a @var{aname}
4299
The words are assigned to sequential indices of the array variable
4300
@var{aname}, starting at 0.
4301
All elements are removed from @var{aname} before the assignment.
4302
Other @var{name} arguments are ignored.
4304
@item -d @var{delim}
4305
The first character of @var{delim} is used to terminate the input line,
4306
rather than newline.
4309
Readline (@pxref{Command Line Editing}) is used to obtain the line.
4310
Readline uses the current (or default, if line editing was not previously
4311
active) editing settings.
4314
If Readline is being used to read the line, @var{text} is placed into
4315
the editing buffer before editing begins.
4317
@item -n @var{nchars}
4318
@code{read} returns after reading @var{nchars} characters rather than
4319
waiting for a complete line of input, but honor a delimiter if fewer
4320
than @var{nchars} characters are read before the delimiter.
4322
@item -N @var{nchars}
4323
@code{read} returns after reading exactly @var{nchars} characters rather
4324
than waiting for a complete line of input, unless EOF is encountered or
4325
@code{read} times out.
4326
Delimiter characters encountered in the input are
4327
not treated specially and do not cause @code{read} to return until
4328
@var{nchars} characters are read.
4330
@item -p @var{prompt}
4331
Display @var{prompt}, without a trailing newline, before attempting
4333
The prompt is displayed only if input is coming from a terminal.
4336
If this option is given, backslash does not act as an escape character.
4337
The backslash is considered to be part of the line.
4338
In particular, a backslash-newline pair may not be used as a line
4342
Silent mode. If input is coming from a terminal, characters are
4345
@item -t @var{timeout}
4346
Cause @code{read} to time out and return failure if a complete line of
4347
input (or a specified number of characters)
4348
is not read within @var{timeout} seconds.
4349
@var{timeout} may be a decimal number with a fractional portion following
4351
This option is only effective if @code{read} is reading input from a
4352
terminal, pipe, or other special file; it has no effect when reading
4354
If @code{read} times out, @code{read} saves any partial input read into
4355
the specified variable @var{name}.
4356
If @var{timeout} is 0, @code{read} returns immediately, without trying to
4357
read and data. The exit status is 0 if input is available on
4358
the specified file descriptor, non-zero otherwise.
4359
The exit status is greater than 128 if the timeout is exceeded.
4362
Read input from file descriptor @var{fd}.
4368
readarray [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}]
4369
[-C @var{callback}] [-c @var{quantum}] [@var{array}]
4372
Read lines from the standard input into the indexed array variable @var{array},
4373
or from file descriptor @var{fd}
4374
if the @option{-u} option is supplied.
4376
A synonym for @code{mapfile}.
4381
source @var{filename}
4384
A synonym for @code{.} (@pxref{Bourne Shell Builtins}).
4389
type [-afptP] [@var{name} @dots{}]
4392
For each @var{name}, indicate how it would be interpreted if used as a
4395
If the @option{-t} option is used, @code{type} prints a single word
4396
which is one of @samp{alias}, @samp{function}, @samp{builtin},
4397
@samp{file} or @samp{keyword},
4398
if @var{name} is an alias, shell function, shell builtin,
4399
disk file, or shell reserved word, respectively.
4400
If the @var{name} is not found, then nothing is printed, and
4401
@code{type} returns a failure status.
4403
If the @option{-p} option is used, @code{type} either returns the name
4404
of the disk file that would be executed, or nothing if @option{-t}
4405
would not return @samp{file}.
4407
The @option{-P} option forces a path search for each @var{name}, even if
4408
@option{-t} would not return @samp{file}.
4410
If a command is hashed, @option{-p} and @option{-P} print the hashed value,
4411
which is not necessarily the file that appears first in @code{$PATH}.
4413
If the @option{-a} option is used, @code{type} returns all of the places
4414
that contain an executable named @var{file}.
4415
This includes aliases and functions, if and only if the @option{-p} option
4418
If the @option{-f} option is used, @code{type} does not attempt to find
4419
shell functions, as with the @code{command} builtin.
4421
The return status is zero if all of the @var{names} are found, non-zero
4422
if any are not found.
4427
typeset [-afFgrxilnrtux] [-p] [@var{name}[=@var{value}] @dots{}]
4430
The @code{typeset} command is supplied for compatibility with the Korn
4432
It is a synonym for the @code{declare} builtin command.
4437
ulimit [-abcdefilmnpqrstuvxHST] [@var{limit}]
4440
@code{ulimit} provides control over the resources available to processes
4441
started by the shell, on systems that allow such control. If an
4442
option is given, it is interpreted as follows:
4446
Change and report the soft limit associated with a resource.
4449
Change and report the hard limit associated with a resource.
4452
All current limits are reported.
4455
The maximum socket buffer size.
4458
The maximum size of core files created.
4461
The maximum size of a process's data segment.
4464
The maximum scheduling priority ("nice").
4467
The maximum size of files written by the shell and its children.
4470
The maximum number of pending signals.
4473
The maximum size that may be locked into memory.
4476
The maximum resident set size (many systems do not honor this limit).
4479
The maximum number of open file descriptors (most systems do not
4480
allow this value to be set).
4483
The pipe buffer size.
4486
The maximum number of bytes in POSIX message queues.
4489
The maximum real-time scheduling priority.
4492
The maximum stack size.
4495
The maximum amount of cpu time in seconds.
4498
The maximum number of processes available to a single user.
4501
The maximum amount of virtual memory available to the shell, and, on
4502
some systems, to its children.
4505
The maximum number of file locks.
4508
The maximum number of threads.
4511
If @var{limit} is given, and the @option{-a} option is not used,
4512
@var{limit} is the new value of the specified resource.
4513
The special @var{limit} values @code{hard}, @code{soft}, and
4514
@code{unlimited} stand for the current hard limit, the current soft limit,
4515
and no limit, respectively.
4516
A hard limit cannot be increased by a non-root user once it is set;
4517
a soft limit may be increased up to the value of the hard limit.
4518
Otherwise, the current value of the soft limit for the specified resource
4519
is printed, unless the @option{-H} option is supplied.
4520
When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
4521
both the hard and soft limits are set.
4522
If no option is given, then @option{-f} is assumed. Values are in 1024-byte
4523
increments, except for @option{-t}, which is in seconds; @option{-p},
4524
which is in units of 512-byte blocks; and @option{-T}, @option{-b},
4525
@option{-n} and @option{-u}, which are unscaled values.
4527
The return status is zero unless an invalid option or argument is supplied,
4528
or an error occurs while setting a new limit.
4533
unalias [-a] [@var{name} @dots{} ]
4536
Remove each @var{name} from the list of aliases. If @option{-a} is
4537
supplied, all aliases are removed.
4538
Aliases are described in @ref{Aliases}.
4541
@node Modifying Shell Behavior
4542
@section Modifying Shell Behavior
4545
* The Set Builtin:: Change the values of shell attributes and
4546
positional parameters.
4547
* The Shopt Builtin:: Modify shell optional behavior.
4550
@node The Set Builtin
4551
@subsection The Set Builtin
4553
This builtin is so complicated that it deserves its own section. @code{set}
4554
allows you to change the values of shell options and set the positional
4555
parameters, or to display the names and values of shell variables.
4561
set [--abefhkmnptuvxBCEHPT] [-o @var{option-name}] [@var{argument} @dots{}]
4562
set [+abefhkmnptuvxBCEHPT] [+o @var{option-name}] [@var{argument} @dots{}]
4565
If no options or arguments are supplied, @code{set} displays the names
4566
and values of all shell variables and functions, sorted according to the
4567
current locale, in a format that may be reused as input
4568
for setting or resetting the currently-set variables.
4569
Read-only variables cannot be reset.
4570
In @sc{posix} mode, only shell variables are listed.
4572
When options are supplied, they set or unset shell attributes.
4573
Options, if specified, have the following meanings:
4577
Mark variables and function which are modified or created for export
4578
to the environment of subsequent commands.
4581
Cause the status of terminated background jobs to be reported
4582
immediately, rather than before printing the next primary prompt.
4586
a pipeline (@pxref{Pipelines}), which may consist of a single simple command
4587
(@pxref{Simple Commands}),
4588
a list (@pxref{Lists}),
4589
or a compound command (@pxref{Compound Commands})
4590
returns a non-zero status.
4591
The shell does not exit if the command that fails is part of the
4592
command list immediately following a @code{while} or @code{until} keyword,
4593
part of the test in an @code{if} statement,
4594
part of any command executed in a @code{&&} or @code{||} list except
4595
the command following the final @code{&&} or @code{||},
4596
any command in a pipeline but the last,
4597
or if the command's return status is being inverted with @code{!}.
4598
If a compound command other than a subshell
4599
returns a non-zero status because a command failed
4600
while @option{-e} was being ignored, the shell does not exit.
4601
A trap on @code{ERR}, if set, is executed before the shell exits.
4603
This option applies to the shell environment and each subshell environment
4604
separately (@pxref{Command Execution Environment}), and may cause
4605
subshells to exit before executing all the commands in the subshell.
4607
If a compound command or shell function executes in a context where
4608
@option{-e} is being ignored,
4609
none of the commands executed within the compound command or function body
4610
will be affected by the @option{-e} setting, even if @option{-e} is set
4611
and a command returns a failure status.
4612
If a compound command or shell function sets @option{-e} while executing in
4613
a context where @option{-e} is ignored, that setting will not have any
4614
effect until the compound command or the command containing the function
4618
Disable filename expansion (globbing).
4621
Locate and remember (hash) commands as they are looked up for execution.
4622
This option is enabled by default.
4625
All arguments in the form of assignment statements are placed
4626
in the environment for a command, not just those that precede
4630
Job control is enabled (@pxref{Job Control}).
4631
All processes run in a separate process group.
4632
When a background job completes, the shell prints a line
4633
containing its exit status.
4636
Read commands but do not execute them; this may be used to check a
4637
script for syntax errors.
4638
This option is ignored by interactive shells.
4640
@item -o @var{option-name}
4642
Set the option corresponding to @var{option-name}:
4652
Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}).
4653
This also affects the editing interface used for @code{read -e}.
4671
Enable command history, as described in @ref{Bash History Facilities}.
4672
This option is on by default in interactive shells.
4675
An interactive shell will not exit upon reading EOF.
4708
If set, the return value of a pipeline is the value of the last
4709
(rightmost) command to exit with a non-zero status, or zero if all
4710
commands in the pipeline exit successfully.
4711
This option is disabled by default.
4714
Change the behavior of Bash where the default operation differs
4715
from the @sc{posix} standard to match the standard
4716
(@pxref{Bash POSIX Mode}).
4717
This is intended to make Bash behave as a strict superset of that
4727
Use a @code{vi}-style line editing interface.
4728
This also affects the editing interface used for @code{read -e}.
4735
Turn on privileged mode.
4736
In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not
4737
processed, shell functions are not inherited from the environment,
4738
and the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH} and @env{GLOBIGNORE}
4739
variables, if they appear in the environment, are ignored.
4740
If the shell is started with the effective user (group) id not equal to the
4741
real user (group) id, and the @option{-p} option is not supplied, these actions
4742
are taken and the effective user id is set to the real user id.
4743
If the @option{-p} option is supplied at startup, the effective user id is
4745
Turning this option off causes the effective user
4746
and group ids to be set to the real user and group ids.
4749
Exit after reading and executing one command.
4752
Treat unset variables and parameters other than the special parameters
4753
@samp{@@} or @samp{*} as an error when performing parameter expansion.
4754
An error message will be written to the standard error, and a non-interactive
4758
Print shell input lines as they are read.
4761
Print a trace of simple commands, @code{for} commands, @code{case}
4762
commands, @code{select} commands, and arithmetic @code{for} commands
4763
and their arguments or associated word lists after they are
4764
expanded and before they are executed. The value of the @env{PS4}
4765
variable is expanded and the resultant value is printed before
4766
the command and its expanded arguments.
4769
The shell will perform brace expansion (@pxref{Brace Expansion}).
4770
This option is on by default.
4773
Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>}
4774
from overwriting existing files.
4777
If set, any trap on @code{ERR} is inherited by shell functions, command
4778
substitutions, and commands executed in a subshell environment.
4779
The @code{ERR} trap is normally not inherited in such cases.
4782
Enable @samp{!} style history substitution (@pxref{History Interaction}).
4783
This option is on by default for interactive shells.
4786
If set, do not resolve symbolic links when performing commands such as
4787
@code{cd} which change the current directory. The physical directory
4788
is used instead. By default, Bash follows
4789
the logical chain of directories when performing commands
4790
which change the current directory.
4792
For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys}
4795
$ cd /usr/sys; echo $PWD
4802
If @code{set -P} is on, then:
4804
$ cd /usr/sys; echo $PWD
4811
If set, any trap on @code{DEBUG} and @code{RETURN} are inherited by
4812
shell functions, command substitutions, and commands executed
4813
in a subshell environment.
4814
The @code{DEBUG} and @code{RETURN} traps are normally not inherited
4818
If no arguments follow this option, then the positional parameters are
4819
unset. Otherwise, the positional parameters are set to the
4820
@var{arguments}, even if some of them begin with a @samp{-}.
4823
Signal the end of options, cause all remaining @var{arguments}
4824
to be assigned to the positional parameters. The @option{-x}
4825
and @option{-v} options are turned off.
4826
If there are no arguments, the positional parameters remain unchanged.
4829
Using @samp{+} rather than @samp{-} causes these options to be
4830
turned off. The options can also be used upon invocation of the
4831
shell. The current set of options may be found in @code{$-}.
4833
The remaining N @var{arguments} are positional parameters and are
4834
assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}.
4835
The special parameter @code{#} is set to N.
4837
The return status is always zero unless an invalid option is supplied.
4840
@node The Shopt Builtin
4841
@subsection The Shopt Builtin
4843
This builtin allows you to change additional shell optional behavior.
4850
shopt [-pqsu] [-o] [@var{optname} @dots{}]
4853
Toggle the values of settings controlling optional shell behavior.
4854
The settings can be either those listed below, or, if the
4855
@option{-o} option is used, those available with the @option{-o}
4856
option to the @code{set} builtin command (@pxref{The Set Builtin}).
4857
With no options, or with the @option{-p} option, a list of all settable
4858
options is displayed, with an indication of whether or not each is set.
4859
The @option{-p} option causes output to be displayed in a form that
4860
may be reused as input.
4861
Other options have the following meanings:
4865
Enable (set) each @var{optname}.
4868
Disable (unset) each @var{optname}.
4871
Suppresses normal output; the return status
4872
indicates whether the @var{optname} is set or unset.
4873
If multiple @var{optname} arguments are given with @option{-q},
4874
the return status is zero if all @var{optnames} are enabled;
4878
Restricts the values of
4879
@var{optname} to be those defined for the @option{-o} option to the
4880
@code{set} builtin (@pxref{The Set Builtin}).
4883
If either @option{-s} or @option{-u}
4884
is used with no @var{optname} arguments, @code{shopt} shows only
4885
those options which are set or unset, respectively.
4887
Unless otherwise noted, the @code{shopt} options are disabled (off)
4890
The return status when listing options is zero if all @var{optnames}
4891
are enabled, non-zero otherwise. When setting or unsetting options,
4892
the return status is zero unless an @var{optname} is not a valid shell
4895
The list of @code{shopt} options is:
4899
If set, a command name that is the name of a directory is executed as if
4900
it were the argument to the @code{cd} command.
4901
This option is only used by interactive shells.
4904
If this is set, an argument to the @code{cd} builtin command that
4905
is not a directory is assumed to be the name of a variable whose
4906
value is the directory to change to.
4909
If set, minor errors in the spelling of a directory component in a
4910
@code{cd} command will be corrected.
4911
The errors checked for are transposed characters,
4912
a missing character, and a character too many.
4913
If a correction is found, the corrected path is printed,
4914
and the command proceeds.
4915
This option is only used by interactive shells.
4918
If this is set, Bash checks that a command found in the hash
4919
table exists before trying to execute it. If a hashed command no
4920
longer exists, a normal path search is performed.
4923
If set, Bash lists the status of any stopped and running jobs before
4924
exiting an interactive shell. If any jobs are running, this causes
4925
the exit to be deferred until a second exit is attempted without an
4926
intervening command (@pxref{Job Control}).
4927
The shell always postpones exiting if any jobs are stopped.
4930
If set, Bash checks the window size after each command
4931
and, if necessary, updates the values of
4932
@env{LINES} and @env{COLUMNS}.
4936
attempts to save all lines of a multiple-line
4937
command in the same history entry. This allows
4938
easy re-editing of multi-line commands.
4942
changes its behavior to that of version 3.1 with respect to quoted
4943
arguments to the conditional command's @samp{=~} operator
4944
and with respect to locale-specific
4945
string comparison when using the @code{[[}
4946
conditional command's @samp{<} and @samp{>} operators.
4947
Bash versions prior to bash-4.1 use ASCII collation and strcmp(3);
4948
bash-4.1 and later use the current locale's collation sequence and strcoll(3).
4952
changes its behavior to that of version 3.2 with respect to locale-specific
4953
string comparison when using the @code{[[}
4954
conditional command's @samp{<} and @samp{>} operators (see previous item).
4958
changes its behavior to that of version 4.0 with respect to locale-specific
4959
string comparison when using the @code{[[}
4960
conditional command's @samp{<} and @samp{>} operators (see description
4962
and the effect of interrupting a command list.
4963
Bash versions 4.0 and later interrupt the list as if the shell received the
4964
interrupt; previous versions continue with the next command in the list.
4967
If set, Bash, when in @sc{posix} mode, treats a single quote in a double-quoted
4968
parameter expansion as a special character. The single quotes must match
4969
(an even number) and the characters between the single quotes are considered
4970
quoted. This is the behavior of @sc{posix} mode through version 4.1.
4971
The default Bash behavior remains as in previous versions.
4975
does not process the replacement string in the pattern substitution word
4976
expansion using quote removal.
4978
@item complete_fullquote
4980
quotes all shell metacharacters in filenames and directory names when
4981
performing completion.
4983
removes metacharacters such as the dollar sign from the set of
4984
characters that will be quoted in completed filenames
4985
when these metacharacters appear in shell variable references in words to be
4987
This means that dollar signs in variable names that expand to directories
4989
however, any dollar signs appearing in filenames will not be quoted, either.
4990
This is active only when bash is using backslashes to quote completed
4992
This variable is set by default, which is the default Bash behavior in
4993
versions through 4.2.
4997
replaces directory names with the results of word expansion when performing
4998
filename completion. This changes the contents of the readline editing
5000
If not set, Bash attempts to preserve what the user typed.
5004
attempts spelling correction on directory names during word completion
5005
if the directory name initially supplied does not exist.
5008
If set, Bash includes filenames beginning with a `.' in
5009
the results of filename expansion.
5012
If this is set, a non-interactive shell will not exit if
5013
it cannot execute the file specified as an argument to the @code{exec}
5014
builtin command. An interactive shell does not exit if @code{exec}
5017
@item expand_aliases
5018
If set, aliases are expanded as described below under Aliases,
5020
This option is enabled by default for interactive shells.
5023
If set, behavior intended for use by debuggers is enabled:
5027
The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins})
5028
displays the source file name and line number corresponding to each function
5029
name supplied as an argument.
5032
If the command run by the @code{DEBUG} trap returns a non-zero value, the
5033
next command is skipped and not executed.
5036
If the command run by the @code{DEBUG} trap returns a value of 2, and the
5037
shell is executing in a subroutine (a shell function or a shell script
5038
executed by the @code{.} or @code{source} builtins), a call to
5039
@code{return} is simulated.
5042
@code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their
5043
descriptions (@pxref{Bash Variables}).
5046
Function tracing is enabled: command substitution, shell functions, and
5047
subshells invoked with @code{( @var{command} )} inherit the
5048
@code{DEBUG} and @code{RETURN} traps.
5051
Error tracing is enabled: command substitution, shell functions, and
5052
subshells invoked with @code{( @var{command} )} inherit the
5057
If set, the extended pattern matching features described above
5058
(@pxref{Pattern Matching}) are enabled.
5061
If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is
5062
performed within @code{$@{@var{parameter}@}} expansions
5063
enclosed in double quotes. This option is enabled by default.
5066
If set, patterns which fail to match filenames during filename expansion
5067
result in an expansion error.
5070
If set, the suffixes specified by the @env{FIGNORE} shell variable
5071
cause words to be ignored when performing word completion even if
5072
the ignored words are the only possible completions.
5073
@xref{Bash Variables}, for a description of @env{FIGNORE}.
5074
This option is enabled by default.
5076
@item globasciiranges
5077
If set, range expressions used in pattern matching bracket expressions
5078
(@pxref{Pattern Matching})
5079
behave as if in the traditional C locale when performing
5080
comparisons. That is, the current locale's collating sequence
5081
is not taken into account, so
5082
@samp{b} will not collate between @samp{A} and @samp{B},
5083
and upper-case and lower-case ASCII characters will collate together.
5086
If set, the pattern @samp{**} used in a filename expansion context will
5087
match all files and zero or more directories and subdirectories.
5088
If the pattern is followed by a @samp{/}, only directories and
5089
subdirectories match.
5092
If set, shell error messages are written in the standard @sc{gnu} error
5096
If set, the history list is appended to the file named by the value
5097
of the @env{HISTFILE}
5098
variable when the shell exits, rather than overwriting the file.
5101
If set, and Readline
5102
is being used, a user is given the opportunity to re-edit a
5103
failed history substitution.
5106
If set, and Readline
5107
is being used, the results of history substitution are not immediately
5108
passed to the shell parser. Instead, the resulting line is loaded into
5109
the Readline editing buffer, allowing further modification.
5112
If set, and Readline is being used, Bash will attempt to perform
5113
hostname completion when a word containing a @samp{@@} is being
5114
completed (@pxref{Commands For Completion}). This option is enabled
5118
If set, Bash will send @code{SIGHUP} to all jobs when an interactive
5119
login shell exits (@pxref{Signals}).
5121
@item interactive_comments
5122
Allow a word beginning with @samp{#}
5123
to cause that word and all remaining characters on that
5124
line to be ignored in an interactive shell.
5125
This option is enabled by default.
5128
If set, and job control is not active, the shell runs the last command of
5129
a pipeline not executed in the background in the current shell environment.
5132
If enabled, and the @code{cmdhist}
5133
option is enabled, multi-line commands are saved to the history with
5134
embedded newlines rather than using semicolon separators where possible.
5137
The shell sets this option if it is started as a login shell
5138
(@pxref{Invoking Bash}).
5139
The value may not be changed.
5142
If set, and a file that Bash is checking for mail has been
5143
accessed since the last time it was checked, the message
5144
@code{"The mail in @var{mailfile} has been read"} is displayed.
5146
@item no_empty_cmd_completion
5147
If set, and Readline is being used, Bash will not attempt to search
5148
the @env{PATH} for possible completions when completion is attempted
5152
If set, Bash matches filenames in a case-insensitive fashion when
5153
performing filename expansion.
5156
If set, Bash matches patterns in a case-insensitive fashion when
5157
performing matching while executing @code{case} or @code{[[}
5158
conditional commands.
5161
If set, Bash allows filename patterns which match no
5162
files to expand to a null string, rather than themselves.
5165
If set, the programmable completion facilities
5166
(@pxref{Programmable Completion}) are enabled.
5167
This option is enabled by default.
5170
If set, prompt strings undergo
5171
parameter expansion, command substitution, arithmetic
5172
expansion, and quote removal after being expanded
5173
as described below (@pxref{Controlling the Prompt}).
5174
This option is enabled by default.
5176
@item restricted_shell
5177
The shell sets this option if it is started in restricted mode
5178
(@pxref{The Restricted Shell}).
5179
The value may not be changed.
5180
This is not reset when the startup files are executed, allowing
5181
the startup files to discover whether or not a shell is restricted.
5184
If this is set, the @code{shift}
5185
builtin prints an error message when the shift count exceeds the
5186
number of positional parameters.
5189
If set, the @code{source} builtin uses the value of @env{PATH}
5190
to find the directory containing the file supplied as an argument.
5191
This option is enabled by default.
5194
If set, the @code{echo} builtin expands backslash-escape sequences
5200
The return status when listing options is zero if all @var{optnames}
5201
are enabled, non-zero otherwise.
5202
When setting or unsetting options, the return status is zero unless an
5203
@var{optname} is not a valid shell option.
5206
@node Special Builtins
5207
@section Special Builtins
5208
@cindex special builtin
5210
For historical reasons, the @sc{posix} standard has classified
5211
several builtin commands as @emph{special}.
5212
When Bash is executing in @sc{posix} mode, the special builtins
5213
differ from other builtin commands in three respects:
5217
Special builtins are found before shell functions during command lookup.
5220
If a special builtin returns an error status, a non-interactive shell exits.
5223
Assignment statements preceding the command stay in effect in the shell
5224
environment after the command completes.
5227
When Bash is not executing in @sc{posix} mode, these builtins behave no
5228
differently than the rest of the Bash builtin commands.
5229
The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}.
5231
These are the @sc{posix} special builtins:
5233
@w{break : . continue eval exec exit export readonly return set}
5234
@w{shift trap unset}
5237
@node Shell Variables
5238
@chapter Shell Variables
5241
* Bourne Shell Variables:: Variables which Bash uses in the same way
5242
as the Bourne Shell.
5243
* Bash Variables:: List of variables that exist in Bash.
5246
This chapter describes the shell variables that Bash uses.
5247
Bash automatically assigns default values to a number of variables.
5249
@node Bourne Shell Variables
5250
@section Bourne Shell Variables
5252
Bash uses certain shell variables in the same way as the Bourne shell.
5253
In some cases, Bash assigns a default value to the variable.
5258
A colon-separated list of directories used as a search path for
5259
the @code{cd} builtin command.
5262
The current user's home directory; the default for the @code{cd} builtin
5264
The value of this variable is also used by tilde expansion
5265
(@pxref{Tilde Expansion}).
5268
A list of characters that separate fields; used when the shell splits
5269
words as part of expansion.
5272
If this parameter is set to a filename or directory name
5273
and the @env{MAILPATH} variable
5274
is not set, Bash informs the user of the arrival of mail in
5275
the specified file or Maildir-format directory.
5278
A colon-separated list of filenames which the shell periodically checks
5280
Each list entry can specify the message that is printed when new mail
5281
arrives in the mail file by separating the filename from the message with
5283
When used in the text of the message, @code{$_} expands to the name of
5284
the current mail file.
5287
The value of the last option argument processed by the @code{getopts} builtin.
5290
The index of the last option argument processed by the @code{getopts} builtin.
5293
A colon-separated list of directories in which the shell looks for
5295
A zero-length (null) directory name in the value of @code{PATH} indicates the
5297
A null directory name may appear as two adjacent colons, or as an initial
5302
The primary prompt string. The default value is @samp{\s-\v\$ }.
5303
@xref{Controlling the Prompt}, for the complete list of escape
5304
sequences that are expanded before @env{PS1} is displayed.
5307
The secondary prompt string. The default value is @samp{> }.
5311
@node Bash Variables
5312
@section Bash Variables
5314
These variables are set or used by Bash, but other shells
5315
do not normally treat them specially.
5317
A few variables used by Bash are described in different chapters:
5318
variables for controlling the job control facilities
5319
(@pxref{Job Control Variables}).
5324
The full pathname used to execute the current instance of Bash.
5327
A colon-separated list of enabled shell options. Each word in
5328
the list is a valid argument for the @option{-s} option to the
5329
@code{shopt} builtin command (@pxref{The Shopt Builtin}).
5330
The options appearing in @env{BASHOPTS} are those reported
5331
as @samp{on} by @samp{shopt}.
5332
If this variable is in the environment when Bash
5333
starts up, each shell option in the list will be enabled before
5334
reading any startup files. This variable is readonly.
5337
Expands to the process ID of the current Bash process.
5338
This differs from @code{$$} under certain circumstances, such as subshells
5339
that do not require Bash to be re-initialized.
5342
An associative array variable whose members correspond to the internal
5343
list of aliases as maintained by the @code{alias} builtin.
5344
(@pxref{Bourne Shell Builtins}).
5345
Elements added to this array appear in the alias list; unsetting array
5346
elements cause aliases to be removed from the alias list.
5349
An array variable whose values are the number of parameters in each
5350
frame of the current bash execution call stack. The number of
5351
parameters to the current subroutine (shell function or script executed
5352
with @code{.} or @code{source}) is at the top of the stack. When a
5353
subroutine is executed, the number of parameters passed is pushed onto
5355
The shell sets @code{BASH_ARGC} only when in extended debugging mode
5356
(see @ref{The Shopt Builtin}
5357
for a description of the @code{extdebug} option to the @code{shopt}
5361
An array variable containing all of the parameters in the current bash
5362
execution call stack. The final parameter of the last subroutine call
5363
is at the top of the stack; the first parameter of the initial call is
5364
at the bottom. When a subroutine is executed, the parameters supplied
5365
are pushed onto @code{BASH_ARGV}.
5366
The shell sets @code{BASH_ARGV} only when in extended debugging mode
5367
(see @ref{The Shopt Builtin}
5368
for a description of the @code{extdebug} option to the @code{shopt}
5372
An associative array variable whose members correspond to the internal
5373
hash table of commands as maintained by the @code{hash} builtin
5374
(@pxref{Bourne Shell Builtins}).
5375
Elements added to this array appear in the hash table; unsetting array
5376
elements cause commands to be removed from the hash table.
5379
The command currently being executed or about to be executed, unless the
5380
shell is executing a command as the result of a trap,
5381
in which case it is the command executing at the time of the trap.
5384
The value is used to set the shell's compatibility level.
5385
@xref{The Shopt Builtin}, for a description of the various compatibility
5386
levels and their effects.
5387
The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
5388
corresponding to the desired compatibility level.
5389
If @code{BASH_COMPAT} is unset or set to the empty string, the compatibility
5390
level is set to the default for the current version.
5391
If @code{BASH_COMPAT} is set to a value that is not one of the valid
5392
compatibility levels, the shell prints an error message and sets the
5393
compatibility level to the default for the current version.
5394
The valid compatibility levels correspond to the compatibility options
5395
accepted by the @code{shopt} builtin described above (for example,
5396
@var{compat42} means that 4.2 and 42 are valid values).
5397
The current version is also a valid value.
5400
If this variable is set when Bash is invoked to execute a shell
5401
script, its value is expanded and used as the name of a startup file
5402
to read before executing the script. @xref{Bash Startup Files}.
5404
@item BASH_EXECUTION_STRING
5405
The command argument to the @option{-c} invocation option.
5408
An array variable whose members are the line numbers in source files
5409
where each corresponding member of @var{FUNCNAME} was invoked.
5410
@code{$@{BASH_LINENO[$i]@}} is the line number in the source file
5411
(@code{$@{BASH_SOURCE[$i+1]@}}) where
5412
@code{$@{FUNCNAME[$i]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if
5413
referenced within another shell function).
5414
Use @code{LINENO} to obtain the current line number.
5417
An array variable whose members are assigned by the @samp{=~} binary
5418
operator to the @code{[[} conditional command
5419
(@pxref{Conditional Constructs}).
5420
The element with index 0 is the portion of the string
5421
matching the entire regular expression.
5422
The element with index @var{n} is the portion of the
5423
string matching the @var{n}th parenthesized subexpression.
5424
This variable is read-only.
5427
An array variable whose members are the source filenames where the
5428
corresponding shell function names in the @code{FUNCNAME} array
5429
variable are defined.
5430
The shell function @code{$@{FUNCNAME[$i]@}} is defined in the file
5431
@code{$@{BASH_SOURCE[$i]@}} and called from @code{$@{BASH_SOURCE[$i+1]@}}
5434
Incremented by one within each subshell or subshell environment when
5435
the shell begins executing in that environment.
5436
The initial value is 0.
5439
A readonly array variable (@pxref{Arrays})
5440
whose members hold version information for this instance of Bash.
5441
The values assigned to the array members are as follows:
5445
@item BASH_VERSINFO[0]
5446
The major version number (the @var{release}).
5448
@item BASH_VERSINFO[1]
5449
The minor version number (the @var{version}).
5451
@item BASH_VERSINFO[2]
5454
@item BASH_VERSINFO[3]
5457
@item BASH_VERSINFO[4]
5458
The release status (e.g., @var{beta1}).
5460
@item BASH_VERSINFO[5]
5461
The value of @env{MACHTYPE}.
5465
The version number of the current instance of Bash.
5468
If set to an integer corresponding to a valid file descriptor, Bash
5469
will write the trace output generated when @samp{set -x}
5470
is enabled to that file descriptor.
5471
This allows tracing output to be separated from diagnostic and error
5473
The file descriptor is closed when @code{BASH_XTRACEFD} is unset or assigned
5475
Unsetting @code{BASH_XTRACEFD} or assigning it the empty string causes the
5476
trace output to be sent to the standard error.
5477
Note that setting @code{BASH_XTRACEFD} to 2 (the standard error file
5478
descriptor) and then unsetting it will result in the standard error
5482
Set the number of exited child status values for the shell to remember.
5483
Bash will not allow this value to be decreased below a @sc{posix}-mandated
5484
minimum, and there is a maximum value (currently 8192) that this may
5486
The minimum value is system-dependent.
5489
Used by the @code{select} command to determine the terminal width
5490
when printing selection lists.
5491
Automatically set if the @code{checkwinsize} option is enabled
5492
(@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a
5496
An index into @env{$@{COMP_WORDS@}} of the word containing the current
5498
This variable is available only in shell functions invoked by the
5499
programmable completion facilities (@pxref{Programmable Completion}).
5502
The current command line.
5503
This variable is available only in shell functions and external
5504
commands invoked by the
5505
programmable completion facilities (@pxref{Programmable Completion}).
5508
The index of the current cursor position relative to the beginning of
5509
the current command.
5510
If the current cursor position is at the end of the current command,
5511
the value of this variable is equal to @code{$@{#COMP_LINE@}}.
5512
This variable is available only in shell functions and external
5513
commands invoked by the
5514
programmable completion facilities (@pxref{Programmable Completion}).
5517
Set to an integer value corresponding to the type of completion attempted
5518
that caused a completion function to be called:
5519
@var{TAB}, for normal completion,
5520
@samp{?}, for listing completions after successive tabs,
5521
@samp{!}, for listing alternatives on partial word completion,
5522
@samp{@@}, to list completions if the word is not unmodified,
5524
@samp{%}, for menu completion.
5525
This variable is available only in shell functions and external
5526
commands invoked by the
5527
programmable completion facilities (@pxref{Programmable Completion}).
5530
The key (or final key of a key sequence) used to invoke the current
5531
completion function.
5533
@item COMP_WORDBREAKS
5534
The set of characters that the Readline library treats as word
5535
separators when performing word completion.
5536
If @code{COMP_WORDBREAKS} is unset, it loses its special properties,
5537
even if it is subsequently reset.
5540
An array variable consisting of the individual
5541
words in the current command line.
5542
The line is split into words as Readline would split it, using
5543
@code{COMP_WORDBREAKS} as described above.
5544
This variable is available only in shell functions invoked by the
5545
programmable completion facilities (@pxref{Programmable Completion}).
5548
An array variable from which Bash reads the possible completions
5549
generated by a shell function invoked by the programmable completion
5550
facility (@pxref{Programmable Completion}).
5551
Each array element contains one possible completion.
5554
An array variable created to hold the file descriptors
5555
for output from and input to an unnamed coprocess (@pxref{Coprocesses}).
5558
An array variable containing the current contents of the directory stack.
5559
Directories appear in the stack in the order they are displayed by the
5560
@code{dirs} builtin.
5561
Assigning to members of this array variable may be used to modify
5562
directories already in the stack, but the @code{pushd} and @code{popd}
5563
builtins must be used to add and remove directories.
5564
Assignment to this variable will not change the current directory.
5565
If @env{DIRSTACK} is unset, it loses its special properties, even if
5566
it is subsequently reset.
5569
If Bash finds this variable in the environment when the shell
5570
starts with value @samp{t}, it assumes that the shell is running in an
5571
Emacs shell buffer and disables line editing.
5574
Similar to @code{BASH_ENV}; used when the shell is invoked in
5575
@sc{posix} Mode (@pxref{Bash POSIX Mode}).
5578
The numeric effective user id of the current user. This variable
5582
The editor used as a default by the @option{-e} option to the @code{fc}
5586
A colon-separated list of suffixes to ignore when performing
5587
filename completion.
5588
A filename whose suffix matches one of the entries in
5590
is excluded from the list of matched filenames. A sample
5591
value is @samp{.o:~}
5594
An array variable containing the names of all shell functions
5595
currently in the execution call stack.
5596
The element with index 0 is the name of any currently-executing
5598
The bottom-most element (the one with the highest index)
5600
This variable exists only when a shell function is executing.
5601
Assignments to @env{FUNCNAME} have no effect and return an error status.
5602
If @env{FUNCNAME} is unset, it loses its special properties, even if
5603
it is subsequently reset.
5605
This variable can be used with @code{BASH_LINENO} and @code{BASH_SOURCE}.
5606
Each element of @code{FUNCNAME} has corresponding elements in
5607
@code{BASH_LINENO} and @code{BASH_SOURCE} to describe the call stack.
5608
For instance, @code{$@{FUNCNAME[$i]@}} was called from the file
5609
@code{$@{BASH_SOURCE[$i+1]@}} at line number @code{$@{BASH_LINENO[$i]@}}.
5610
The @code{caller} builtin displays the current call stack using this
5614
If set to a numeric value greater than 0, defines a maximum function
5615
nesting level. Function invocations that exceed this nesting level
5616
will cause the current command to abort.
5619
A colon-separated list of patterns defining the set of filenames to
5620
be ignored by filename expansion.
5621
If a filename matched by a filename expansion pattern also matches one
5622
of the patterns in @env{GLOBIGNORE}, it is removed from the list
5626
An array variable containing the list of groups of which the current
5628
Assignments to @env{GROUPS} have no effect and return an error status.
5629
If @env{GROUPS} is unset, it loses its special properties, even if it is
5633
Up to three characters which control history expansion, quick
5634
substitution, and tokenization (@pxref{History Interaction}).
5635
The first character is the
5636
@var{history expansion} character, that is, the character which signifies the
5637
start of a history expansion, normally @samp{!}. The second character is the
5638
character which signifies `quick substitution' when seen as the first
5639
character on a line, normally @samp{^}. The optional third character is the
5640
character which indicates that the remainder of the line is a comment when
5641
found as the first character of a word, usually @samp{#}. The history
5642
comment character causes history substitution to be skipped for the
5643
remaining words on the line. It does not necessarily cause the shell
5644
parser to treat the rest of the line as a comment.
5647
The history number, or index in the history list, of the current
5648
command. If @env{HISTCMD} is unset, it loses its special properties,
5649
even if it is subsequently reset.
5652
A colon-separated list of values controlling how commands are saved on
5654
If the list of values includes @samp{ignorespace}, lines which begin
5655
with a space character are not saved in the history list.
5656
A value of @samp{ignoredups} causes lines which match the previous
5657
history entry to not be saved.
5658
A value of @samp{ignoreboth} is shorthand for
5659
@samp{ignorespace} and @samp{ignoredups}.
5660
A value of @samp{erasedups} causes all previous lines matching the
5661
current line to be removed from the history list before that line
5663
Any value not in the above list is ignored.
5664
If @env{HISTCONTROL} is unset, or does not include a valid value,
5665
all lines read by the shell parser are saved on the history list,
5666
subject to the value of @env{HISTIGNORE}.
5667
The second and subsequent lines of a multi-line compound command are
5668
not tested, and are added to the history regardless of the value of
5672
The name of the file to which the command history is saved. The
5673
default value is @file{~/.bash_history}.
5676
The maximum number of lines contained in the history file.
5677
When this variable is assigned a value, the history file is truncated,
5678
if necessary, to contain no more than that number of lines
5679
by removing the oldest entries.
5680
The history file is also truncated to this size after
5681
writing it when a shell exits.
5682
If the value is 0, the history file is truncated to zero size.
5683
Non-numeric values and numeric values less than zero inhibit truncation.
5684
The shell sets the default value to the value of @env{HISTSIZE}
5685
after reading any startup files.
5688
A colon-separated list of patterns used to decide which command
5689
lines should be saved on the history list. Each pattern is
5690
anchored at the beginning of the line and must match the complete
5691
line (no implicit @samp{*} is appended). Each pattern is tested
5692
against the line after the checks specified by @env{HISTCONTROL}
5693
are applied. In addition to the normal shell pattern matching
5694
characters, @samp{&} matches the previous history line. @samp{&}
5695
may be escaped using a backslash; the backslash is removed
5696
before attempting a match.
5697
The second and subsequent lines of a multi-line compound command are
5698
not tested, and are added to the history regardless of the value of
5701
@env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}. A
5702
pattern of @samp{&} is identical to @code{ignoredups}, and a
5703
pattern of @samp{[ ]*} is identical to @code{ignorespace}.
5704
Combining these two patterns, separating them with a colon,
5705
provides the functionality of @code{ignoreboth}.
5708
The maximum number of commands to remember on the history list.
5709
If the value is 0, commands are not saved in the history list.
5710
Numeric values less than zero result in every command being saved
5711
on the history list (there is no limit).
5712
The shell sets the default value to 500 after reading any startup files.
5714
@item HISTTIMEFORMAT
5715
If this variable is set and not null, its value is used as a format string
5716
for @var{strftime} to print the time stamp associated with each history
5717
entry displayed by the @code{history} builtin.
5718
If this variable is set, time stamps are written to the history file so
5719
they may be preserved across shell sessions.
5720
This uses the history comment character to distinguish timestamps from
5721
other history lines.
5724
Contains the name of a file in the same format as @file{/etc/hosts} that
5725
should be read when the shell needs to complete a hostname.
5726
The list of possible hostname completions may be changed while the shell
5728
the next time hostname completion is attempted after the
5729
value is changed, Bash adds the contents of the new file to the
5731
If @env{HOSTFILE} is set, but has no value, or does not name a readable file,
5732
Bash attempts to read
5733
@file{/etc/hosts} to obtain the list of possible hostname completions.
5734
When @env{HOSTFILE} is unset, the hostname list is cleared.
5737
The name of the current host.
5740
A string describing the machine Bash is running on.
5743
Controls the action of the shell on receipt of an @code{EOF} character
5744
as the sole input. If set, the value denotes the number
5745
of consecutive @code{EOF} characters that can be read as the
5746
first character on an input line
5747
before the shell will exit. If the variable exists but does not
5748
have a numeric value (or has no value) then the default is 10.
5749
If the variable does not exist, then @code{EOF} signifies the end of
5750
input to the shell. This is only in effect for interactive shells.
5753
The name of the Readline initialization file, overriding the default
5754
of @file{~/.inputrc}.
5757
Used to determine the locale category for any category not specifically
5758
selected with a variable starting with @code{LC_}.
5761
This variable overrides the value of @env{LANG} and any other
5762
@code{LC_} variable specifying a locale category.
5765
This variable determines the collation order used when sorting the
5766
results of filename expansion, and
5767
determines the behavior of range expressions, equivalence classes,
5768
and collating sequences within filename expansion and pattern matching
5769
(@pxref{Filename Expansion}).
5772
This variable determines the interpretation of characters and the
5773
behavior of character classes within filename expansion and pattern
5774
matching (@pxref{Filename Expansion}).
5777
This variable determines the locale used to translate double-quoted
5778
strings preceded by a @samp{$} (@pxref{Locale Translation}).
5781
This variable determines the locale category used for number formatting.
5784
The line number in the script or shell function currently executing.
5787
Used by the @code{select} command to determine the column length
5788
for printing selection lists.
5789
Automatically set if the @code{checkwinsize} option is enabled
5790
(@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a
5794
A string that fully describes the system type on which Bash
5795
is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
5798
How often (in seconds) that the shell should check for mail in the
5799
files specified in the @env{MAILPATH} or @env{MAIL} variables.
5800
The default is 60 seconds. When it is time to check
5801
for mail, the shell does so before displaying the primary prompt.
5802
If this variable is unset, or set to a value that is not a number
5803
greater than or equal to zero, the shell disables mail checking.
5806
An array variable created to hold the text read by the
5807
@code{mapfile} builtin when no variable name is supplied.
5810
The previous working directory as set by the @code{cd} builtin.
5813
If set to the value 1, Bash displays error messages
5814
generated by the @code{getopts} builtin command.
5817
A string describing the operating system Bash is running on.
5820
An array variable (@pxref{Arrays})
5821
containing a list of exit status values from the processes
5822
in the most-recently-executed foreground pipeline (which may
5823
contain only a single command).
5825
@item POSIXLY_CORRECT
5826
If this variable is in the environment when Bash starts, the shell
5827
enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the
5828
startup files, as if the @option{--posix} invocation option had been supplied.
5829
If it is set while the shell is running, Bash enables @sc{posix} mode,
5838
The process @sc{id} of the shell's parent process. This variable
5841
@item PROMPT_COMMAND
5842
If set, the value is interpreted as a command to execute
5843
before the printing of each primary prompt (@env{$PS1}).
5845
@item PROMPT_DIRTRIM
5846
If set to a number greater than zero, the value is used as the number of
5847
trailing directory components to retain when expanding the @code{\w} and
5848
@code{\W} prompt string escapes (@pxref{Controlling the Prompt}).
5849
Characters removed are replaced with an ellipsis.
5852
The value of this variable is used as the prompt for the
5853
@code{select} command. If this variable is not set, the
5854
@code{select} command prompts with @samp{#? }
5857
The value is the prompt printed before the command line is echoed
5858
when the @option{-x} option is set (@pxref{The Set Builtin}).
5859
The first character of @env{PS4} is replicated multiple times, as
5860
necessary, to indicate multiple levels of indirection.
5861
The default is @samp{+ }.
5864
The current working directory as set by the @code{cd} builtin.
5867
Each time this parameter is referenced, a random integer
5868
between 0 and 32767 is generated. Assigning a value to this
5869
variable seeds the random number generator.
5872
The contents of the Readline line buffer, for use
5873
with @samp{bind -x} (@pxref{Bash Builtins}).
5875
@item READLINE_POINT
5876
The position of the insertion point in the Readline line buffer, for use
5877
with @samp{bind -x} (@pxref{Bash Builtins}).
5880
The default variable for the @code{read} builtin.
5883
This variable expands to the number of seconds since the
5884
shell was started. Assignment to this variable resets
5885
the count to the value assigned, and the expanded value
5886
becomes the value assigned plus the number of seconds
5887
since the assignment.
5890
The full pathname to the shell is kept in this environment variable.
5891
If it is not set when the shell starts,
5892
Bash assigns to it the full pathname of the current user's login shell.
5895
A colon-separated list of enabled shell options. Each word in
5896
the list is a valid argument for the @option{-o} option to the
5897
@code{set} builtin command (@pxref{The Set Builtin}).
5898
The options appearing in @env{SHELLOPTS} are those reported
5899
as @samp{on} by @samp{set -o}.
5900
If this variable is in the environment when Bash
5901
starts up, each shell option in the list will be enabled before
5902
reading any startup files. This variable is readonly.
5905
Incremented by one each time a new instance of Bash is started. This is
5906
intended to be a count of how deeply your Bash shells are nested.
5909
The value of this parameter is used as a format string specifying
5910
how the timing information for pipelines prefixed with the @code{time}
5911
reserved word should be displayed.
5912
The @samp{%} character introduces an
5913
escape sequence that is expanded to a time value or other
5915
The escape sequences and their meanings are as
5916
follows; the braces denote optional portions.
5923
@item %[@var{p}][l]R
5924
The elapsed time in seconds.
5926
@item %[@var{p}][l]U
5927
The number of CPU seconds spent in user mode.
5929
@item %[@var{p}][l]S
5930
The number of CPU seconds spent in system mode.
5933
The CPU percentage, computed as (%U + %S) / %R.
5936
The optional @var{p} is a digit specifying the precision, the number of
5937
fractional digits after a decimal point.
5938
A value of 0 causes no decimal point or fraction to be output.
5939
At most three places after the decimal point may be specified; values
5940
of @var{p} greater than 3 are changed to 3.
5941
If @var{p} is not specified, the value 3 is used.
5943
The optional @code{l} specifies a longer format, including minutes, of
5944
the form @var{MM}m@var{SS}.@var{FF}s.
5945
The value of @var{p} determines whether or not the fraction is included.
5947
If this variable is not set, Bash acts as if it had the value
5949
@code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'}
5951
If the value is null, no timing information is displayed.
5952
A trailing newline is added when the format string is displayed.
5955
If set to a value greater than zero, @code{TMOUT} is treated as the
5956
default timeout for the @code{read} builtin (@pxref{Bash Builtins}).
5957
The @code{select} command (@pxref{Conditional Constructs}) terminates
5958
if input does not arrive after @code{TMOUT} seconds when input is coming
5961
In an interactive shell, the value is interpreted as
5962
the number of seconds to wait for a line of input after issuing
5965
terminates after waiting for that number of seconds if a complete
5966
line of input does not arrive.
5969
If set, Bash uses its value as the name of a directory in which
5970
Bash creates temporary files for the shell's use.
5973
The numeric real user id of the current user. This variable is readonly.
5978
@chapter Bash Features
5980
This chapter describes features unique to Bash.
5983
* Invoking Bash:: Command line options that you can give
5985
* Bash Startup Files:: When and how Bash executes scripts.
5986
* Interactive Shells:: What an interactive shell is.
5987
* Bash Conditional Expressions:: Primitives used in composing expressions for
5988
the @code{test} builtin.
5989
* Shell Arithmetic:: Arithmetic on shell variables.
5990
* Aliases:: Substituting one command for another.
5991
* Arrays:: Array Variables.
5992
* The Directory Stack:: History of visited directories.
5993
* Controlling the Prompt:: Customizing the various prompt strings.
5994
* The Restricted Shell:: A more controlled mode of shell execution.
5995
* Bash POSIX Mode:: Making Bash behave more closely to what
5996
the POSIX standard specifies.
6000
@section Invoking Bash
6003
bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
6004
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}]
6005
bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
6008
All of the single-character options used with the @code{set} builtin
6009
(@pxref{The Set Builtin}) can be used as options when the shell is invoked.
6010
In addition, there are several multi-character
6011
options that you can use. These options must appear on the command
6012
line before the single-character options to be recognized.
6016
Arrange for the debugger profile to be executed before the shell
6017
starts. Turns on extended debugging mode (see @ref{The Shopt Builtin}
6018
for a description of the @code{extdebug} option to the @code{shopt}
6021
@item --dump-po-strings
6022
A list of all double-quoted strings preceded by @samp{$}
6023
is printed on the standard output
6024
in the @sc{gnu} @code{gettext} PO (portable object) file format.
6025
Equivalent to @option{-D} except for the output format.
6027
@item --dump-strings
6028
Equivalent to @option{-D}.
6031
Display a usage message on standard output and exit successfully.
6033
@item --init-file @var{filename}
6034
@itemx --rcfile @var{filename}
6035
Execute commands from @var{filename} (instead of @file{~/.bashrc})
6036
in an interactive shell.
6039
Equivalent to @option{-l}.
6042
Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing})
6043
to read command lines when the shell is interactive.
6046
Don't load the system-wide startup file @file{/etc/profile}
6047
or any of the personal initialization files
6048
@file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile}
6049
when Bash is invoked as a login shell.
6052
Don't read the @file{~/.bashrc} initialization file in an
6053
interactive shell. This is on by default if the shell is
6054
invoked as @code{sh}.
6057
Change the behavior of Bash where the default operation differs
6058
from the @sc{posix} standard to match the standard. This
6059
is intended to make Bash behave as a strict superset of that
6060
standard. @xref{Bash POSIX Mode}, for a description of the Bash
6064
Make the shell a restricted shell (@pxref{The Restricted Shell}).
6067
Equivalent to @option{-v}. Print shell input lines as they're read.
6070
Show version information for this instance of
6071
Bash on the standard output and exit successfully.
6074
There are several single-character options that may be supplied at
6075
invocation which are not available with the @code{set} builtin.
6079
Read and execute commands from the first non-option @var{argument}
6080
after processing the options, then exit.
6081
Any remaining arguments are assigned to the
6082
positional parameters, starting with @code{$0}.
6085
Force the shell to run interactively. Interactive shells are
6086
described in @ref{Interactive Shells}.
6089
Make this shell act as if it had been directly invoked by login.
6090
When the shell is interactive, this is equivalent to starting a
6091
login shell with @samp{exec -l bash}.
6092
When the shell is not interactive, the login shell startup files will
6094
@samp{exec bash -l} or @samp{exec bash --login}
6095
will replace the current shell with a Bash login shell.
6096
@xref{Bash Startup Files}, for a description of the special behavior
6100
Make the shell a restricted shell (@pxref{The Restricted Shell}).
6103
If this option is present, or if no arguments remain after option
6104
processing, then commands are read from the standard input.
6105
This option allows the positional parameters to be set
6106
when invoking an interactive shell.
6109
A list of all double-quoted strings preceded by @samp{$}
6110
is printed on the standard output.
6111
These are the strings that
6112
are subject to language translation when the current locale
6113
is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
6114
This implies the @option{-n} option; no commands will be executed.
6116
@item [-+]O [@var{shopt_option}]
6117
@var{shopt_option} is one of the shell options accepted by the
6118
@code{shopt} builtin (@pxref{The Shopt Builtin}).
6119
If @var{shopt_option} is present, @option{-O} sets the value of that option;
6120
@option{+O} unsets it.
6121
If @var{shopt_option} is not supplied, the names and values of the shell
6122
options accepted by @code{shopt} are printed on the standard output.
6123
If the invocation option is @option{+O}, the output is displayed in a format
6124
that may be reused as input.
6127
A @code{--} signals the end of options and disables further option
6129
Any arguments after the @code{--} are treated as filenames and arguments.
6133
A @emph{login} shell is one whose first character of argument zero is
6134
@samp{-}, or one invoked with the @option{--login} option.
6136
@cindex interactive shell
6137
An @emph{interactive} shell is one started without non-option arguments,
6138
unless @option{-s} is specified,
6139
without specifying the @option{-c} option, and whose input and output are both
6140
connected to terminals (as determined by @code{isatty(3)}), or one
6141
started with the @option{-i} option. @xref{Interactive Shells}, for more
6144
If arguments remain after option processing, and neither the
6145
@option{-c} nor the @option{-s}
6146
option has been supplied, the first argument is assumed to
6147
be the name of a file containing shell commands (@pxref{Shell Scripts}).
6148
When Bash is invoked in this fashion, @code{$0}
6149
is set to the name of the file, and the positional parameters
6150
are set to the remaining arguments.
6151
Bash reads and executes commands from this file, then exits.
6152
Bash's exit status is the exit status of the last command executed
6153
in the script. If no commands are executed, the exit status is 0.
6155
@node Bash Startup Files
6156
@section Bash Startup Files
6157
@cindex startup files
6159
This section describes how Bash executes its startup files.
6160
If any of the files exist but cannot be read, Bash reports an error.
6161
Tildes are expanded in filenames as described above under
6162
Tilde Expansion (@pxref{Tilde Expansion}).
6164
Interactive shells are described in @ref{Interactive Shells}.
6166
@subsubheading Invoked as an interactive login shell, or with @option{--login}
6168
When Bash is invoked as an interactive login shell, or as a
6169
non-interactive shell with the @option{--login} option, it first reads and
6170
executes commands from the file @file{/etc/profile}, if that file exists.
6171
After reading that file, it looks for @file{~/.bash_profile},
6172
@file{~/.bash_login}, and @file{~/.profile}, in that order, and reads
6173
and executes commands from the first one that exists and is readable.
6174
The @option{--noprofile} option may be used when the shell is started to
6175
inhibit this behavior.
6177
When a login shell exits, Bash reads and executes commands from
6178
the file @file{~/.bash_logout}, if it exists.
6180
@subsubheading Invoked as an interactive non-login shell
6182
When an interactive shell that is not a login shell is started, Bash
6183
reads and executes commands from @file{~/.bashrc}, if that file exists.
6184
This may be inhibited by using the @option{--norc} option.
6185
The @option{--rcfile @var{file}} option will force Bash to read and
6186
execute commands from @var{file} instead of @file{~/.bashrc}.
6188
So, typically, your @file{~/.bash_profile} contains the line
6190
@code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi}
6193
after (or before) any login-specific initializations.
6195
@subsubheading Invoked non-interactively
6197
When Bash is started non-interactively, to run a shell script,
6198
for example, it looks for the variable @env{BASH_ENV} in the environment,
6199
expands its value if it appears there, and uses the expanded value as
6200
the name of a file to read and execute. Bash behaves as if the
6201
following command were executed:
6203
@code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi}
6206
but the value of the @env{PATH} variable is not used to search for the
6209
As noted above, if a non-interactive shell is invoked with the
6210
@option{--login} option, Bash attempts to read and execute commands from the
6211
login shell startup files.
6213
@subsubheading Invoked with name @code{sh}
6215
If Bash is invoked with the name @code{sh}, it tries to mimic the
6216
startup behavior of historical versions of @code{sh} as closely as
6217
possible, while conforming to the @sc{posix} standard as well.
6219
When invoked as an interactive login shell, or as a non-interactive
6220
shell with the @option{--login} option, it first attempts to read
6221
and execute commands from @file{/etc/profile} and @file{~/.profile}, in
6223
The @option{--noprofile} option may be used to inhibit this behavior.
6224
When invoked as an interactive shell with the name @code{sh}, Bash
6225
looks for the variable @env{ENV}, expands its value if it is defined,
6226
and uses the expanded value as the name of a file to read and execute.
6227
Since a shell invoked as @code{sh} does not attempt to read and execute
6228
commands from any other startup files, the @option{--rcfile} option has
6230
A non-interactive shell invoked with the name @code{sh} does not attempt
6231
to read any other startup files.
6233
When invoked as @code{sh}, Bash enters @sc{posix} mode after
6234
the startup files are read.
6236
@subsubheading Invoked in @sc{posix} mode
6238
When Bash is started in @sc{posix} mode, as with the
6239
@option{--posix} command line option, it follows the @sc{posix} standard
6241
In this mode, interactive shells expand the @env{ENV} variable
6242
and commands are read and executed from the file whose name is the
6244
No other startup files are read.
6246
@subsubheading Invoked by remote shell daemon
6248
Bash attempts to determine when it is being run with its standard input
6249
connected to a network connection, as when executed by the remote shell
6250
daemon, usually @code{rshd}, or the secure shell daemon @code{sshd}.
6251
If Bash determines it is being run in
6252
this fashion, it reads and executes commands from @file{~/.bashrc}, if that
6253
file exists and is readable.
6254
It will not do this if invoked as @code{sh}.
6255
The @option{--norc} option may be used to inhibit this behavior, and the
6256
@option{--rcfile} option may be used to force another file to be read, but
6257
neither @code{rshd} nor @code{sshd} generally invoke the shell with those
6258
options or allow them to be specified.
6260
@subsubheading Invoked with unequal effective and real @sc{uid/gid}s
6262
If Bash is started with the effective user (group) id not equal to the
6263
real user (group) id, and the @option{-p} option is not supplied, no startup
6264
files are read, shell functions are not inherited from the environment,
6265
the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH}, and @env{GLOBIGNORE}
6266
variables, if they appear in the environment, are ignored, and the effective
6267
user id is set to the real user id.
6268
If the @option{-p} option is supplied at invocation, the startup behavior is
6269
the same, but the effective user id is not reset.
6271
@node Interactive Shells
6272
@section Interactive Shells
6273
@cindex interactive shell
6274
@cindex shell, interactive
6277
* What is an Interactive Shell?:: What determines whether a shell is Interactive.
6278
* Is this Shell Interactive?:: How to tell if a shell is interactive.
6279
* Interactive Shell Behavior:: What changes in a interactive shell?
6282
@node What is an Interactive Shell?
6283
@subsection What is an Interactive Shell?
6285
An interactive shell
6286
is one started without non-option arguments, unless @option{-s} is
6287
specified, without specifying the @option{-c} option, and
6288
whose input and error output are both
6289
connected to terminals (as determined by @code{isatty(3)}),
6290
or one started with the @option{-i} option.
6292
An interactive shell generally reads from and writes to a user's
6295
The @option{-s} invocation option may be used to set the positional parameters
6296
when an interactive shell is started.
6298
@node Is this Shell Interactive?
6299
@subsection Is this Shell Interactive?
6301
To determine within a startup script whether or not Bash is
6302
running interactively,
6303
test the value of the @samp{-} special parameter.
6304
It contains @code{i} when the shell is interactive. For example:
6308
*i*) echo This shell is interactive ;;
6309
*) echo This shell is not interactive ;;
6313
Alternatively, startup scripts may examine the variable
6314
@env{PS1}; it is unset in non-interactive shells, and set in
6315
interactive shells. Thus:
6318
if [ -z "$PS1" ]; then
6319
echo This shell is not interactive
6321
echo This shell is interactive
6325
@node Interactive Shell Behavior
6326
@subsection Interactive Shell Behavior
6328
When the shell is running interactively, it changes its behavior in
6333
Startup files are read and executed as described in @ref{Bash Startup Files}.
6336
Job Control (@pxref{Job Control}) is enabled by default. When job
6337
control is in effect, Bash ignores the keyboard-generated job control
6338
signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
6341
Bash expands and displays @env{PS1} before reading the first line
6342
of a command, and expands and displays @env{PS2} before reading the
6343
second and subsequent lines of a multi-line command.
6346
Bash executes the value of the @env{PROMPT_COMMAND} variable as a command
6347
before printing the primary prompt, @env{$PS1}
6348
(@pxref{Bash Variables}).
6351
Readline (@pxref{Command Line Editing}) is used to read commands from
6352
the user's terminal.
6355
Bash inspects the value of the @code{ignoreeof} option to @code{set -o}
6356
instead of exiting immediately when it receives an @code{EOF} on its
6357
standard input when reading a command (@pxref{The Set Builtin}).
6360
Command history (@pxref{Bash History Facilities})
6361
and history expansion (@pxref{History Interaction})
6362
are enabled by default.
6363
Bash will save the command history to the file named by @env{$HISTFILE}
6364
when a shell with history enabled exits.
6367
Alias expansion (@pxref{Aliases}) is performed by default.
6370
In the absence of any traps, Bash ignores @code{SIGTERM}
6374
In the absence of any traps, @code{SIGINT} is caught and handled
6376
@code{SIGINT} will interrupt some shell builtins.
6379
An interactive login shell sends a @code{SIGHUP} to all jobs on exit
6380
if the @code{huponexit} shell option has been enabled (@pxref{Signals}).
6383
The @option{-n} invocation option is ignored, and @samp{set -n} has
6384
no effect (@pxref{The Set Builtin}).
6387
Bash will check for mail periodically, depending on the values of the
6388
@env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables
6389
(@pxref{Bash Variables}).
6392
Expansion errors due to references to unbound shell variables after
6393
@samp{set -u} has been enabled will not cause the shell to exit
6394
(@pxref{The Set Builtin}).
6397
The shell will not exit on expansion errors caused by @var{var} being unset
6398
or null in @code{$@{@var{var}:?@var{word}@}} expansions
6399
(@pxref{Shell Parameter Expansion}).
6402
Redirection errors encountered by shell builtins will not cause the
6406
When running in @sc{posix} mode, a special builtin returning an error
6407
status will not cause the shell to exit (@pxref{Bash POSIX Mode}).
6410
A failed @code{exec} will not cause the shell to exit
6411
(@pxref{Bourne Shell Builtins}).
6414
Parser syntax errors will not cause the shell to exit.
6417
Simple spelling correction for directory arguments to the @code{cd}
6418
builtin is enabled by default (see the description of the @code{cdspell}
6419
option to the @code{shopt} builtin in @ref{The Shopt Builtin}).
6422
The shell will check the value of the @env{TMOUT} variable and exit
6423
if a command is not read within the specified number of seconds after
6424
printing @env{$PS1} (@pxref{Bash Variables}).
6428
@node Bash Conditional Expressions
6429
@section Bash Conditional Expressions
6430
@cindex expressions, conditional
6432
Conditional expressions are used by the @code{[[} compound command
6433
and the @code{test} and @code{[} builtin commands.
6435
Expressions may be unary or binary.
6436
Unary expressions are often used to examine the status of a file.
6437
There are string operators and numeric comparison operators as well.
6438
If the @var{file} argument to one of the primaries is of the form
6439
@file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked.
6440
If the @var{file} argument to one of the primaries is one of
6441
@file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file
6442
descriptor 0, 1, or 2, respectively, is checked.
6444
When used with @code{[[}, the @samp{<} and @samp{>} operators sort
6445
lexicographically using the current locale.
6446
The @code{test} command uses ASCII ordering.
6448
Unless otherwise specified, primaries that operate on files follow symbolic
6449
links and operate on the target of the link, rather than the link itself.
6451
See the description of the @code{test} builtin command (section
6452
@pxref{Bash Builtins} below) for the handling of parameters
6453
(i.e. missing parameters).
6457
True if @var{file} exists.
6460
True if @var{file} exists and is a block special file.
6463
True if @var{file} exists and is a character special file.
6466
True if @var{file} exists and is a directory.
6469
True if @var{file} exists.
6472
True if @var{file} exists and is a regular file.
6475
True if @var{file} exists and its set-group-id bit is set.
6478
True if @var{file} exists and is a symbolic link.
6481
True if @var{file} exists and its "sticky" bit is set.
6484
True if @var{file} exists and is a named pipe (FIFO).
6487
True if @var{file} exists and is readable.
6490
True if @var{file} exists and has a size greater than zero.
6493
True if file descriptor @var{fd} is open and refers to a terminal.
6496
True if @var{file} exists and its set-user-id bit is set.
6499
True if @var{file} exists and is writable.
6502
True if @var{file} exists and is executable.
6505
True if @var{file} exists and is owned by the effective group id.
6508
True if @var{file} exists and is a symbolic link.
6511
True if @var{file} exists and has been modified since it was last read.
6514
True if @var{file} exists and is owned by the effective user id.
6517
True if @var{file} exists and is a socket.
6519
@item @var{file1} -ef @var{file2}
6520
True if @var{file1} and @var{file2} refer to the same device and
6523
@item @var{file1} -nt @var{file2}
6524
True if @var{file1} is newer (according to modification date)
6525
than @var{file2}, or if @var{file1} exists and @var{file2} does not.
6527
@item @var{file1} -ot @var{file2}
6528
True if @var{file1} is older than @var{file2},
6529
or if @var{file2} exists and @var{file1} does not.
6531
@item -o @var{optname}
6532
True if the shell option @var{optname} is enabled.
6533
The list of options appears in the description of the @option{-o}
6534
option to the @code{set} builtin (@pxref{The Set Builtin}).
6536
@item -v @var{varname}
6537
True if the shell variable @var{varname} is set (has been assigned a value).
6539
@item -R @var{varname}
6540
True if the shell variable @var{varname} is set and is a name reference.
6542
@item -z @var{string}
6543
True if the length of @var{string} is zero.
6545
@item -n @var{string}
6547
True if the length of @var{string} is non-zero.
6549
@item @var{string1} == @var{string2}
6550
@itemx @var{string1} = @var{string2}
6551
True if the strings are equal.
6552
When used with the @code{[[} command, this performs pattern matching as
6553
described above (@pxref{Conditional Constructs}).
6555
@samp{=} should be used with the @code{test} command for @sc{posix} conformance.
6557
@item @var{string1} != @var{string2}
6558
True if the strings are not equal.
6560
@item @var{string1} < @var{string2}
6561
True if @var{string1} sorts before @var{string2} lexicographically.
6563
@item @var{string1} > @var{string2}
6564
True if @var{string1} sorts after @var{string2} lexicographically.
6566
@item @var{arg1} OP @var{arg2}
6568
@samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}.
6569
These arithmetic binary operators return true if @var{arg1}
6570
is equal to, not equal to, less than, less than or equal to,
6571
greater than, or greater than or equal to @var{arg2},
6572
respectively. @var{Arg1} and @var{arg2}
6573
may be positive or negative integers.
6576
@node Shell Arithmetic
6577
@section Shell Arithmetic
6578
@cindex arithmetic, shell
6579
@cindex shell arithmetic
6580
@cindex expressions, arithmetic
6581
@cindex evaluation, arithmetic
6582
@cindex arithmetic evaluation
6584
The shell allows arithmetic expressions to be evaluated, as one of
6585
the shell expansions or by the @code{let} and the @option{-i} option
6586
to the @code{declare} builtins.
6588
Evaluation is done in fixed-width integers with no check for overflow,
6589
though division by 0 is trapped and flagged as an error.
6590
The operators and their precedence, associativity, and values
6591
are the same as in the C language.
6592
The following list of operators is grouped into levels of
6593
equal-precedence operators.
6594
The levels are listed in order of decreasing precedence.
6598
@item @var{id}++ @var{id}--
6599
variable post-increment and post-decrement
6601
@item ++@var{id} --@var{id}
6602
variable pre-increment and pre-decrement
6605
unary minus and plus
6608
logical and bitwise negation
6614
multiplication, division, remainder
6617
addition, subtraction
6620
left and right bitwise shifts
6626
equality and inequality
6632
bitwise exclusive OR
6643
@item expr ? expr : expr
6644
conditional operator
6646
@item = *= /= %= += -= <<= >>= &= ^= |=
6653
Shell variables are allowed as operands; parameter expansion is
6654
performed before the expression is evaluated.
6655
Within an expression, shell variables may also be referenced by name
6656
without using the parameter expansion syntax.
6657
A shell variable that is null or unset evaluates to 0 when referenced
6658
by name without using the parameter expansion syntax.
6659
The value of a variable is evaluated as an arithmetic expression
6660
when it is referenced, or when a variable which has been given the
6661
@var{integer} attribute using @samp{declare -i} is assigned a value.
6662
A null value evaluates to 0.
6663
A shell variable need not have its @var{integer} attribute turned on
6664
to be used in an expression.
6666
Constants with a leading 0 are interpreted as octal numbers.
6667
A leading @samp{0x} or @samp{0X} denotes hexadecimal. Otherwise,
6668
numbers take the form [@var{base}@code{#}]@var{n}, where the optional @var{base}
6669
is a decimal number between 2 and 64 representing the arithmetic
6670
base, and @var{n} is a number in that base.
6671
If @var{base}@code{#} is omitted, then base 10 is used.
6672
When specifying @var{n},
6673
he digits greater than 9 are represented by the lowercase letters,
6674
the uppercase letters, @samp{@@}, and @samp{_}, in that order.
6675
If @var{base} is less than or equal to 36, lowercase and uppercase
6676
letters may be used interchangeably to represent numbers between 10
6679
Operators are evaluated in order of precedence. Sub-expressions in
6680
parentheses are evaluated first and may override the precedence
6685
@cindex alias expansion
6687
@var{Aliases} allow a string to be substituted for a word when it is used
6688
as the first word of a simple command.
6689
The shell maintains a list of aliases that may be set and unset with
6690
the @code{alias} and @code{unalias} builtin commands.
6692
The first word of each simple command, if unquoted, is checked to see
6694
If so, that word is replaced by the text of the alias.
6695
The characters @samp{/}, @samp{$}, @samp{`}, @samp{=} and any of the
6696
shell metacharacters or quoting characters listed above may not appear
6698
The replacement text may contain any valid
6699
shell input, including shell metacharacters.
6700
The first word of the replacement text is tested for
6701
aliases, but a word that is identical to an alias being expanded
6702
is not expanded a second time.
6703
This means that one may alias @code{ls} to @code{"ls -F"},
6704
for instance, and Bash does not try to recursively expand the
6706
If the last character of the alias value is a
6707
@var{blank}, then the next command word following the
6708
alias is also checked for alias expansion.
6710
Aliases are created and listed with the @code{alias}
6711
command, and removed with the @code{unalias} command.
6713
There is no mechanism for using arguments in the replacement text,
6715
If arguments are needed, a shell function should be used
6716
(@pxref{Shell Functions}).
6718
Aliases are not expanded when the shell is not interactive,
6719
unless the @code{expand_aliases} shell option is set using
6720
@code{shopt} (@pxref{The Shopt Builtin}).
6722
The rules concerning the definition and use of aliases are
6723
somewhat confusing. Bash
6724
always reads at least one complete line
6725
of input before executing any
6726
of the commands on that line. Aliases are expanded when a
6727
command is read, not when it is executed. Therefore, an
6728
alias definition appearing on the same line as another
6729
command does not take effect until the next line of input is read.
6730
The commands following the alias definition
6731
on that line are not affected by the new alias.
6732
This behavior is also an issue when functions are executed.
6733
Aliases are expanded when a function definition is read,
6734
not when the function is executed, because a function definition
6735
is itself a compound command. As a consequence, aliases
6736
defined in a function are not available until after that
6737
function is executed. To be safe, always put
6738
alias definitions on a separate line, and do not use @code{alias}
6739
in compound commands.
6741
For almost every purpose, shell functions are preferred over aliases.
6747
Bash provides one-dimensional indexed and associative array variables.
6748
Any variable may be used as an indexed array;
6749
the @code{declare} builtin will explicitly declare an array.
6751
limit on the size of an array, nor any requirement that members
6752
be indexed or assigned contiguously.
6753
Indexed arrays are referenced using integers (including arithmetic
6754
expressions (@pxref{Shell Arithmetic})) and are zero-based;
6755
associative arrays use arbitrary strings.
6756
Unless otherwise noted, indexed array indices must be non-negative integers.
6758
An indexed array is created automatically if any variable is assigned to
6761
@var{name}[@var{subscript}]=@var{value}
6766
is treated as an arithmetic expression that must evaluate to a number.
6767
To explicitly declare an array, use
6769
declare -a @var{name}
6774
declare -a @var{name}[@var{subscript}]
6777
is also accepted; the @var{subscript} is ignored.
6780
Associative arrays are created using
6782
declare -A @var{name}.
6786
specified for an array variable using the @code{declare} and
6787
@code{readonly} builtins. Each attribute applies to all members of
6790
Arrays are assigned to using compound assignments of the form
6792
@var{name}=(@var{value1} @var{value2} @dots{} )
6796
@var{value} is of the form @code{[@var{subscript}]=}@var{string}.
6797
Indexed array assignments do not require anything but @var{string}.
6798
When assigning to indexed arrays, if
6799
the optional subscript is supplied, that index is assigned to;
6800
otherwise the index of the element assigned is the last index assigned
6801
to by the statement plus one. Indexing starts at zero.
6803
When assigning to an associative array, the subscript is required.
6805
This syntax is also accepted by the @code{declare}
6806
builtin. Individual array elements may be assigned to using the
6807
@code{@var{name}[@var{subscript}]=@var{value}} syntax introduced above.
6809
When assigning to an indexed array, if @var{name}
6810
is subscripted by a negative number, that number is
6811
interpreted as relative to one greater than the maximum index of
6812
@var{name}, so negative indices count back from the end of the
6813
array, and an index of -1 references the last element.
6815
Any element of an array may be referenced using
6816
@code{$@{@var{name}[@var{subscript}]@}}.
6817
The braces are required to avoid
6818
conflicts with the shell's filename expansion operators. If the
6819
@var{subscript} is @samp{@@} or @samp{*}, the word expands to all members
6820
of the array @var{name}. These subscripts differ only when the word
6821
appears within double quotes.
6822
If the word is double-quoted,
6823
@code{$@{@var{name}[*]@}} expands to a single word with
6824
the value of each array member separated by the first character of the
6825
@env{IFS} variable, and @code{$@{@var{name}[@@]@}} expands each element of
6826
@var{name} to a separate word. When there are no array members,
6827
@code{$@{@var{name}[@@]@}} expands to nothing.
6828
If the double-quoted expansion occurs within a word, the expansion of
6829
the first parameter is joined with the beginning part of the original
6830
word, and the expansion of the last parameter is joined with the last
6831
part of the original word.
6832
This is analogous to the
6833
expansion of the special parameters @samp{@@} and @samp{*}.
6834
@code{$@{#@var{name}[@var{subscript}]@}} expands to the length of
6835
@code{$@{@var{name}[@var{subscript}]@}}.
6836
If @var{subscript} is @samp{@@} or
6837
@samp{*}, the expansion is the number of elements in the array.
6838
Referencing an array variable without a subscript is equivalent to
6839
referencing with a subscript of 0.
6840
If the @var{subscript}
6841
used to reference an element of an indexed array
6842
evaluates to a number less than zero, it is
6843
interpreted as relative to one greater than the maximum index of the array,
6844
so negative indices count back from the end of the array,
6845
and an index of -1 refers to the last element.
6847
An array variable is considered set if a subscript has been assigned a
6848
value. The null string is a valid value.
6850
It is possible to obtain the keys (indices) of an array as well as the values.
6851
$@{!@var{name}[@@]@} and $@{!@var{name}[*]@} expand to the indices
6852
assigned in array variable @var{name}.
6853
The treatment when in double quotes is similar to the expansion of the
6854
special parameters @samp{@@} and @samp{*} within double quotes.
6856
The @code{unset} builtin is used to destroy arrays.
6857
@code{unset @var{name}[@var{subscript}]}
6858
destroys the array element at index @var{subscript}.
6859
Negative subscripts to indexed arrays are interpreted as described above.
6860
Care must be taken to avoid unwanted side effects caused by filename
6862
@code{unset @var{name}}, where @var{name} is an array, removes the
6863
entire array. A subscript of @samp{*} or @samp{@@} also removes the
6866
The @code{declare}, @code{local}, and @code{readonly}
6867
builtins each accept a @option{-a} option to specify an indexed
6868
array and a @option{-A} option to specify an associative array.
6869
If both options are supplied, @option{-A} takes precedence.
6870
The @code{read} builtin accepts a @option{-a}
6871
option to assign a list of words read from the standard input
6872
to an array, and can read values from the standard input into
6873
individual array elements. The @code{set} and @code{declare}
6874
builtins display array values in a way that allows them to be
6877
@node The Directory Stack
6878
@section The Directory Stack
6879
@cindex directory stack
6882
* Directory Stack Builtins:: Bash builtin commands to manipulate
6883
the directory stack.
6886
The directory stack is a list of recently-visited directories. The
6887
@code{pushd} builtin adds directories to the stack as it changes
6888
the current directory, and the @code{popd} builtin removes specified
6889
directories from the stack and changes the current directory to
6890
the directory removed. The @code{dirs} builtin displays the contents
6891
of the directory stack.
6893
The contents of the directory stack are also visible
6894
as the value of the @env{DIRSTACK} shell variable.
6896
@node Directory Stack Builtins
6897
@subsection Directory Stack Builtins
6904
dirs [-clpv] [+@var{N} | -@var{N}]
6907
Display the list of currently remembered directories. Directories
6908
are added to the list with the @code{pushd} command; the
6909
@code{popd} command removes directories from the list.
6913
Clears the directory stack by deleting all of the elements.
6915
Produces a listing using full pathnames;
6916
the default listing format uses a tilde to denote the home directory.
6918
Causes @code{dirs} to print the directory stack with one entry per
6921
Causes @code{dirs} to print the directory stack with one entry per
6922
line, prefixing each entry with its index in the stack.
6924
Displays the @var{N}th directory (counting from the left of the
6925
list printed by @code{dirs} when invoked without options), starting
6928
Displays the @var{N}th directory (counting from the right of the
6929
list printed by @code{dirs} when invoked without options), starting
6936
popd [-n] [+@var{N} | -@var{N}]
6939
Remove the top entry from the directory stack, and @code{cd}
6940
to the new top directory.
6941
When no arguments are given, @code{popd}
6942
removes the top directory from the stack and
6943
performs a @code{cd} to the new top directory. The
6944
elements are numbered from 0 starting at the first directory listed with
6945
@code{dirs}; that is, @code{popd} is equivalent to @code{popd +0}.
6949
Suppresses the normal change of directory when removing directories
6950
from the stack, so that only the stack is manipulated.
6952
Removes the @var{N}th directory (counting from the left of the
6953
list printed by @code{dirs}), starting with zero.
6955
Removes the @var{N}th directory (counting from the right of the
6956
list printed by @code{dirs}), starting with zero.
6962
pushd [-n] [@var{+N} | @var{-N} | @var{dir}]
6965
Save the current directory on the top of the directory stack
6966
and then @code{cd} to @var{dir}.
6967
With no arguments, @code{pushd} exchanges the top two directories.
6971
Suppresses the normal change of directory when adding directories
6972
to the stack, so that only the stack is manipulated.
6974
Brings the @var{N}th directory (counting from the left of the
6975
list printed by @code{dirs}, starting with zero) to the top of
6976
the list by rotating the stack.
6978
Brings the @var{N}th directory (counting from the right of the
6979
list printed by @code{dirs}, starting with zero) to the top of
6980
the list by rotating the stack.
6982
Makes the current working directory be the top of the stack, making
6983
it the new current directory as if it had been supplied as an argument
6984
to the @code{cd} builtin.
6988
@node Controlling the Prompt
6989
@section Controlling the Prompt
6992
The value of the variable @env{PROMPT_COMMAND} is examined just before
6993
Bash prints each primary prompt. If @env{PROMPT_COMMAND} is set and
6994
has a non-null value, then the
6995
value is executed just as if it had been typed on the command line.
6997
In addition, the following table describes the special characters which
6998
can appear in the prompt variables @env{PS1} to @env{PS4}:
7004
The date, in "Weekday Month Date" format (e.g., "Tue May 26").
7005
@item \D@{@var{format}@}
7006
The @var{format} is passed to @code{strftime}(3) and the result is inserted
7007
into the prompt string; an empty @var{format} results in a locale-specific
7008
time representation. The braces are required.
7010
An escape character.
7012
The hostname, up to the first `.'.
7016
The number of jobs currently managed by the shell.
7018
The basename of the shell's terminal device name.
7024
The name of the shell, the basename of @code{$0} (the portion
7025
following the final slash).
7027
The time, in 24-hour HH:MM:SS format.
7029
The time, in 12-hour HH:MM:SS format.
7031
The time, in 12-hour am/pm format.
7033
The time, in 24-hour HH:MM format.
7035
The username of the current user.
7037
The version of Bash (e.g., 2.00)
7039
The release of Bash, version + patchlevel (e.g., 2.00.0)
7041
The current working directory, with @env{$HOME} abbreviated with a tilde
7042
(uses the @env{$PROMPT_DIRTRIM} variable).
7044
The basename of @env{$PWD}, with @env{$HOME} abbreviated with a tilde.
7046
The history number of this command.
7048
The command number of this command.
7050
If the effective uid is 0, @code{#}, otherwise @code{$}.
7052
The character whose ASCII code is the octal value @var{nnn}.
7056
Begin a sequence of non-printing characters. This could be used to
7057
embed a terminal control sequence into the prompt.
7059
End a sequence of non-printing characters.
7062
The command number and the history number are usually different:
7063
the history number of a command is its position in the history
7064
list, which may include commands restored from the history file
7065
(@pxref{Bash History Facilities}), while the command number is
7066
the position in the sequence of commands executed during the current
7069
After the string is decoded, it is expanded via
7070
parameter expansion, command substitution, arithmetic
7071
expansion, and quote removal, subject to the value of the
7072
@code{promptvars} shell option (@pxref{Bash Builtins}).
7074
@node The Restricted Shell
7075
@section The Restricted Shell
7076
@cindex restricted shell
7078
If Bash is started with the name @code{rbash}, or the
7079
@option{--restricted}
7082
option is supplied at invocation, the shell becomes restricted.
7083
A restricted shell is used to
7084
set up an environment more controlled than the standard shell.
7085
A restricted shell behaves identically to @code{bash}
7086
with the exception that the following are disallowed or not performed:
7090
Changing directories with the @code{cd} builtin.
7092
Setting or unsetting the values of the @env{SHELL}, @env{PATH},
7093
@env{ENV}, or @env{BASH_ENV} variables.
7095
Specifying command names containing slashes.
7097
Specifying a filename containing a slash as an argument to the @code{.}
7100
Specifying a filename containing a slash as an argument to the @option{-p}
7101
option to the @code{hash} builtin command.
7103
Importing function definitions from the shell environment at startup.
7105
Parsing the value of @env{SHELLOPTS} from the shell environment at startup.
7107
Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&},
7108
@samp{&>}, and @samp{>>} redirection operators.
7110
Using the @code{exec} builtin to replace the shell with another command.
7112
Adding or deleting builtin commands with the
7113
@option{-f} and @option{-d} options to the @code{enable} builtin.
7115
Using the @code{enable} builtin command to enable disabled shell builtins.
7117
Specifying the @option{-p} option to the @code{command} builtin.
7119
Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}.
7122
These restrictions are enforced after any startup files are read.
7124
When a command that is found to be a shell script is executed
7125
(@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in
7126
the shell spawned to execute the script.
7128
@node Bash POSIX Mode
7129
@section Bash POSIX Mode
7132
Starting Bash with the @option{--posix} command-line option or executing
7133
@samp{set -o posix} while Bash is running will cause Bash to conform more
7134
closely to the @sc{posix} standard by changing the behavior to
7135
match that specified by @sc{posix} in areas where the Bash default differs.
7137
When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the
7140
The following list is what's changed when `@sc{posix} mode' is in effect:
7144
When a command in the hash table no longer exists, Bash will re-search
7145
@env{$PATH} to find the new location. This is also available with
7146
@samp{shopt -s checkhash}.
7149
The message printed by the job control code and builtins when a job
7150
exits with a non-zero status is `Done(status)'.
7153
The message printed by the job control code and builtins when a job
7154
is stopped is `Stopped(@var{signame})', where @var{signame} is, for
7155
example, @code{SIGTSTP}.
7158
The @code{bg} builtin uses the required format to describe each job placed
7159
in the background, which does not include an indication of whether the job
7160
is the current or previous job.
7163
Reserved words appearing in a context where reserved words are recognized
7164
do not undergo alias expansion.
7167
The @sc{posix} @env{PS1} and @env{PS2} expansions of @samp{!} to
7168
the history number and @samp{!!} to @samp{!} are enabled,
7169
and parameter expansion is performed on the values of @env{PS1} and
7170
@env{PS2} regardless of the setting of the @code{promptvars} option.
7173
The @sc{posix} startup files are executed (@env{$ENV}) rather than
7174
the normal Bash files.
7177
Tilde expansion is only performed on assignments preceding a command
7178
name, rather than on all assignment statements on the line.
7181
The @code{command} builtin does not prevent builtins that take assignment
7182
statements as arguments from expanding them as assignment statements;
7183
when not in @sc{posix} mode, assignment builtins lose their assignment
7184
statement expansion properties when preceded by @code{command}.
7187
The default history file is @file{~/.sh_history} (this is the
7188
default value of @env{$HISTFILE}).
7191
The output of @samp{kill -l} prints all the signal names on a single line,
7192
separated by spaces, without the @samp{SIG} prefix.
7195
The @code{kill} builtin does not accept signal names with a @samp{SIG}
7199
Non-interactive shells exit if @var{filename} in @code{.} @var{filename}
7203
Non-interactive shells exit if a syntax error in an arithmetic expansion
7204
results in an invalid expression.
7207
Non-interactive shells exit if there is a syntax error in a script read
7208
with the @code{.} or @code{source} builtins, or in a string processed by
7209
the @code{eval} builtin.
7212
Redirection operators do not perform filename expansion on the word
7213
in the redirection unless the shell is interactive.
7216
Redirection operators do not perform word splitting on the word in the
7220
Function names must be valid shell @code{name}s. That is, they may not
7221
contain characters other than letters, digits, and underscores, and
7222
may not start with a digit. Declaring a function with an invalid name
7223
causes a fatal syntax error in non-interactive shells.
7226
Function names may not be the same as one of the @sc{posix} special
7230
@sc{posix} special builtins are found before shell functions
7231
during command lookup.
7234
The @code{time} reserved word may be used by itself as a command. When
7235
used in this way, it displays timing statistics for the shell and its
7236
completed children. The @env{TIMEFORMAT} variable controls the format
7237
of the timing information.
7240
When parsing and expanding a $@{@dots{}@} expansion that appears within
7241
double quotes, single quotes are no longer special and cannot be used to
7242
quote a closing brace or other special character, unless the operator is
7243
one of those defined to perform pattern removal. In this case, they do
7244
not have to appear as matched pairs.
7247
The parser does not recognize @code{time} as a reserved word if the next
7248
token begins with a @samp{-}.
7251
If a @sc{posix} special builtin returns an error status, a
7252
non-interactive shell exits. The fatal errors are those listed in
7253
the @sc{posix} standard, and include things like passing incorrect options,
7254
redirection errors, variable assignment errors for assignments preceding
7255
the command name, and so on.
7258
A non-interactive shell exits with an error status if a variable
7259
assignment error occurs when no command name follows the assignment
7261
A variable assignment error occurs, for example, when trying to assign
7262
a value to a readonly variable.
7265
A non-interactive shell exits with an error status if a variable
7266
assignment error occurs in an assignment statement preceding a special
7267
builtin, but not with any other simple command.
7270
A non-interactive shell exits with an error status if the iteration
7271
variable in a @code{for} statement or the selection variable in a
7272
@code{select} statement is a readonly variable.
7275
Process substitution is not available.
7278
While variable indirection is available, it may not be applied to the
7279
@samp{#} and @samp{?} special parameters.
7282
Assignment statements preceding @sc{posix} special builtins
7283
persist in the shell environment after the builtin completes.
7286
Assignment statements preceding shell function calls persist in the
7287
shell environment after the function returns, as if a @sc{posix}
7288
special builtin command had been executed.
7291
The @code{export} and @code{readonly} builtin commands display their
7292
output in the format required by @sc{posix}.
7295
The @code{trap} builtin displays signal names without the leading
7299
The @code{trap} builtin doesn't check the first argument for a possible
7300
signal specification and revert the signal handling to the original
7301
disposition if it is, unless that argument consists solely of digits and
7302
is a valid signal number. If users want to reset the handler for a given
7303
signal to the original disposition, they should use @samp{-} as the
7307
The @code{.} and @code{source} builtins do not search the current directory
7308
for the filename argument if it is not found by searching @env{PATH}.
7311
Subshells spawned to execute command substitutions inherit the value of
7312
the @option{-e} option from the parent shell. When not in @sc{posix} mode,
7313
Bash clears the @option{-e} option in such subshells.
7316
Alias expansion is always enabled, even in non-interactive shells.
7319
When the @code{alias} builtin displays alias definitions, it does not
7320
display them with a leading @samp{alias } unless the @option{-p} option
7324
When the @code{set} builtin is invoked without options, it does not display
7325
shell function names and definitions.
7328
When the @code{set} builtin is invoked without options, it displays
7329
variable values without quotes, unless they contain shell metacharacters,
7330
even if the result contains nonprinting characters.
7333
When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
7334
constructed from @code{$PWD} and the directory name supplied as an argument
7335
does not refer to an existing directory, @code{cd} will fail instead of
7336
falling back to @var{physical} mode.
7339
The @code{pwd} builtin verifies that the value it prints is the same as the
7340
current directory, even if it is not asked to check the file system with the
7344
When listing the history, the @code{fc} builtin does not include an
7345
indication of whether or not a history entry has been modified.
7348
The default editor used by @code{fc} is @code{ed}.
7351
The @code{type} and @code{command} builtins will not report a non-executable
7352
file as having been found, though the shell will attempt to execute such a
7353
file if it is the only so-named file found in @code{$PATH}.
7356
The @code{vi} editing mode will invoke the @code{vi} editor directly when
7357
the @samp{v} command is run, instead of checking @code{$VISUAL} and
7361
When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret
7362
any arguments to @code{echo} as options. Each argument is displayed, after
7363
escape characters are converted.
7366
The @code{ulimit} builtin uses a block size of 512 bytes for the @option{-c}
7367
and @option{-f} options.
7370
The arrival of @code{SIGCHLD} when a trap is set on @code{SIGCHLD} does
7371
not interrupt the @code{wait} builtin and cause it to return immediately.
7372
The trap command is run once for each child that exits.
7375
The @code{read} builtin may be interrupted by a signal for which a trap
7377
If Bash receives a trapped signal while executing @code{read}, the trap
7378
handler executes and @code{read} returns an exit status greater than 128.
7382
There is other @sc{posix} behavior that Bash does not implement by
7383
default even when in @sc{posix} mode.
7389
The @code{fc} builtin checks @code{$EDITOR} as a program to edit history
7390
entries if @code{FCEDIT} is unset, rather than defaulting directly to
7391
@code{ed}. @code{fc} uses @code{ed} if @code{EDITOR} is unset.
7394
As noted above, Bash requires the @code{xpg_echo} option to be enabled for
7395
the @code{echo} builtin to be fully conformant.
7399
Bash can be configured to be @sc{posix}-conformant by default, by specifying
7400
the @option{--enable-strict-posix-default} to @code{configure} when building
7401
(@pxref{Optional Features}).
7404
@chapter Job Control
7406
This chapter discusses what job control is, how it works, and how
7407
Bash allows you to access its facilities.
7410
* Job Control Basics:: How job control works.
7411
* Job Control Builtins:: Bash builtin commands used to interact
7413
* Job Control Variables:: Variables Bash uses to customize job
7417
@node Job Control Basics
7418
@section Job Control Basics
7422
@cindex suspending jobs
7425
refers to the ability to selectively stop (suspend)
7426
the execution of processes and continue (resume)
7427
their execution at a later point. A user typically employs
7428
this facility via an interactive interface supplied jointly
7429
by the operating system kernel's terminal driver and Bash.
7431
The shell associates a @var{job} with each pipeline. It keeps a
7432
table of currently executing jobs, which may be listed with the
7433
@code{jobs} command. When Bash starts a job
7434
asynchronously, it prints a line that looks
7440
indicating that this job is job number 1 and that the process @sc{id}
7441
of the last process in the pipeline associated with this job is
7442
25647. All of the processes in a single pipeline are members of
7443
the same job. Bash uses the @var{job} abstraction as the
7444
basis for job control.
7446
To facilitate the implementation of the user interface to job
7447
control, the operating system maintains the notion of a current terminal
7448
process group @sc{id}. Members of this process group (processes whose
7449
process group @sc{id} is equal to the current terminal process group
7450
@sc{id}) receive keyboard-generated signals such as @code{SIGINT}.
7451
These processes are said to be in the foreground. Background
7452
processes are those whose process group @sc{id} differs from the
7453
terminal's; such processes are immune to keyboard-generated
7454
signals. Only foreground processes are allowed to read from or, if
7455
the user so specifies with @code{stty tostop}, write to the terminal.
7456
Background processes which attempt to
7457
read from (write to when @code{stty tostop} is in effect) the
7458
terminal are sent a @code{SIGTTIN} (@code{SIGTTOU})
7459
signal by the kernel's terminal driver,
7460
which, unless caught, suspends the process.
7462
If the operating system on which Bash is running supports
7463
job control, Bash contains facilities to use it. Typing the
7464
@var{suspend} character (typically @samp{^Z}, Control-Z) while a
7465
process is running causes that process to be stopped and returns
7466
control to Bash. Typing the @var{delayed suspend} character
7467
(typically @samp{^Y}, Control-Y) causes the process to be stopped
7468
when it attempts to read input from the terminal, and control to
7469
be returned to Bash. The user then manipulates the state of
7470
this job, using the @code{bg} command to continue it in the
7471
background, the @code{fg} command to continue it in the
7472
foreground, or the @code{kill} command to kill it. A @samp{^Z}
7473
takes effect immediately, and has the additional side effect of
7474
causing pending output and typeahead to be discarded.
7476
There are a number of ways to refer to a job in the shell. The
7477
character @samp{%} introduces a job specification (@var{jobspec}).
7479
Job number @code{n} may be referred to as @samp{%n}.
7480
The symbols @samp{%%} and @samp{%+} refer to the shell's notion of the
7481
current job, which is the last job stopped while it was in the foreground
7482
or started in the background.
7483
A single @samp{%} (with no accompanying job specification) also refers
7485
The previous job may be referenced using @samp{%-}.
7486
If there is only a single job, @samp{%+} and @samp{%-} can both be used
7487
to refer to that job.
7488
In output pertaining to jobs (e.g., the output of the @code{jobs}
7489
command), the current job is always flagged with a @samp{+}, and the
7490
previous job with a @samp{-}.
7492
A job may also be referred to
7493
using a prefix of the name used to start it, or using a substring
7494
that appears in its command line. For example, @samp{%ce} refers
7495
to a stopped @code{ce} job. Using @samp{%?ce}, on the
7496
other hand, refers to any job containing the string @samp{ce} in
7497
its command line. If the prefix or substring matches more than one job,
7498
Bash reports an error.
7500
Simply naming a job can be used to bring it into the foreground:
7501
@samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the
7502
background into the foreground. Similarly, @samp{%1 &} resumes
7503
job 1 in the background, equivalent to @samp{bg %1}
7505
The shell learns immediately whenever a job changes state.
7506
Normally, Bash waits until it is about to print a prompt
7507
before reporting changes in a job's status so as to not interrupt
7509
If the @option{-b} option to the @code{set} builtin is enabled,
7510
Bash reports such changes immediately (@pxref{The Set Builtin}).
7511
Any trap on @code{SIGCHLD} is executed for each child process
7514
If an attempt to exit Bash is made while jobs are stopped, (or running, if
7515
the @code{checkjobs} option is enabled -- see @ref{The Shopt Builtin}), the
7516
shell prints a warning message, and if the @code{checkjobs} option is
7517
enabled, lists the jobs and their statuses.
7518
The @code{jobs} command may then be used to inspect their status.
7519
If a second attempt to exit is made without an intervening command,
7520
Bash does not print another warning, and any stopped jobs are terminated.
7522
@node Job Control Builtins
7523
@section Job Control Builtins
7530
bg [@var{jobspec} @dots{}]
7533
Resume each suspended job @var{jobspec} in the background, as if it
7534
had been started with @samp{&}.
7535
If @var{jobspec} is not supplied, the current job is used.
7536
The return status is zero unless it is run when job control is not
7537
enabled, or, when run with job control enabled, any
7538
@var{jobspec} was not found or specifies a job
7539
that was started without job control.
7547
Resume the job @var{jobspec} in the foreground and make it the current job.
7548
If @var{jobspec} is not supplied, the current job is used.
7549
The return status is that of the command placed into the foreground,
7550
or non-zero if run when job control is disabled or, when run with
7551
job control enabled, @var{jobspec} does not specify a valid job or
7552
@var{jobspec} specifies a job that was started without job control.
7557
jobs [-lnprs] [@var{jobspec}]
7558
jobs -x @var{command} [@var{arguments}]
7561
The first form lists the active jobs. The options have the
7566
List process @sc{id}s in addition to the normal information.
7569
Display information only about jobs that have changed status since
7570
the user was last notified of their status.
7573
List only the process @sc{id} of the job's process group leader.
7576
Display only running jobs.
7579
Display only stopped jobs.
7582
If @var{jobspec} is given,
7583
output is restricted to information about that job.
7584
If @var{jobspec} is not supplied, the status of all jobs is
7587
If the @option{-x} option is supplied, @code{jobs} replaces any
7588
@var{jobspec} found in @var{command} or @var{arguments} with the
7589
corresponding process group @sc{id}, and executes @var{command},
7590
passing it @var{argument}s, returning its exit status.
7595
kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid}
7596
kill -l [@var{exit_status}]
7599
Send a signal specified by @var{sigspec} or @var{signum} to the process
7600
named by job specification @var{jobspec} or process @sc{id} @var{pid}.
7601
@var{sigspec} is either a case-insensitive signal name such as
7602
@code{SIGINT} (with or without the @code{SIG} prefix)
7603
or a signal number; @var{signum} is a signal number.
7604
If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used.
7605
The @option{-l} option lists the signal names.
7606
If any arguments are supplied when @option{-l} is given, the names of the
7607
signals corresponding to the arguments are listed, and the return status
7609
@var{exit_status} is a number specifying a signal number or the exit
7610
status of a process terminated by a signal.
7611
The return status is zero if at least one signal was successfully sent,
7612
or non-zero if an error occurs or an invalid option is encountered.
7617
wait [-n] [@var{jobspec} or @var{pid} @dots{}]
7620
Wait until the child process specified by each process @sc{id} @var{pid}
7621
or job specification @var{jobspec} exits and return the exit status of the
7622
last command waited for.
7623
If a job spec is given, all processes in the job are waited for.
7624
If no arguments are given, all currently active child processes are
7625
waited for, and the return status is zero.
7626
If the @option{-n} option is supplied, @code{wait} waits for any job to
7627
terminate and returns its exit status.
7628
If neither @var{jobspec} nor @var{pid} specifies an active child process
7629
of the shell, the return status is 127.
7634
disown [-ar] [-h] [@var{jobspec} @dots{}]
7637
Without options, remove each @var{jobspec} from the table of
7639
If the @option{-h} option is given, the job is not removed from the table,
7640
but is marked so that @code{SIGHUP} is not sent to the job if the shell
7641
receives a @code{SIGHUP}.
7642
If @var{jobspec} is not present, and neither the @option{-a} nor the
7643
@option{-r} option is supplied, the current job is used.
7644
If no @var{jobspec} is supplied, the @option{-a} option means to remove or
7645
mark all jobs; the @option{-r} option without a @var{jobspec}
7646
argument restricts operation to running jobs.
7654
Suspend the execution of this shell until it receives a
7655
@code{SIGCONT} signal.
7656
A login shell cannot be suspended; the @option{-f}
7657
option can be used to override this and force the suspension.
7660
When job control is not active, the @code{kill} and @code{wait}
7661
builtins do not accept @var{jobspec} arguments. They must be
7662
supplied process @sc{id}s.
7664
@node Job Control Variables
7665
@section Job Control Variables
7670
This variable controls how the shell interacts with the user and
7671
job control. If this variable exists then single word simple
7672
commands without redirections are treated as candidates for resumption
7673
of an existing job. There is no ambiguity allowed; if there is
7674
more than one job beginning with the string typed, then
7675
the most recently accessed job will be selected.
7676
The name of a stopped job, in this context, is the command line
7677
used to start it. If this variable is set to the value @samp{exact},
7678
the string supplied must match the name of a stopped job exactly;
7679
if set to @samp{substring},
7680
the string supplied needs to match a substring of the name of a
7681
stopped job. The @samp{substring} value provides functionality
7682
analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}).
7683
If set to any other value, the supplied string must
7684
be a prefix of a stopped job's name; this provides functionality
7685
analogous to the @samp{%} job @sc{id}.
7689
@set readline-appendix
7690
@set history-appendix
7691
@cindex Readline, how to use
7692
@include rluser.texi
7693
@cindex History, how to use
7694
@include hsuser.texi
7695
@clear readline-appendix
7696
@clear history-appendix
7698
@node Installing Bash
7699
@chapter Installing Bash
7701
This chapter provides basic instructions for installing Bash on
7702
the various supported platforms. The distribution supports the
7703
@sc{gnu} operating systems, nearly every version of Unix, and several
7704
non-Unix systems such as BeOS and Interix.
7705
Other independent ports exist for
7706
@sc{ms-dos}, @sc{os/2}, and Windows platforms.
7709
* Basic Installation:: Installation instructions.
7710
* Compilers and Options:: How to set special options for various
7712
* Compiling For Multiple Architectures:: How to compile Bash for more
7713
than one kind of system from
7714
the same source tree.
7715
* Installation Names:: How to set the various paths used by the installation.
7716
* Specifying the System Type:: How to configure Bash for a particular system.
7717
* Sharing Defaults:: How to share default configuration values among GNU
7719
* Operation Controls:: Options recognized by the configuration program.
7720
* Optional Features:: How to enable and disable optional features when
7724
@node Basic Installation
7725
@section Basic Installation
7726
@cindex installation
7727
@cindex configuration
7728
@cindex Bash installation
7729
@cindex Bash configuration
7731
These are installation instructions for Bash.
7733
The simplest way to compile Bash is:
7737
@code{cd} to the directory containing the source code and type
7738
@samp{./configure} to configure Bash for your system. If you're
7739
using @code{csh} on an old version of System V, you might need to
7740
type @samp{sh ./configure} instead to prevent @code{csh} from trying
7741
to execute @code{configure} itself.
7743
Running @code{configure} takes some time.
7744
While running, it prints messages telling which features it is
7748
Type @samp{make} to compile Bash and build the @code{bashbug} bug
7752
Optionally, type @samp{make tests} to run the Bash test suite.
7755
Type @samp{make install} to install @code{bash} and @code{bashbug}.
7756
This will also install the manual pages and Info file.
7760
The @code{configure} shell script attempts to guess correct
7761
values for various system-dependent variables used during
7762
compilation. It uses those values to create a @file{Makefile} in
7763
each directory of the package (the top directory, the
7764
@file{builtins}, @file{doc}, and @file{support} directories,
7765
each directory under @file{lib}, and several others). It also creates a
7766
@file{config.h} file containing system-dependent definitions.
7767
Finally, it creates a shell script named @code{config.status} that you
7768
can run in the future to recreate the current configuration, a
7769
file @file{config.cache} that saves the results of its tests to
7770
speed up reconfiguring, and a file @file{config.log} containing
7771
compiler output (useful mainly for debugging @code{configure}).
7773
@file{config.cache} contains results you don't want to keep, you
7774
may remove or edit it.
7776
To find out more about the options and arguments that the
7777
@code{configure} script understands, type
7780
bash-2.04$ ./configure --help
7784
at the Bash prompt in your Bash source directory.
7786
If you need to do unusual things to compile Bash, please
7787
try to figure out how @code{configure} could check whether or not
7788
to do them, and mail diffs or instructions to
7789
@email{bash-maintainers@@gnu.org} so they can be
7790
considered for the next release.
7792
The file @file{configure.ac} is used to create @code{configure}
7793
by a program called Autoconf. You only need
7794
@file{configure.ac} if you want to change it or regenerate
7795
@code{configure} using a newer version of Autoconf. If
7796
you do this, make sure you are using Autoconf version 2.50 or
7799
You can remove the program binaries and object files from the
7800
source code directory by typing @samp{make clean}. To also remove the
7801
files that @code{configure} created (so you can compile Bash for
7802
a different kind of computer), type @samp{make distclean}.
7804
@node Compilers and Options
7805
@section Compilers and Options
7807
Some systems require unusual options for compilation or linking
7808
that the @code{configure} script does not know about. You can
7809
give @code{configure} initial values for variables by setting
7810
them in the environment. Using a Bourne-compatible shell, you
7811
can do that on the command line like this:
7814
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
7817
On systems that have the @code{env} program, you can do it like this:
7820
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
7823
The configuration process uses GCC to build Bash if it
7826
@node Compiling For Multiple Architectures
7827
@section Compiling For Multiple Architectures
7829
You can compile Bash for more than one kind of computer at the
7830
same time, by placing the object files for each architecture in their
7831
own directory. To do this, you must use a version of @code{make} that
7832
supports the @code{VPATH} variable, such as GNU @code{make}.
7834
directory where you want the object files and executables to go and run
7835
the @code{configure} script from the source directory. You may need to
7836
supply the @option{--srcdir=PATH} argument to tell @code{configure} where the
7837
source files are. @code{configure} automatically checks for the
7838
source code in the directory that @code{configure} is in and in `..'.
7840
If you have to use a @code{make} that does not supports the @code{VPATH}
7841
variable, you can compile Bash for one architecture at a
7842
time in the source code directory. After you have installed
7843
Bash for one architecture, use @samp{make distclean} before
7844
reconfiguring for another architecture.
7846
Alternatively, if your system supports symbolic links, you can use the
7847
@file{support/mkclone} script to create a build tree which has
7848
symbolic links back to each file in the source directory. Here's an
7849
example that creates a build directory in the current directory from a
7850
source directory @file{/usr/gnu/src/bash-2.0}:
7853
bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
7857
The @code{mkclone} script requires Bash, so you must have already built
7858
Bash for at least one architecture before you can create build
7859
directories for other architectures.
7861
@node Installation Names
7862
@section Installation Names
7864
By default, @samp{make install} will install into
7865
@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can
7866
specify an installation prefix other than @file{/usr/local} by
7867
giving @code{configure} the option @option{--prefix=@var{PATH}},
7868
or by specifying a value for the @code{DESTDIR} @samp{make}
7869
variable when running @samp{make install}.
7871
You can specify separate installation prefixes for
7872
architecture-specific files and architecture-independent files.
7873
If you give @code{configure} the option
7874
@option{--exec-prefix=@var{PATH}}, @samp{make install} will use
7875
@var{PATH} as the prefix for installing programs and libraries.
7876
Documentation and other data files will still use the regular prefix.
7878
@node Specifying the System Type
7879
@section Specifying the System Type
7881
There may be some features @code{configure} can not figure out
7882
automatically, but need to determine by the type of host Bash
7883
will run on. Usually @code{configure} can figure that
7884
out, but if it prints a message saying it can not guess the host
7885
type, give it the @option{--host=TYPE} option. @samp{TYPE} can
7886
either be a short name for the system type, such as @samp{sun4},
7887
or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
7888
(e.g., @samp{i386-unknown-freebsd4.2}).
7890
See the file @file{support/config.sub} for the possible
7891
values of each field.
7893
@node Sharing Defaults
7894
@section Sharing Defaults
7896
If you want to set default values for @code{configure} scripts to
7897
share, you can create a site shell script called
7898
@code{config.site} that gives default values for variables like
7899
@code{CC}, @code{cache_file}, and @code{prefix}. @code{configure}
7900
looks for @file{PREFIX/share/config.site} if it exists, then
7901
@file{PREFIX/etc/config.site} if it exists. Or, you can set the
7902
@code{CONFIG_SITE} environment variable to the location of the site
7903
script. A warning: the Bash @code{configure} looks for a site script,
7904
but not all @code{configure} scripts do.
7906
@node Operation Controls
7907
@section Operation Controls
7909
@code{configure} recognizes the following options to control how it
7914
@item --cache-file=@var{file}
7915
Use and save the results of the tests in
7916
@var{file} instead of @file{./config.cache}. Set @var{file} to
7917
@file{/dev/null} to disable caching, for debugging
7921
Print a summary of the options to @code{configure}, and exit.
7926
Do not print messages saying which checks are being made.
7928
@item --srcdir=@var{dir}
7929
Look for the Bash source code in directory @var{dir}. Usually
7930
@code{configure} can determine that directory automatically.
7933
Print the version of Autoconf used to generate the @code{configure}
7937
@code{configure} also accepts some other, not widely used, boilerplate
7938
options. @samp{configure --help} prints the complete list.
7940
@node Optional Features
7941
@section Optional Features
7943
The Bash @code{configure} has a number of @option{--enable-@var{feature}}
7944
options, where @var{feature} indicates an optional part of Bash.
7945
There are also several @option{--with-@var{package}} options,
7946
where @var{package} is something like @samp{bash-malloc} or @samp{purify}.
7947
To turn off the default use of a package, use
7948
@option{--without-@var{package}}. To configure Bash without a feature
7949
that is enabled by default, use @option{--disable-@var{feature}}.
7951
Here is a complete list of the @option{--enable-} and
7952
@option{--with-} options that the Bash @code{configure} recognizes.
7956
Define if you are using the Andrew File System from Transarc.
7958
@item --with-bash-malloc
7959
Use the Bash version of
7960
@code{malloc} in the directory @file{lib/malloc}. This is not the same
7961
@code{malloc} that appears in @sc{gnu} libc, but an older version
7962
originally derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc}
7963
is very fast, but wastes some space on each allocation.
7964
This option is enabled by default.
7965
The @file{NOTES} file contains a list of systems for
7966
which this should be turned off, and @code{configure} disables this
7967
option automatically for a number of systems.
7970
Use the curses library instead of the termcap library. This should
7971
be supplied if your system has an inadequate or incomplete termcap
7974
@item --with-gnu-malloc
7975
A synonym for @code{--with-bash-malloc}.
7977
@item --with-installed-readline[=@var{PREFIX}]
7978
Define this to make Bash link with a locally-installed version of Readline
7979
rather than the version in @file{lib/readline}. This works only with
7980
Readline 5.0 and later versions. If @var{PREFIX} is @code{yes} or not
7981
supplied, @code{configure} uses the values of the make variables
7982
@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
7983
by default, to find the installed version of Readline if it is not in
7984
the standard system include and library directories.
7985
If @var{PREFIX} is @code{no}, Bash links with the version in
7986
@file{lib/readline}.
7987
If @var{PREFIX} is set to any other value, @code{configure} treats it as
7988
a directory pathname and looks for
7989
the installed version of Readline in subdirectories of that directory
7990
(include files in @var{PREFIX}/@code{include} and the library in
7991
@var{PREFIX}/@code{lib}).
7994
Define this to use the Purify memory allocation checker from Rational
7997
@item --enable-minimal-config
7998
This produces a shell with minimal features, close to the historical
8002
There are several @option{--enable-} options that alter how Bash is
8003
compiled and linked, rather than changing run-time features.
8006
@item --enable-largefile
8007
Enable support for @uref{http://www.sas.com/standards/large_file/x_open.20Mar96.html,
8008
large files} if the operating system requires special compiler options
8009
to build programs which can access large files. This is enabled by
8010
default, if the operating system provides large file support.
8012
@item --enable-profiling
8013
This builds a Bash binary that produces profiling information to be
8014
processed by @code{gprof} each time it is executed.
8016
@item --enable-static-link
8017
This causes Bash to be linked statically, if @code{gcc} is being used.
8018
This could be used to build a version to use as root's shell.
8021
The @samp{minimal-config} option can be used to disable all of
8022
the following options, but it is processed first, so individual
8023
options may be enabled using @samp{enable-@var{feature}}.
8025
All of the following options except for @samp{disabled-builtins},
8026
@samp{directpand-default}, and
8027
@samp{xpg-echo-default} are
8028
enabled by default, unless the operating system does not provide the
8032
@item --enable-alias
8033
Allow alias expansion and include the @code{alias} and @code{unalias}
8034
builtins (@pxref{Aliases}).
8036
@item --enable-arith-for-command
8037
Include support for the alternate form of the @code{for} command
8038
that behaves like the C language @code{for} statement
8039
(@pxref{Looping Constructs}).
8041
@item --enable-array-variables
8042
Include support for one-dimensional array shell variables
8045
@item --enable-bang-history
8046
Include support for @code{csh}-like history substitution
8047
(@pxref{History Interaction}).
8049
@item --enable-brace-expansion
8050
Include @code{csh}-like brace expansion
8051
( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
8052
See @ref{Brace Expansion}, for a complete description.
8054
@item --enable-casemod-attributes
8055
Include support for case-modifying attributes in the @code{declare} builtin
8056
and assignment statements. Variables with the @var{uppercase} attribute,
8057
for example, will have their values converted to uppercase upon assignment.
8059
@item --enable-casemod-expansion
8060
Include support for case-modifying word expansions.
8062
@item --enable-command-timing
8063
Include support for recognizing @code{time} as a reserved word and for
8064
displaying timing statistics for the pipeline following @code{time}
8065
(@pxref{Pipelines}).
8066
This allows pipelines as well as shell builtins and functions to be timed.
8068
@item --enable-cond-command
8069
Include support for the @code{[[} conditional command.
8070
(@pxref{Conditional Constructs}).
8072
@item --enable-cond-regexp
8073
Include support for matching @sc{posix} regular expressions using the
8074
@samp{=~} binary operator in the @code{[[} conditional command.
8075
(@pxref{Conditional Constructs}).
8077
@item --enable-coprocesses
8078
Include support for coprocesses and the @code{coproc} reserved word
8079
(@pxref{Pipelines}).
8081
@item --enable-debugger
8082
Include support for the bash debugger (distributed separately).
8084
@item --enable-direxpand-default
8085
Cause the @code{direxpand} shell option (@pxref{The Shopt Builtin})
8086
to be enabled by default when the shell starts.
8087
It is normally disabled by default.
8089
@item --enable-directory-stack
8090
Include support for a @code{csh}-like directory stack and the
8091
@code{pushd}, @code{popd}, and @code{dirs} builtins
8092
(@pxref{The Directory Stack}).
8094
@item --enable-disabled-builtins
8095
Allow builtin commands to be invoked via @samp{builtin xxx}
8096
even after @code{xxx} has been disabled using @samp{enable -n xxx}.
8097
See @ref{Bash Builtins}, for details of the @code{builtin} and
8098
@code{enable} builtin commands.
8100
@item --enable-dparen-arithmetic
8101
Include support for the @code{((@dots{}))} command
8102
(@pxref{Conditional Constructs}).
8104
@item --enable-extended-glob
8105
Include support for the extended pattern matching features described
8106
above under @ref{Pattern Matching}.
8108
@item --enable-extended-glob-default
8109
Set the default value of the @var{extglob} shell option described
8110
above under @ref{The Shopt Builtin} to be enabled.
8112
@item --enable-glob-asciirange-default
8113
Set the default value of the @var{globasciiranges} shell option described
8114
above under @ref{The Shopt Builtin} to be enabled.
8115
This controls the behavior of character ranges when used in pattern matching
8116
bracket expressions.
8118
@item --enable-help-builtin
8119
Include the @code{help} builtin, which displays help on shell builtins and
8120
variables (@pxref{Bash Builtins}).
8122
@item --enable-history
8123
Include command history and the @code{fc} and @code{history}
8124
builtin commands (@pxref{Bash History Facilities}).
8126
@item --enable-job-control
8127
This enables the job control features (@pxref{Job Control}),
8128
if the operating system supports them.
8130
@item --enable-multibyte
8131
This enables support for multibyte characters if the operating
8132
system provides the necessary support.
8134
@item --enable-net-redirections
8135
This enables the special handling of filenames of the form
8136
@code{/dev/tcp/@var{host}/@var{port}} and
8137
@code{/dev/udp/@var{host}/@var{port}}
8138
when used in redirections (@pxref{Redirections}).
8140
@item --enable-process-substitution
8141
This enables process substitution (@pxref{Process Substitution}) if
8142
the operating system provides the necessary support.
8144
@item --enable-progcomp
8145
Enable the programmable completion facilities
8146
(@pxref{Programmable Completion}).
8147
If Readline is not enabled, this option has no effect.
8149
@item --enable-prompt-string-decoding
8150
Turn on the interpretation of a number of backslash-escaped characters
8151
in the @env{$PS1}, @env{$PS2}, @env{$PS3}, and @env{$PS4} prompt
8152
strings. See @ref{Controlling the Prompt}, for a complete list of prompt
8153
string escape sequences.
8155
@item --enable-readline
8156
Include support for command-line editing and history with the Bash
8157
version of the Readline library (@pxref{Command Line Editing}).
8159
@item --enable-restricted
8160
Include support for a @dfn{restricted shell}. If this is enabled, Bash,
8161
when called as @code{rbash}, enters a restricted mode. See
8162
@ref{The Restricted Shell}, for a description of restricted mode.
8164
@item --enable-select
8165
Include the @code{select} compound command, which allows the generation of
8166
simple menus (@pxref{Conditional Constructs}).
8168
@item --enable-separate-helpfiles
8169
Use external files for the documentation displayed by the @code{help} builtin
8170
instead of storing the text internally.
8172
@item --enable-single-help-strings
8173
Store the text displayed by the @code{help} builtin as a single string for
8174
each help topic. This aids in translating the text to different languages.
8175
You may need to disable this if your compiler cannot handle very long string
8178
@item --enable-strict-posix-default
8179
Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}).
8181
@item --enable-usg-echo-default
8182
A synonym for @code{--enable-xpg-echo-default}.
8184
@item --enable-xpg-echo-default
8185
Make the @code{echo} builtin expand backslash-escaped characters by default,
8186
without requiring the @option{-e} option.
8187
This sets the default value of the @code{xpg_echo} shell option to @code{on},
8188
which makes the Bash @code{echo} behave more like the version specified in
8189
the Single Unix Specification, version 3.
8190
@xref{Bash Builtins}, for a description of the escape sequences that
8191
@code{echo} recognizes.
8194
The file @file{config-top.h} contains C Preprocessor
8195
@samp{#define} statements for options which are not settable from
8197
Some of these are not meant to be changed; beware of the consequences if
8199
Read the comments associated with each definition for more
8200
information about its effect.
8202
@node Reporting Bugs
8203
@appendix Reporting Bugs
8205
Please report all bugs you find in Bash.
8206
But first, you should
8207
make sure that it really is a bug, and that it appears in the latest
8209
The latest version of Bash is always available for FTP from
8210
@uref{ftp://ftp.gnu.org/pub/gnu/bash/}.
8212
Once you have determined that a bug actually exists, use the
8213
@code{bashbug} command to submit a bug report.
8214
If you have a fix, you are encouraged to mail that as well!
8215
Suggestions and `philosophical' bug reports may be mailed
8216
to @email{bug-bash@@gnu.org} or posted to the Usenet
8217
newsgroup @code{gnu.bash.bug}.
8219
All bug reports should include:
8222
The version number of Bash.
8224
The hardware and operating system.
8226
The compiler used to compile Bash.
8228
A description of the bug behaviour.
8230
A short script or `recipe' which exercises the bug and may be used
8235
@code{bashbug} inserts the first three items automatically into
8236
the template it provides for filing a bug report.
8238
Please send all reports concerning this manual to
8239
@email{bug-bash@@gnu.org}.
8241
@node Major Differences From The Bourne Shell
8242
@appendix Major Differences From The Bourne Shell
8244
Bash implements essentially the same grammar, parameter and
8245
variable expansion, redirection, and quoting as the Bourne Shell.
8246
Bash uses the @sc{posix} standard as the specification of
8247
how these features are to be implemented. There are some
8248
differences between the traditional Bourne shell and Bash; this
8249
section quickly details the differences of significance. A
8250
number of these differences are explained in greater depth in
8252
This section uses the version of @code{sh} included in SVR4.2 (the
8253
last version of the historical Bourne shell) as the baseline reference.
8258
Bash is @sc{posix}-conformant, even where the @sc{posix} specification
8259
differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}).
8262
Bash has multi-character invocation options (@pxref{Invoking Bash}).
8265
Bash has command-line editing (@pxref{Command Line Editing}) and
8266
the @code{bind} builtin.
8269
Bash provides a programmable word completion mechanism
8270
(@pxref{Programmable Completion}), and builtin commands
8271
@code{complete}, @code{compgen}, and @code{compopt}, to
8275
Bash has command history (@pxref{Bash History Facilities}) and the
8276
@code{history} and @code{fc} builtins to manipulate it.
8277
The Bash history list maintains timestamp information and uses the
8278
value of the @code{HISTTIMEFORMAT} variable to display it.
8281
Bash implements @code{csh}-like history expansion
8282
(@pxref{History Interaction}).
8285
Bash has one-dimensional array variables (@pxref{Arrays}), and the
8286
appropriate variable expansions and assignment syntax to use them.
8287
Several of the Bash builtins take options to act on arrays.
8288
Bash provides a number of built-in array variables.
8291
The @code{$'@dots{}'} quoting syntax, which expands ANSI-C
8292
backslash-escaped characters in the text between the single quotes,
8293
is supported (@pxref{ANSI-C Quoting}).
8296
Bash supports the @code{$"@dots{}"} quoting syntax to do
8297
locale-specific translation of the characters between the double
8298
quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings}
8299
invocation options list the translatable strings found in a script
8300
(@pxref{Locale Translation}).
8303
Bash implements the @code{!} keyword to negate the return value of
8304
a pipeline (@pxref{Pipelines}).
8305
Very useful when an @code{if} statement needs to act only if a test fails.
8306
The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to
8307
return a failure status if any command fails.
8310
Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}).
8311
The display of the timing statistics may be controlled with the
8312
@env{TIMEFORMAT} variable.
8315
Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))}
8316
arithmetic for command, similar to the C language (@pxref{Looping Constructs}).
8319
Bash includes the @code{select} compound command, which allows the
8320
generation of simple menus (@pxref{Conditional Constructs}).
8323
Bash includes the @code{[[} compound command, which makes conditional
8324
testing part of the shell grammar (@pxref{Conditional Constructs}), including
8325
optional regular expression matching.
8328
Bash provides optional case-insensitive matching for the @code{case} and
8329
@code{[[} constructs.
8332
Bash includes brace expansion (@pxref{Brace Expansion}) and tilde
8333
expansion (@pxref{Tilde Expansion}).
8336
Bash implements command aliases and the @code{alias} and @code{unalias}
8337
builtins (@pxref{Aliases}).
8340
Bash provides shell arithmetic, the @code{((} compound command
8341
(@pxref{Conditional Constructs}),
8342
and arithmetic expansion (@pxref{Shell Arithmetic}).
8345
Variables present in the shell's initial environment are automatically
8346
exported to child processes. The Bourne shell does not normally do
8347
this unless the variables are explicitly marked using the @code{export}
8351
Bash supports the @samp{+=} assignment operator, which appends to the value
8352
of the variable named on the left hand side.
8355
Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%}
8356
and @samp{##} expansions to remove leading or trailing substrings from
8357
variable values (@pxref{Shell Parameter Expansion}).
8360
The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}},
8361
is supported (@pxref{Shell Parameter Expansion}).
8364
The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}},
8365
which expands to the substring of @code{var}'s value of length
8366
@var{length}, beginning at @var{offset}, is present
8367
(@pxref{Shell Parameter Expansion}).
8371
@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
8372
which matches @var{pattern} and replaces it with @var{replacement} in
8373
the value of @code{var}, is available (@pxref{Shell Parameter Expansion}).
8376
The expansion @code{$@{!@var{prefix}*@}} expansion, which expands to
8377
the names of all shell variables whose names begin with @var{prefix},
8378
is available (@pxref{Shell Parameter Expansion}).
8381
Bash has @var{indirect} variable expansion using @code{$@{!word@}}
8382
(@pxref{Shell Parameter Expansion}).
8385
Bash can expand positional parameters beyond @code{$9} using
8386
@code{$@{@var{num}@}}.
8389
The @sc{posix} @code{$()} form of command substitution
8390
is implemented (@pxref{Command Substitution}),
8391
and preferred to the Bourne shell's @code{``} (which
8392
is also implemented for backwards compatibility).
8395
Bash has process substitution (@pxref{Process Substitution}).
8398
Bash automatically assigns variables that provide information about the
8399
current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host
8400
(@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}),
8401
and the instance of Bash that is running (@env{BASH},
8402
@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables},
8406
The @env{IFS} variable is used to split only the results of expansion,
8407
not all words (@pxref{Word Splitting}).
8408
This closes a longstanding shell security hole.
8411
The filename expansion bracket expression code uses @samp{!} and @samp{^}
8412
to negate the set of characters between the brackets.
8413
The Bourne shell uses only @samp{!}.
8416
Bash implements the full set of @sc{posix} filename expansion operators,
8417
including @var{character classes}, @var{equivalence classes}, and
8418
@var{collating symbols} (@pxref{Filename Expansion}).
8421
Bash implements extended pattern matching features when the @code{extglob}
8422
shell option is enabled (@pxref{Pattern Matching}).
8425
It is possible to have a variable and a function with the same name;
8426
@code{sh} does not separate the two name spaces.
8429
Bash functions are permitted to have local variables using the
8430
@code{local} builtin, and thus useful recursive functions may be written
8431
(@pxref{Bash Builtins}).
8434
Variable assignments preceding commands affect only that command, even
8435
builtins and functions (@pxref{Environment}).
8436
In @code{sh}, all variable assignments
8437
preceding commands are global unless the command is executed from the
8441
Bash performs filename expansion on filenames specified as operands
8442
to input and output redirection operators (@pxref{Redirections}).
8445
Bash contains the @samp{<>} redirection operator, allowing a file to be
8446
opened for both reading and writing, and the @samp{&>} redirection
8447
operator, for directing standard output and standard error to the same
8448
file (@pxref{Redirections}).
8451
Bash includes the @samp{<<<} redirection operator, allowing a string to
8452
be used as the standard input to a command.
8455
Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}}
8456
redirection operators, which move one file descriptor to another.
8459
Bash treats a number of filenames specially when they are
8460
used in redirection operators (@pxref{Redirections}).
8463
Bash can open network connections to arbitrary machines and services
8464
with the redirection operators (@pxref{Redirections}).
8467
The @code{noclobber} option is available to avoid overwriting existing
8468
files with output redirection (@pxref{The Set Builtin}).
8469
The @samp{>|} redirection operator may be used to override @code{noclobber}.
8472
The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins})
8473
each take @option{-L} and @option{-P} options to switch between logical and
8477
Bash allows a function to override a builtin with the same name, and provides
8478
access to that builtin's functionality within the function via the
8479
@code{builtin} and @code{command} builtins (@pxref{Bash Builtins}).
8482
The @code{command} builtin allows selective disabling of functions
8483
when command lookup is performed (@pxref{Bash Builtins}).
8486
Individual builtins may be enabled or disabled using the @code{enable}
8487
builtin (@pxref{Bash Builtins}).
8490
The Bash @code{exec} builtin takes additional options that allow users
8491
to control the contents of the environment passed to the executed
8492
command, and what the zeroth argument to the command is to be
8493
(@pxref{Bourne Shell Builtins}).
8496
Shell functions may be exported to children via the environment
8497
using @code{export -f} (@pxref{Shell Functions}).
8500
The Bash @code{export}, @code{readonly}, and @code{declare} builtins can
8501
take a @option{-f} option to act on shell functions, a @option{-p} option to
8502
display variables with various attributes set in a format that can be
8503
used as shell input, a @option{-n} option to remove various variable
8504
attributes, and @samp{name=value} arguments to set variable attributes
8505
and values simultaneously.
8508
The Bash @code{hash} builtin allows a name to be associated with
8509
an arbitrary filename, even when that filename cannot be found by
8510
searching the @env{$PATH}, using @samp{hash -p}
8511
(@pxref{Bourne Shell Builtins}).
8514
Bash includes a @code{help} builtin for quick reference to shell
8515
facilities (@pxref{Bash Builtins}).
8518
The @code{printf} builtin is available to display formatted output
8519
(@pxref{Bash Builtins}).
8522
The Bash @code{read} builtin (@pxref{Bash Builtins})
8523
will read a line ending in @samp{\} with
8524
the @option{-r} option, and will use the @env{REPLY} variable as a
8525
default if no non-option arguments are supplied.
8526
The Bash @code{read} builtin
8527
also accepts a prompt string with the @option{-p} option and will use
8528
Readline to obtain the line when given the @option{-e} option.
8529
The @code{read} builtin also has additional options to control input:
8530
the @option{-s} option will turn off echoing of input characters as
8531
they are read, the @option{-t} option will allow @code{read} to time out
8532
if input does not arrive within a specified number of seconds, the
8533
@option{-n} option will allow reading only a specified number of
8534
characters rather than a full line, and the @option{-d} option will read
8535
until a particular character rather than newline.
8538
The @code{return} builtin may be used to abort execution of scripts
8539
executed with the @code{.} or @code{source} builtins
8540
(@pxref{Bourne Shell Builtins}).
8543
Bash includes the @code{shopt} builtin, for finer control of shell
8544
optional capabilities (@pxref{The Shopt Builtin}), and allows these options
8545
to be set and unset at shell invocation (@pxref{Invoking Bash}).
8548
Bash has much more optional behavior controllable with the @code{set}
8549
builtin (@pxref{The Set Builtin}).
8552
The @samp{-x} (@option{xtrace}) option displays commands other than
8553
simple commands when performing an execution trace
8554
(@pxref{The Set Builtin}).
8557
The @code{test} builtin (@pxref{Bourne Shell Builtins})
8558
is slightly different, as it implements the @sc{posix} algorithm,
8559
which specifies the behavior based on the number of arguments.
8562
Bash includes the @code{caller} builtin, which displays the context of
8563
any active subroutine call (a shell function or a script executed with
8564
the @code{.} or @code{source} builtins). This supports the bash
8568
The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
8569
@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}.
8570
Commands specified with a @code{DEBUG} trap are executed before every
8571
simple command, @code{for} command, @code{case} command,
8572
@code{select} command, every arithmetic @code{for} command, and before
8573
the first command executes in a shell function.
8574
The @code{DEBUG} trap is not inherited by shell functions unless the
8575
function has been given the @code{trace} attribute or the
8576
@code{functrace} option has been enabled using the @code{shopt} builtin.
8577
The @code{extdebug} shell option has additional effects on the
8580
The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an
8581
@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}.
8582
Commands specified with an @code{ERR} trap are executed after a simple
8583
command fails, with a few exceptions.
8584
The @code{ERR} trap is not inherited by shell functions unless the
8585
@code{-o errtrace} option to the @code{set} builtin is enabled.
8587
The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
8588
@code{RETURN} pseudo-signal specification, similar to
8589
@code{EXIT} and @code{DEBUG}.
8590
Commands specified with an @code{RETURN} trap are executed before
8591
execution resumes after a shell function or a shell script executed with
8592
@code{.} or @code{source} returns.
8593
The @code{RETURN} trap is not inherited by shell functions unless the
8594
function has been given the @code{trace} attribute or the
8595
@code{functrace} option has been enabled using the @code{shopt} builtin.
8598
The Bash @code{type} builtin is more extensive and gives more information
8599
about the names it finds (@pxref{Bash Builtins}).
8602
The Bash @code{umask} builtin permits a @option{-p} option to cause
8603
the output to be displayed in the form of a @code{umask} command
8604
that may be reused as input (@pxref{Bourne Shell Builtins}).
8607
Bash implements a @code{csh}-like directory stack, and provides the
8608
@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it
8609
(@pxref{The Directory Stack}).
8610
Bash also makes the directory stack visible as the value of the
8611
@env{DIRSTACK} shell variable.
8614
Bash interprets special backslash-escaped characters in the prompt
8615
strings when interactive (@pxref{Controlling the Prompt}).
8618
The Bash restricted mode is more useful (@pxref{The Restricted Shell});
8619
the SVR4.2 shell restricted mode is too limited.
8622
The @code{disown} builtin can remove a job from the internal shell
8623
job table (@pxref{Job Control Builtins}) or suppress the sending
8624
of @code{SIGHUP} to a job when the shell exits as the result of a
8628
Bash includes a number of features to support a separate debugger for
8632
The SVR4.2 shell has two privilege-related builtins
8633
(@code{mldmode} and @code{priv}) not present in Bash.
8636
Bash does not have the @code{stop} or @code{newgrp} builtins.
8639
Bash does not use the @env{SHACCT} variable or perform shell accounting.
8642
The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses
8648
More features unique to Bash may be found in @ref{Bash Features}.
8651
@appendixsec Implementation Differences From The SVR4.2 Shell
8653
Since Bash is a completely new implementation, it does not suffer from
8654
many of the limitations of the SVR4.2 shell. For instance:
8659
Bash does not fork a subshell when redirecting into or out of
8660
a shell control structure such as an @code{if} or @code{while}
8664
Bash does not allow unbalanced quotes. The SVR4.2 shell will silently
8665
insert a needed closing quote at @code{EOF} under certain circumstances.
8666
This can be the cause of some hard-to-find errors.
8669
The SVR4.2 shell uses a baroque memory management scheme based on
8670
trapping @code{SIGSEGV}. If the shell is started from a process with
8671
@code{SIGSEGV} blocked (e.g., by using the @code{system()} C library
8672
function call), it misbehaves badly.
8675
In a questionable attempt at security, the SVR4.2 shell,
8676
when invoked without the @option{-p} option, will alter its real
8677
and effective @sc{uid} and @sc{gid} if they are less than some
8678
magic threshold value, commonly 100.
8679
This can lead to unexpected results.
8682
The SVR4.2 shell does not allow users to trap @code{SIGSEGV},
8683
@code{SIGALRM}, or @code{SIGCHLD}.
8686
The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK},
8687
@env{PATH}, @env{PS1}, or @env{PS2} variables to be unset.
8690
The SVR4.2 shell treats @samp{^} as the undocumented equivalent of
8694
Bash allows multiple option arguments when it is invoked (@code{-x -v});
8695
the SVR4.2 shell allows only one option argument (@code{-xv}). In
8696
fact, some versions of the shell dump core if the second argument begins
8700
The SVR4.2 shell exits a script if any builtin fails; Bash exits
8701
a script only if one of the @sc{posix} special builtins fails, and
8702
only for certain failures, as enumerated in the @sc{posix} standard.
8705
The SVR4.2 shell behaves differently when invoked as @code{jsh}
8706
(it turns on job control).
8709
@node GNU Free Documentation License
8710
@appendix GNU Free Documentation License
8718
* Builtin Index:: Index of Bash builtin commands.
8719
* Reserved Word Index:: Index of Bash reserved words.
8720
* Variable Index:: Quick reference helps you find the
8722
* Function Index:: Index of bindable Readline functions.
8723
* Concept Index:: General index for concepts described in
8728
@appendixsec Index of Shell Builtin Commands
8731
@node Reserved Word Index
8732
@appendixsec Index of Shell Reserved Words
8735
@node Variable Index
8736
@appendixsec Parameter and Variable Index
8739
@node Function Index
8740
@appendixsec Function Index
8744
@appendixsec Concept Index