c310664c3f68e98658cc02f4ecf60354f0795400
[platform/upstream/bash.git] / doc / bashref.texi
1 \input texinfo.tex @c -*- texinfo -*-
2 @c %**start of header
3 @setfilename bashref.info
4 @settitle Bash Reference Manual
5 @c %**end of header
6
7 @setchapternewpage odd
8
9 @include version.texi
10
11 @copying
12 This text is a brief description of the features that are present in
13 the Bash shell (version @value{VERSION}, @value{UPDATED}).
14
15 This is Edition @value{EDITION}, last updated @value{UPDATED},
16 of @cite{The GNU Bash Reference Manual},
17 for @code{Bash}, Version @value{VERSION}.
18
19 Copyright @copyright{} 1988--2009 Free Software Foundation, Inc.
20
21 Permission is granted to make and distribute verbatim copies of
22 this manual provided the copyright notice and this permission notice
23 are preserved on all copies.
24
25 @quotation
26 Permission is granted to copy, distribute and/or modify this document
27 under the terms of the GNU Free Documentation License, Version 1.2 or
28 any later version published by the Free Software Foundation; with no
29 Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
30 and with the Back-Cover Texts as in (a) below.  A copy of the license is
31 included in the section entitled ``GNU Free Documentation License''.
32
33 (a) The FSF's Back-Cover Text is: You are free to copy and modify
34 this GNU manual.  Buying copies from GNU Press supports the FSF in
35 developing GNU and promoting software freedom.''
36
37 @end quotation
38 @end copying
39
40 @defcodeindex bt
41 @defcodeindex rw
42 @set BashFeatures
43
44 @dircategory Basics
45 @direntry
46 * Bash: (bash).                     The GNU Bourne-Again SHell.
47 @end direntry
48
49 @finalout
50
51 @titlepage
52 @title Bash Reference Manual
53 @subtitle Reference Documentation for Bash
54 @subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}.
55 @subtitle @value{UPDATED-MONTH}
56 @author Chet Ramey, Case Western Reserve University
57 @author Brian Fox, Free Software Foundation
58
59 @page
60 @vskip 0pt plus 1filll
61 @insertcopying
62
63 @sp 1
64 Published by the Free Software Foundation @*
65 59 Temple Place, Suite 330, @*
66 Boston, MA 02111-1307 @*
67 USA @*
68
69 @end titlepage
70
71 @contents
72
73 @ifnottex
74 @node Top, Introduction, (dir), (dir)
75 @top Bash Features
76
77 This text is a brief description of the features that are present in
78 the Bash shell (version @value{VERSION}, @value{UPDATED}).
79
80 This is Edition @value{EDITION}, last updated @value{UPDATED},
81 of @cite{The GNU Bash Reference Manual},
82 for @code{Bash}, Version @value{VERSION}.
83
84 Bash contains features that appear in other popular shells, and some
85 features that only appear in Bash.  Some of the shells that Bash has
86 borrowed concepts from are the Bourne Shell (@file{sh}), the Korn Shell
87 (@file{ksh}), and the C-shell (@file{csh} and its successor,
88 @file{tcsh}). The following menu breaks the features up into
89 categories based upon which one of these other shells inspired the
90 feature.
91
92 This manual is meant as a brief introduction to features found in
93 Bash.  The Bash manual page should be used as the definitive
94 reference on shell behavior.
95
96 @menu
97 * Introduction::                An introduction to the shell.
98 * Definitions::                 Some definitions used in the rest of this
99                                 manual.
100 * Basic Shell Features::        The shell "building blocks".
101 * Shell Builtin Commands::      Commands that are a part of the shell.
102 * Shell Variables::             Variables used or set by Bash.
103 * Bash Features::               Features found only in Bash.
104 * Job Control::                 What job control is and how Bash allows you
105                                 to use it.
106 * Command Line Editing::        Chapter describing the command line
107                                 editing features.
108 * Using History Interactively:: Command History Expansion
109 * Installing Bash::             How to build and install Bash on your system.
110 * Reporting Bugs::              How to report bugs in Bash.
111 * Major Differences From The Bourne Shell::     A terse list of the differences
112                                                 between Bash and historical
113                                                 versions of /bin/sh.
114 * GNU Free Documentation License::      Copying and sharing this documentation.
115 * Indexes::                     Various indexes for this manual.
116 @end menu
117 @end ifnottex
118
119 @node Introduction
120 @chapter Introduction
121 @menu
122 * What is Bash?::               A short description of Bash.
123 * What is a shell?::            A brief introduction to shells.
124 @end menu
125
126 @node What is Bash?
127 @section What is Bash?
128
129 Bash is the shell, or command language interpreter,
130 for the @sc{gnu} operating system.
131 The name is an acronym for the @samp{Bourne-Again SHell},
132 a pun on Stephen Bourne, the author of the direct ancestor of
133 the current Unix shell @code{sh}, 
134 which appeared in the Seventh Edition Bell Labs Research version
135 of Unix.
136
137 Bash is largely compatible with @code{sh} and incorporates useful
138 features from the Korn shell @code{ksh} and the C shell @code{csh}.
139 It is intended to be a conformant implementation of the @sc{ieee}
140 @sc{posix} Shell and Tools portion of the @sc{ieee} @sc{posix}
141 specification (@sc{ieee} Standard 1003.1).
142 It offers functional improvements over @code{sh} for both interactive and
143 programming use.
144
145 While the @sc{gnu} operating system provides other shells, including
146 a version of @code{csh}, Bash is the default shell.
147 Like other @sc{gnu} software, Bash is quite portable.  It currently runs
148 on nearly every version of Unix and a few other operating systems @minus{}
149 independently-supported ports exist for @sc{ms-dos}, @sc{os/2},
150 and Windows platforms.
151
152 @node What is a shell?
153 @section What is a shell?
154
155 At its base, a shell is simply a macro processor that executes
156 commands.  The term macro processor means functionality where text
157 and symbols are expanded to create larger expressions.
158
159 A Unix shell is both a command interpreter and a programming
160 language.  As a command interpreter, the shell provides the user
161 interface to the rich set of @sc{gnu} utilities.  The programming
162 language features allow these utilities to be combined.
163 Files containing commands can be created, and become
164 commands themselves.  These new commands have the same status as
165 system commands in directories such as @file{/bin}, allowing users
166 or groups to establish custom environments to automate their common
167 tasks.
168
169 Shells may be used interactively or non-interactively.  In
170 interactive mode, they accept input typed from the keyboard.
171 When executing non-interactively, shells execute commands read
172 from a file.
173
174 A shell allows execution of @sc{gnu} commands, both synchronously and
175 asynchronously.
176 The shell waits for synchronous commands to complete before accepting
177 more input; asynchronous commands continue to execute in parallel
178 with the shell while it reads and executes additional commands.
179 The @dfn{redirection} constructs permit
180 fine-grained control of the input and output of those commands.
181 Moreover, the shell allows control over the contents of commands'
182 environments.
183
184 Shells also provide a small set of built-in
185 commands (@dfn{builtins}) implementing functionality impossible
186 or inconvenient to obtain via separate utilities.
187 For example, @code{cd}, @code{break}, @code{continue}, and
188 @code{exec}) cannot be implemented outside of the shell because
189 they directly manipulate the shell itself.
190 The @code{history}, @code{getopts}, @code{kill}, or @code{pwd}
191 builtins, among others, could be implemented in separate utilities,
192 but they are more convenient to use as builtin commands.
193 All of the shell builtins are described in
194 subsequent sections.
195
196 While executing commands is essential, most of the power (and
197 complexity) of shells is due to their embedded programming
198 languages.  Like any high-level language, the shell provides
199 variables, flow control constructs, quoting, and functions. 
200
201 Shells offer features geared specifically for
202 interactive use rather than to augment the programming language. 
203 These interactive features include job control, command line
204 editing, command history and aliases.  Each of these features is
205 described in this manual.
206
207 @node Definitions
208 @chapter Definitions
209 These definitions are used throughout the remainder of this manual.
210
211 @table @code
212
213 @item POSIX
214 @cindex POSIX
215 A family of open system standards based on Unix.  Bash
216 is primarily concerned with the Shell and Utilities portion of the
217 @sc{posix} 1003.1 standard. 
218
219 @item blank
220 A space or tab character.
221
222 @item builtin
223 @cindex builtin
224 A command that is implemented internally by the shell itself, rather
225 than by an executable program somewhere in the file system.
226
227 @item control operator
228 @cindex control operator
229 A @code{token} that performs a control function.  It is a @code{newline}
230 or one of the following:
231 @samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;},
232 @samp{|}, @samp{|&}, @samp{(}, or @samp{)}.
233
234 @item exit status
235 @cindex exit status
236 The value returned by a command to its caller.  The value is restricted
237 to eight bits, so the maximum value is 255.
238
239 @item field
240 @cindex field
241 A unit of text that is the result of one of the shell expansions.  After
242 expansion, when executing a command, the resulting fields are used as
243 the command name and arguments.
244
245 @item filename
246 @cindex filename
247 A string of characters used to identify a file.
248
249 @item job
250 @cindex job
251 A set of processes comprising a pipeline, and any processes descended
252 from it, that are all in the same process group.
253
254 @item job control
255 @cindex job control
256 A mechanism by which users can selectively stop (suspend) and restart
257 (resume) execution of processes.
258
259 @item metacharacter
260 @cindex metacharacter
261 A character that, when unquoted, separates words.  A metacharacter is
262 a @code{blank} or one of the following characters:
263 @samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or
264 @samp{>}.
265
266 @item name
267 @cindex name
268 @cindex identifier
269 A @code{word} consisting solely of letters, numbers, and underscores,
270 and beginning with a letter or underscore.  @code{Name}s are used as
271 shell variable and function names.
272 Also referred to as an @code{identifier}.
273
274 @item operator
275 @cindex operator, shell
276 A @code{control operator} or a @code{redirection operator}.
277 @xref{Redirections}, for a list of redirection operators.
278 Operators contain at least one unquoted @code{metacharacter}.
279
280 @item process group
281 @cindex process group
282 A collection of related processes each having the same process
283 group @sc{id}.
284
285 @item process group ID
286 @cindex process group ID
287 A unique identifier that represents a @code{process group}
288 during its lifetime.
289
290 @item reserved word
291 @cindex reserved word
292 A @code{word} that has a special meaning to the shell.  Most reserved
293 words introduce shell flow control constructs, such as @code{for} and
294 @code{while}.
295
296 @item return status
297 @cindex return status
298 A synonym for @code{exit status}.
299
300 @item signal
301 @cindex signal
302 A mechanism by which a process may be notified by the kernel
303 of an event occurring in the system.
304
305 @item special builtin
306 @cindex special builtin
307 A shell builtin command that has been classified as special by the
308 @sc{posix} standard.
309
310 @item token
311 @cindex token
312 A sequence of characters considered a single unit by the shell.
313 It is either a @code{word} or an @code{operator}.
314
315 @item word
316 @cindex word
317 A sequence of characters treated as a unit by the shell.
318 Words may not include unquoted @code{metacharacters}.
319 @end table
320
321 @node Basic Shell Features
322 @chapter Basic Shell Features
323 @cindex Bourne shell
324
325 Bash is an acronym for @samp{Bourne-Again SHell}.
326 The Bourne shell is
327 the traditional Unix shell originally written by Stephen Bourne.
328 All of the Bourne shell builtin commands are available in Bash,
329 The rules for evaluation and quoting are taken from the @sc{posix}
330 specification for the `standard' Unix shell.
331
332 This chapter briefly summarizes the shell's `building blocks':
333 commands, control structures, shell functions, shell @i{parameters},
334 shell expansions,
335 @i{redirections}, which are a way to direct input and output from
336 and to named files, and how the shell executes commands.
337
338 @menu
339 * Shell Syntax::                What your input means to the shell.
340 * Shell Commands::              The types of commands you can use.
341 * Shell Functions::             Grouping commands by name.
342 * Shell Parameters::            How the shell stores values.
343 * Shell Expansions::            How Bash expands parameters and the various
344                                 expansions available.
345 * Redirections::                A way to control where input and output go.
346 * Executing Commands::          What happens when you run a command.
347 * Shell Scripts::               Executing files of shell commands.
348 @end menu
349
350 @node Shell Syntax
351 @section Shell Syntax
352 @menu
353 * Shell Operation::     The basic operation of the shell.
354 * Quoting::             How to remove the special meaning from characters.
355 * Comments::            How to specify comments.
356 @end menu
357
358 When the shell reads input, it proceeds through a
359 sequence of operations.  If the input indicates the beginning of a
360 comment, the shell ignores the comment symbol (@samp{#}), and the rest
361 of that line.
362                                 
363 Otherwise, roughly speaking,  the shell reads its input and
364 divides the input into words and operators, employing the quoting rules
365 to select which meanings to assign various words and characters.
366
367 The shell then parses these tokens into commands and other constructs,
368 removes the special meaning of certain words or characters, expands
369 others, redirects input and output as needed, executes the specified
370 command, waits for the command's exit status, and makes that exit status
371 available for further inspection or processing.
372
373 @node Shell Operation
374 @subsection Shell Operation
375
376 The following is a brief description of the shell's operation when it
377 reads and executes a command.  Basically, the shell does the
378 following:
379
380 @enumerate
381 @item
382 Reads its input from a file (@pxref{Shell Scripts}), from a string
383 supplied as an argument to the @option{-c} invocation option
384 (@pxref{Invoking Bash}), or from the user's terminal.
385
386 @item
387 Breaks the input into words and operators, obeying the quoting rules
388 described in @ref{Quoting}.  These tokens are separated by
389 @code{metacharacters}.  Alias expansion is performed by this step
390 (@pxref{Aliases}).
391
392 @item
393 Parses the tokens into simple and compound commands
394 (@pxref{Shell Commands}).
395
396 @item
397 Performs the various shell expansions (@pxref{Shell Expansions}), breaking
398 the expanded tokens into lists of filenames (@pxref{Filename Expansion})
399 and commands and arguments.
400
401 @item
402 Performs any necessary redirections (@pxref{Redirections}) and removes
403 the redirection operators and their operands from the argument list.
404
405 @item
406 Executes the command (@pxref{Executing Commands}).
407
408 @item
409 Optionally waits for the command to complete and collects its exit
410 status (@pxref{Exit Status}).
411
412 @end enumerate
413
414 @node Quoting
415 @subsection Quoting
416 @cindex quoting
417 @menu
418 * Escape Character::    How to remove the special meaning from a single
419                         character.
420 * Single Quotes::       How to inhibit all interpretation of a sequence
421                         of characters.
422 * Double Quotes::       How to suppress most of the interpretation of a
423                         sequence of characters.
424 * ANSI-C Quoting::      How to expand ANSI-C sequences in quoted strings.
425 * Locale Translation::  How to translate strings into different languages.
426 @end menu
427
428 Quoting is used to remove the special meaning of certain
429 characters or words to the shell.  Quoting can be used to
430 disable special treatment for special characters, to prevent
431 reserved words from being recognized as such, and to prevent
432 parameter expansion.
433
434 Each of the shell metacharacters (@pxref{Definitions})
435 has special meaning to the shell and must be quoted if it is to
436 represent itself.
437 When the command history expansion facilities are being used
438 (@pxref{History Interaction}), the
439 @var{history expansion} character, usually @samp{!}, must be quoted
440 to prevent history expansion.  @xref{Bash History Facilities}, for
441 more details concerning history expansion.
442
443 There are three quoting mechanisms: the
444 @var{escape character}, single quotes, and double quotes.
445
446 @node Escape Character
447 @subsubsection Escape Character
448 A non-quoted backslash @samp{\} is the Bash escape character.
449 It preserves the literal value of the next character that follows,
450 with the exception of @code{newline}.  If a @code{\newline} pair
451 appears, and the backslash itself is not quoted, the @code{\newline}
452 is treated as a line continuation (that is, it is removed from
453 the input stream and effectively ignored).
454
455 @node Single Quotes
456 @subsubsection Single Quotes
457
458 Enclosing characters in single quotes (@samp{'}) preserves the literal value
459 of each character within the quotes.  A single quote may not occur
460 between single quotes, even when preceded by a backslash.
461
462 @node Double Quotes
463 @subsubsection Double Quotes
464
465 Enclosing characters in double quotes (@samp{"}) preserves the literal value
466 of all characters within the quotes, with the exception of
467 @samp{$}, @samp{`}, @samp{\},
468 and, when history expansion is enabled, @samp{!}.
469 The characters @samp{$} and @samp{`}
470 retain their special meaning within double quotes (@pxref{Shell Expansions}).
471 The backslash retains its special meaning only when followed by one of
472 the following characters:
473 @samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}.
474 Within double quotes, backslashes that are followed by one of these
475 characters are removed.  Backslashes preceding characters without a
476 special meaning are left unmodified.
477 A double quote may be quoted within double quotes by preceding it with
478 a backslash.
479 If enabled, history expansion will be performed unless an @samp{!}
480 appearing in double quotes is escaped using a backslash.
481 The backslash preceding the @samp{!} is not removed.
482
483 The special parameters @samp{*} and @samp{@@} have special meaning
484 when in double quotes (@pxref{Shell Parameter Expansion}).
485
486 @node ANSI-C Quoting
487 @subsubsection ANSI-C Quoting
488 @cindex quoting, ANSI
489
490 Words of the form @code{$'@var{string}'} are treated specially.  The
491 word expands to @var{string}, with backslash-escaped characters replaced
492 as specified by the ANSI C standard.  Backslash escape sequences, if
493 present, are decoded as follows:
494
495 @table @code
496 @item \a
497 alert (bell)
498 @item \b
499 backspace
500 @item \e
501 an escape character (not ANSI C)
502 @item \f
503 form feed
504 @item \n
505 newline
506 @item \r
507 carriage return
508 @item \t
509 horizontal tab
510 @item \v
511 vertical tab
512 @item \\
513 backslash
514 @item \'
515 single quote
516 @item \@var{nnn}
517 the eight-bit character whose value is the octal value @var{nnn}
518 (one to three digits)
519 @item \x@var{HH}
520 the eight-bit character whose value is the hexadecimal value @var{HH}
521 (one or two hex digits)
522 @item \c@var{x}
523 a control-@var{x} character
524 @end table
525
526 @noindent
527 The expanded result is single-quoted, as if the dollar sign had not
528 been present.
529
530 @node Locale Translation
531 @subsubsection Locale-Specific Translation
532 @cindex localization
533 @cindex internationalization
534 @cindex native languages
535 @cindex translation, native languages
536
537 A double-quoted string preceded by a dollar sign (@samp{$}) will cause
538 the string to be translated according to the current locale.
539 If the current locale is @code{C} or @code{POSIX}, the dollar sign
540 is ignored.
541 If the string is translated and replaced, the replacement is
542 double-quoted.
543
544 @vindex LC_MESSAGES
545 @vindex TEXTDOMAIN
546 @vindex TEXTDOMAINDIR
547 Some systems use the message catalog selected by the @env{LC_MESSAGES}
548 shell variable.  Others create the name of the message catalog from the
549 value of the @env{TEXTDOMAIN} shell variable, possibly adding a
550 suffix of @samp{.mo}.  If you use the @env{TEXTDOMAIN} variable, you
551 may need to set the @env{TEXTDOMAINDIR} variable to the location of
552 the message catalog files.  Still others use both variables in this
553 fashion:
554 @env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
555
556 @node Comments
557 @subsection Comments
558 @cindex comments, shell
559
560 In a non-interactive shell, or an interactive shell in which the
561 @code{interactive_comments} option to the @code{shopt}
562 builtin is enabled (@pxref{The Shopt Builtin}),
563 a word beginning with @samp{#}
564 causes that word and all remaining characters on that line to
565 be ignored.  An interactive shell without the @code{interactive_comments}
566 option enabled does not allow comments.  The @code{interactive_comments}
567 option is on by default in interactive shells.
568 @xref{Interactive Shells}, for a description of what makes
569 a shell interactive.
570
571 @node Shell Commands
572 @section Shell Commands
573 @cindex commands, shell
574
575 A simple shell command such as @code{echo a b c} consists of the command
576 itself followed by arguments, separated by spaces.
577
578 More complex shell commands are composed of simple commands arranged together
579 in a variety of ways: in a pipeline in which the output of one command
580 becomes the input of a second, in a loop or conditional construct, or in
581 some other grouping.
582
583 @menu
584 * Simple Commands::             The most common type of command.
585 * Pipelines::                   Connecting the input and output of several
586                                 commands.
587 * Lists::                       How to execute commands sequentially.
588 * Compound Commands::           Shell commands for control flow.
589 * Coprocesses::                 Two-way communication between commands.
590 @end menu
591
592 @node Simple Commands
593 @subsection Simple Commands
594 @cindex commands, simple
595
596 A simple command is the kind of command encountered most often.
597 It's just a sequence of words separated by @code{blank}s, terminated
598 by one of the shell's control operators (@pxref{Definitions}).  The
599 first word generally specifies a command to be executed, with the
600 rest of the words being that command's arguments.
601
602 The return status (@pxref{Exit Status}) of a simple command is
603 its exit status as provided
604 by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if
605 the command was terminated by signal @var{n}.
606
607 @node Pipelines
608 @subsection Pipelines
609 @cindex pipeline
610 @cindex commands, pipelines
611
612 A @code{pipeline} is a sequence of simple commands separated by one of
613 the control operators @samp{|} or @samp{|&}.
614
615 @rwindex time
616 @rwindex !
617 @cindex command timing
618 The format for a pipeline is
619 @example
620 [@code{time} [@code{-p}]] [@code{!}] @var{command1} [ [@code{|} or @code{|&}] @var{command2} @dots{}]
621 @end example
622
623 @noindent
624 The output of each command in the pipeline is connected via a pipe
625 to the input of the next command.
626 That is, each command reads the previous command's output.  This
627 connection is performed before any redirections specified by the
628 command.
629
630 If @samp{|&} is used, the standard error of @var{command1} is connected to
631 @var{command2}'s standard input through the pipe; it is shorthand for
632 @code{2>&1 |}.  This implicit redirection of the standard error is
633 performed after any redirections specified by the command.
634
635 The reserved word @code{time} causes timing statistics
636 to be printed for the pipeline once it finishes.
637 The statistics currently consist of elapsed (wall-clock) time and
638 user and system time consumed by the command's execution.
639 The @option{-p} option changes the output format to that specified
640 by @sc{posix}.
641 The @env{TIMEFORMAT} variable may be set to a format string that
642 specifies how the timing information should be displayed.
643 @xref{Bash Variables}, for a description of the available formats.
644 The use of @code{time} as a reserved word permits the timing of
645 shell builtins, shell functions, and pipelines.  An external
646 @code{time} command cannot time these easily.
647
648 If the pipeline is not executed asynchronously (@pxref{Lists}), the
649 shell waits for all commands in the pipeline to complete.
650
651 Each command in a pipeline is executed in its own subshell
652 (@pxref{Command Execution Environment}).  The exit
653 status of a pipeline is the exit status of the last command in the
654 pipeline, unless the @code{pipefail} option is enabled
655 (@pxref{The Set Builtin}).
656 If @code{pipefail} is enabled, the pipeline's return status is the
657 value of the last (rightmost) command to exit with a non-zero status,
658 or zero if all commands exit successfully.
659 If the reserved word @samp{!} precedes the pipeline, the
660 exit status is the logical negation of the exit status as described
661 above.
662 The shell waits for all commands in the pipeline to terminate before
663 returning a value.
664
665 @node Lists
666 @subsection Lists of Commands
667 @cindex commands, lists
668
669 A @code{list} is a sequence of one or more pipelines separated by one
670 of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||},
671 and optionally terminated by one of @samp{;}, @samp{&}, or a
672 @code{newline}.
673
674 Of these list operators, @samp{&&} and @samp{||}
675 have equal precedence, followed by @samp{;} and @samp{&},
676 which have equal precedence.
677
678 A sequence of one or more newlines may appear in a @code{list}
679 to delimit commands, equivalent to a semicolon.
680
681 If a command is terminated by the control operator @samp{&},
682 the shell executes the command asynchronously in a subshell.
683 This is known as executing the command in the @var{background}.
684 The shell does not wait for the command to finish, and the return
685 status is 0 (true).
686 When job control is not active (@pxref{Job Control}),
687 the standard input for asynchronous commands, in the absence of any
688 explicit redirections, is redirected from @code{/dev/null}.
689
690 Commands separated by a @samp{;} are executed sequentially; the shell
691 waits for each command to terminate in turn.  The return status is the
692 exit status of the last command executed.
693
694 @sc{and} and @sc{or} lists are sequences of one or more pipelines
695 separated by the control operators @samp{&&} and @samp{||},
696 respectively.  @sc{and} and @sc{or} lists are executed with left
697 associativity.
698
699 An @sc{and} list has the form
700 @example
701 @var{command1} && @var{command2}
702 @end example
703
704 @noindent
705 @var{command2} is executed if, and only if, @var{command1}
706 returns an exit status of zero.
707
708 An @sc{or} list has the form
709 @example
710 @var{command1} || @var{command2}
711 @end example
712
713 @noindent
714 @var{command2} is executed if, and only if, @var{command1}
715 returns a non-zero exit status.
716
717 The return status of
718 @sc{and} and @sc{or} lists is the exit status of the last command
719 executed in the list.
720
721 @node Compound Commands
722 @subsection Compound Commands
723 @cindex commands, compound
724
725 @menu
726 * Looping Constructs::          Shell commands for iterative action.
727 * Conditional Constructs::      Shell commands for conditional execution.
728 * Command Grouping::            Ways to group commands.
729 @end menu
730
731 Compound commands are the shell programming constructs.
732 Each construct begins with a reserved word or control operator and is
733 terminated by a corresponding reserved word or operator.
734 Any redirections (@pxref{Redirections}) associated with a compound command
735 apply to all commands within that compound command unless explicitly overridden.
736
737 Bash provides looping constructs, conditional commands, and mechanisms
738 to group commands and execute them as a unit.
739
740 @node Looping Constructs
741 @subsubsection Looping Constructs
742 @cindex commands, looping
743
744 Bash supports the following looping constructs.
745
746 Note that wherever a @samp{;} appears in the description of a
747 command's syntax, it may be replaced with one or more newlines.
748
749 @table @code
750 @item until
751 @rwindex until
752 @rwindex do
753 @rwindex done
754 The syntax of the @code{until} command is:
755 @example
756 until @var{test-commands}; do @var{consequent-commands}; done
757 @end example
758 Execute @var{consequent-commands} as long as
759 @var{test-commands} has an exit status which is not zero.
760 The return status is the exit status of the last command executed
761 in @var{consequent-commands}, or zero if none was executed.
762
763 @item while
764 @rwindex while
765 The syntax of the @code{while} command is:
766 @example
767 while @var{test-commands}; do @var{consequent-commands}; done
768 @end example
769
770 Execute @var{consequent-commands} as long as
771 @var{test-commands} has an exit status of zero.
772 The return status is the exit status of the last command executed
773 in @var{consequent-commands}, or zero if none was executed.
774
775 @item for
776 @rwindex for
777 The syntax of the @code{for} command is:
778
779 @example
780 for @var{name} [in @var{words} @dots{}]; do @var{commands}; done
781 @end example
782 Expand @var{words}, and execute @var{commands} once for each member
783 in the resultant list, with @var{name} bound to the current member.
784 If @samp{in @var{words}} is not present, the @code{for} command
785 executes the @var{commands} once for each positional parameter that is
786 set, as if @samp{in "$@@"} had been specified
787 (@pxref{Special Parameters}).
788 The return status is the exit status of the last command that executes.
789 If there are no items in the expansion of @var{words}, no commands are
790 executed, and the return status is zero.
791
792 An alternate form of the @code{for} command is also supported:
793
794 @example
795 for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done
796 @end example
797 First, the arithmetic expression @var{expr1} is evaluated according
798 to the rules described below (@pxref{Shell Arithmetic}).
799 The arithmetic expression @var{expr2} is then evaluated repeatedly
800 until it evaluates to zero.   
801 Each time @var{expr2} evaluates to a non-zero value, @var{commands} are
802 executed and the arithmetic expression @var{expr3} is evaluated.       
803 If any expression is omitted, it behaves as if it evaluates to 1.
804 The return value is the exit status of the last command in @var{list}
805 that is executed, or false if any of the expressions is invalid.
806
807 @end table
808
809 The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins})
810 may be used to control loop execution.
811
812 @node Conditional Constructs
813 @subsubsection Conditional Constructs
814 @cindex commands, conditional
815
816 @table @code
817 @item if
818 @rwindex if
819 @rwindex then
820 @rwindex else
821 @rwindex elif
822 @rwindex fi
823 The syntax of the @code{if} command is:
824
825 @example
826 if @var{test-commands}; then
827   @var{consequent-commands};
828 [elif @var{more-test-commands}; then
829   @var{more-consequents};]
830 [else @var{alternate-consequents};]
831 fi
832 @end example
833
834 The @var{test-commands} list is executed, and if its return status is zero,
835 the @var{consequent-commands} list is executed.
836 If @var{test-commands} returns a non-zero status, each @code{elif} list
837 is executed in turn, and if its exit status is zero,
838 the corresponding @var{more-consequents} is executed and the   
839 command completes.
840 If @samp{else @var{alternate-consequents}} is present, and
841 the final command in the final @code{if} or @code{elif} clause
842 has a non-zero exit status, then @var{alternate-consequents} is executed.
843 The return status is the exit status of the last command executed, or
844 zero if no condition tested true.
845
846 @item case
847 @rwindex case
848 @rwindex in
849 @rwindex esac
850 The syntax of the @code{case} command is:
851
852 @example
853 @code{case @var{word} in [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{} esac}
854 @end example
855
856 @code{case} will selectively execute the @var{command-list} corresponding to
857 the first @var{pattern} that matches @var{word}.
858 If the shell option @code{nocasematch}
859 (see the description of @code{shopt} in @ref{The Shopt Builtin})
860 is enabled, the match is performed without regard to the case
861 of alphabetic characters.
862 The @samp{|} is used to separate multiple patterns, and the @samp{)}
863 operator terminates a pattern list.
864 A list of patterns and an associated command-list is known
865 as a @var{clause}.
866
867 Each clause must be terminated with @samp{;;}, @samp{,&}, or @samp{;;&}.
868 The @var{word} undergoes tilde expansion, parameter expansion, command
869 substitution, arithmetic expansion, and quote removal before matching is
870 attempted.  Each @var{pattern} undergoes tilde expansion, parameter
871 expansion, command substitution, and arithmetic expansion.
872
873 There may be an arbitrary number of @code{case} clauses, each terminated
874 by a @samp{;;}, @samp{;&}, or @samp{;;&}.
875 The first pattern that matches determines the
876 command-list that is executed.
877
878 Here is an example using @code{case} in a script that could be used to
879 describe one interesting feature of an animal:
880
881 @example
882 echo -n "Enter the name of an animal: "
883 read ANIMAL
884 echo -n "The $ANIMAL has "
885 case $ANIMAL in
886   horse | dog | cat) echo -n "four";;
887   man | kangaroo ) echo -n "two";;
888   *) echo -n "an unknown number of";;
889 esac
890 echo " legs."
891 @end example
892
893 @noindent
894
895 If the @samp{;;} operator is used, no subsequent matches are attempted after
896 the first pattern match.
897 Using @samp{;&}  in place of @samp{;;} causes execution to continue with
898 the @var{command-list} associated with the next clause, if any.
899 Using @samp{;;&} in place of @samp{;;} causes the shell to test the patterns
900 in the next clause, if any, and execute any associated @var{command-list}
901 on a successful match.
902
903 The return status is zero if no @var{pattern} is matched.  Otherwise, the
904 return status is the exit status of the @var{command-list} executed.
905
906 @item select
907 @rwindex select
908
909 The @code{select} construct allows the easy generation of menus.
910 It has almost the same syntax as the @code{for} command:
911
912 @example
913 select @var{name} [in @var{words} @dots{}]; do @var{commands}; done
914 @end example
915
916 The list of words following @code{in} is expanded, generating a list
917 of items.  The set of expanded words is printed on the standard
918 error output stream, each preceded by a number.  If the
919 @samp{in @var{words}} is omitted, the positional parameters are printed,
920 as if @samp{in "$@@"} had been specified.
921 The @env{PS3} prompt is then displayed and a line is read from the
922 standard input.
923 If the line consists of a number corresponding to one of the displayed
924 words, then the value of @var{name} is set to that word.
925 If the line is empty, the words and prompt are displayed again.
926 If @code{EOF} is read, the @code{select} command completes.
927 Any other value read causes @var{name} to be set to null.
928 The line read is saved in the variable @env{REPLY}.
929
930 The @var{commands} are executed after each selection until a
931 @code{break} command is executed, at which
932 point the @code{select} command completes.
933
934 Here is an example that allows the user to pick a filename from the
935 current directory, and displays the name and index of the file
936 selected.
937
938 @example
939 select fname in *;
940 do
941         echo you picked $fname \($REPLY\)
942         break;
943 done
944 @end example
945
946 @item ((@dots{}))
947 @example
948 (( @var{expression} ))
949 @end example
950
951 The arithmetic @var{expression} is evaluated according to the rules
952 described below (@pxref{Shell Arithmetic}).
953 If the value of the expression is non-zero, the return status is 0;
954 otherwise the return status is 1.  This is exactly equivalent to
955 @example
956 let "@var{expression}"
957 @end example
958 @noindent
959 @xref{Bash Builtins}, for a full description of the @code{let} builtin.
960
961 @item [[@dots{}]]
962 @rwindex [[
963 @rwindex ]]
964 @example
965 [[ @var{expression} ]]
966 @end example
967
968 Return a status of 0 or 1 depending on the evaluation of
969 the conditional expression @var{expression}.
970 Expressions are composed of the primaries described below in
971 @ref{Bash Conditional Expressions}.
972 Word splitting and filename expansion are not performed on the words
973 between the @samp{[[} and @samp{]]}; tilde expansion, parameter and
974 variable expansion, arithmetic expansion, command substitution, process
975 substitution, and quote removal are performed.
976 Conditional operators such as @samp{-f} must be unquoted to be recognized
977 as primaries.
978
979 When the @samp{==} and @samp{!=} operators are used, the string to the
980 right of the operator is considered a pattern and matched according
981 to the rules described below in @ref{Pattern Matching}.
982 If the shell option @code{nocasematch}
983 (see the description of @code{shopt} in @ref{The Shopt Builtin})
984 is enabled, the match is performed without regard to the case
985 of alphabetic characters.
986 The return value is 0 if the string matches (@samp{==}) or does not
987 match (@samp{!=})the pattern, and 1 otherwise.
988 Any part of the pattern may be quoted to force it to be matched as a
989 string.
990
991 An additional binary operator, @samp{=~}, is available, with the same
992 precedence as @samp{==} and @samp{!=}.
993 When it is used, the string to the right of the operator is considered
994 an extended regular expression and matched accordingly (as in @i{regex}3)).  
995 The return value is 0 if the string matches
996 the pattern, and 1 otherwise.
997 If the regular expression is syntactically incorrect, the conditional
998 expression's return value is 2.
999 If the shell option @code{nocasematch}
1000 (see the description of @code{shopt} in @ref{The Shopt Builtin})
1001 is enabled, the match is performed without regard to the case
1002 of alphabetic characters.
1003 Any part of the pattern may be quoted to force it to be matched as a
1004 string.
1005 Substrings matched by parenthesized subexpressions within the regular
1006 expression are saved in the array variable @code{BASH_REMATCH}.
1007 The element of @code{BASH_REMATCH} with index 0 is the portion of the string
1008 matching the entire regular expression.
1009 The element of @code{BASH_REMATCH} with index @var{n} is the portion of the
1010 string matching the @var{n}th parenthesized subexpression.
1011
1012 Expressions may be combined using the following operators, listed
1013 in decreasing order of precedence:
1014
1015 @table @code
1016 @item ( @var{expression} )
1017 Returns the value of @var{expression}.
1018 This may be used to override the normal precedence of operators.
1019
1020 @item ! @var{expression}
1021 True if @var{expression} is false.
1022
1023 @item @var{expression1} && @var{expression2}
1024 True if both @var{expression1} and @var{expression2} are true.
1025
1026 @item @var{expression1} || @var{expression2}
1027 True if either @var{expression1} or @var{expression2} is true.
1028 @end table
1029 @noindent
1030 The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the
1031 value of @var{expression1} is sufficient to determine the return
1032 value of the entire conditional expression.
1033
1034 @end table
1035
1036 @node Command Grouping
1037 @subsubsection Grouping Commands
1038 @cindex commands, grouping
1039
1040 Bash provides two ways to group a list of commands to be executed
1041 as a unit.  When commands are grouped, redirections may be applied
1042 to the entire command list.  For example, the output of all the
1043 commands in the list may be redirected to a single stream.
1044
1045 @table @code
1046 @item ()
1047 @example
1048 ( @var{list} )
1049 @end example
1050
1051 Placing a list of commands between parentheses causes a subshell
1052 environment to be created (@pxref{Command Execution Environment}), and each
1053 of the commands in @var{list} to be executed in that subshell.  Since the
1054 @var{list} is executed in a subshell, variable assignments do not remain in
1055 effect after the subshell completes. 
1056
1057 @item @{@}
1058 @rwindex @{
1059 @rwindex @}
1060 @example
1061 @{ @var{list}; @}
1062 @end example
1063
1064 Placing a list of commands between curly braces causes the list to
1065 be executed in the current shell context.  No subshell is created.
1066 The semicolon (or newline) following @var{list} is required.
1067 @end table
1068
1069 In addition to the creation of a subshell, there is a subtle difference
1070 between these two constructs due to historical reasons.  The braces
1071 are @code{reserved words}, so they must be separated from the @var{list}
1072 by @code{blank}s or other shell metacharacters.
1073 The parentheses are @code{operators}, and are
1074 recognized as separate tokens by the shell even if they are not separated
1075 from the @var{list} by whitespace.
1076
1077 The exit status of both of these constructs is the exit status of
1078 @var{list}.
1079
1080 @node Coprocesses
1081 @subsection Coprocesses
1082 @cindex coprocess
1083
1084 A @code{coprocess} is a shell command preceded by the @code{coproc}
1085 reserved word.
1086 A coprocess is executed asynchronously in a subshell, as if the command
1087 had been terminated with the @samp{&} control operator, with a two-way pipe
1088 established between the executing shell and the coprocess.
1089
1090 The format for a coprocess is:
1091 @example
1092 @code{coproc} [@var{NAME}] @var{command} [@var{redirections}]
1093 @end example
1094
1095 @noindent
1096 This creates a coprocess named @var{NAME}.
1097 If @var{NAME} is not supplied, the default name is @var{COPROC}.
1098 @var{NAME} must not be supplied if @var{command} is a simple
1099 command (@pxref{Simple Commands}); otherwise, it is interpreted as
1100 the first word of the simple command.
1101
1102 When the coproc is executed, the shell creates an array variable
1103 (@pxref{Arrays})
1104 named @var{NAME} in the context of the executing shell.
1105 The standard output of @var{command}
1106 is connected via a pipe to a file descriptor in the executing shell,
1107 and that file descriptor is assigned to @var{NAME}[0].
1108 The standard input of @var{command}
1109 is connected via a pipe to a file descriptor in the executing shell,
1110 and that file descriptor is assigned to @var{NAME}[1].
1111 This pipe is established before any redirections specified by the
1112 command (@pxref{Redirections}).
1113 The file descriptors can be utilized as arguments to shell commands
1114 and redirections using standard word expansions.
1115
1116 The process id of the shell spawned to execute the coprocess is
1117 available as the value of the variable @var{NAME}_PID.
1118 The @code{wait}
1119 builtin command may be used to wait for the coprocess to terminate.
1120
1121 The return status of a coprocess is the exit status of @var{command}.
1122
1123 @node Shell Functions
1124 @section Shell Functions
1125 @cindex shell function
1126 @cindex functions, shell
1127
1128 Shell functions are a way to group commands for later execution
1129 using a single name for the group.  They are executed just like
1130 a "regular" command.
1131 When the name of a shell function is used as a simple command name,
1132 the list of commands associated with that function name is executed.
1133 Shell functions are executed in the current
1134 shell context; no new process is created to interpret them.
1135
1136 Functions are declared using this syntax:
1137 @rwindex function
1138 @example
1139 [ @code{function} ] @var{name} () @var{compound-command} [ @var{redirections} ]
1140 @end example
1141
1142 This defines a shell function named @var{name}.  The reserved
1143 word @code{function} is optional.
1144 If the @code{function} reserved
1145 word is supplied, the parentheses are optional.
1146 The @var{body} of the function is the compound command
1147 @var{compound-command} (@pxref{Compound Commands}).
1148 That command is usually a @var{list} enclosed between @{ and @}, but
1149 may be any compound command listed above.
1150 @var{compound-command} is executed whenever @var{name} is specified as the
1151 name of a command.
1152 Any redirections (@pxref{Redirections}) associated with the shell function
1153 are performed when the function is executed.
1154
1155 A function definition may be deleted using the @option{-f} option to the
1156 @code{unset} builtin (@pxref{Bourne Shell Builtins}).
1157
1158 The exit status of a function definition is zero unless a syntax error
1159 occurs or a readonly function with the same name already exists.
1160 When executed, the exit status of a function is the exit status of the
1161 last command executed in the body.
1162
1163 Note that for historical reasons, in the most common usage the curly braces
1164 that surround the body of the function must be separated from the body by
1165 @code{blank}s or newlines.
1166 This is because the braces are reserved words and are only recognized
1167 as such when they are separated from the command list
1168 by whitespace or another shell metacharacter.
1169 Also, when using the braces, the @var{list} must be terminated by a semicolon,
1170 a @samp{&}, or a newline.
1171
1172 When a function is executed, the arguments to the
1173 function become the positional parameters
1174 during its execution (@pxref{Positional Parameters}).
1175 The special parameter @samp{#} that expands to the number of
1176 positional parameters is updated to reflect the change.
1177 Special parameter @code{0} is unchanged.
1178 The first element of the @env{FUNCNAME} variable is set to the
1179 name of the function while the function is executing.
1180 All other aspects of the shell execution
1181 environment are identical between a function and its caller
1182 with the exception that the @env{DEBUG} and @env{RETURN} traps
1183 are not inherited unless the function has been given the
1184 @code{trace} attribute using the @code{declare} builtin or
1185 the @code{-o functrace} option has been enabled with
1186 the @code{set} builtin,
1187 (in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps).
1188 @xref{Bourne Shell Builtins}, for the description of the
1189 @code{trap} builtin.
1190
1191 If the builtin command @code{return}
1192 is executed in a function, the function completes and
1193 execution resumes with the next command after the function
1194 call.
1195 Any command associated with the @code{RETURN} trap is executed
1196 before execution resumes.
1197 When a function completes, the values of the
1198 positional parameters and the special parameter @samp{#}
1199 are restored to the values they had prior to the function's
1200 execution.  If a numeric argument is given to @code{return},
1201 that is the function's return status; otherwise the function's
1202 return status is the exit status of the last command executed
1203 before the @code{return}.
1204
1205 Variables local to the function may be declared with the
1206 @code{local} builtin.  These variables are visible only to
1207 the function and the commands it invokes.
1208
1209 Function names and definitions may be listed with the
1210 @option{-f} option to the @code{declare} or @code{typeset}
1211 builtin commands (@pxref{Bash Builtins}).
1212 The @option{-F} option to @code{declare} or @code{typeset}
1213 will list the function names only
1214 (and optionally the source file and line number, if the @code{extdebug}
1215 shell option is enabled).
1216 Functions may be exported so that subshells
1217 automatically have them defined with the
1218 @option{-f} option to the @code{export} builtin
1219 (@pxref{Bourne Shell Builtins}).
1220 Note that shell functions and variables with the same name may result
1221 in multiple identically-named entries in the environment passed to the
1222 shell's children.
1223 Care should be taken in cases where this may cause a problem.
1224
1225 Functions may be recursive.  No limit is placed on the number of
1226 recursive  calls.
1227
1228 @node Shell Parameters
1229 @section Shell Parameters
1230 @cindex parameters
1231 @cindex variable, shell
1232 @cindex shell variable
1233
1234 @menu
1235 * Positional Parameters::       The shell's command-line arguments.
1236 * Special Parameters::          Parameters denoted by special characters.
1237 @end menu
1238
1239 A @var{parameter} is an entity that stores values.
1240 It can be a @code{name}, a number, or one of the special characters
1241 listed below.
1242 A @var{variable} is a parameter denoted by a @code{name}.
1243 A variable has a @var{value} and zero or more @var{attributes}.
1244 Attributes are assigned using the @code{declare} builtin command
1245 (see the description of the @code{declare} builtin in @ref{Bash Builtins}).
1246
1247 A parameter is set if it has been assigned a value.  The null string is
1248 a valid value.  Once a variable is set, it may be unset only by using
1249 the @code{unset} builtin command.
1250
1251 A variable may be assigned to by a statement of the form
1252 @example
1253 @var{name}=[@var{value}]
1254 @end example
1255 @noindent
1256 If @var{value}
1257 is not given, the variable is assigned the null string.  All
1258 @var{value}s undergo tilde expansion, parameter and variable expansion,
1259 command substitution, arithmetic expansion, and quote
1260 removal (detailed below).  If the variable has its @code{integer}
1261 attribute set, then @var{value} 
1262 is evaluated as an arithmetic expression even if the @code{$((@dots{}))}
1263 expansion is not used (@pxref{Arithmetic Expansion}).
1264 Word splitting is not performed, with the exception
1265 of @code{"$@@"} as explained below.
1266 Filename expansion is not performed.
1267 Assignment statements may also appear as arguments to the
1268 @code{alias}, 
1269 @code{declare}, @code{typeset}, @code{export}, @code{readonly},
1270 and @code{local} builtin commands.
1271
1272 In the context where an assignment statement is assigning a value  
1273 to a shell variable or array index (@pxref{Arrays}), the @samp{+=}
1274 operator can be used to   
1275 append to or add to the variable's previous value.
1276 When @samp{+=} is applied to a variable for which the integer attribute
1277 has been set, @var{value} is evaluated as an arithmetic expression and
1278 added to the variable's current value, which is also evaluated.
1279 When @samp{+=} is applied to an array variable using compound assignment
1280 (@pxref{Arrays}), the
1281 variable's value is not unset (as it is when using @samp{=}), and new
1282 values are appended to the array beginning at one greater than the array's
1283 maximum index (for indexed arrays),  or added as additional key-value pairs
1284 in an associative array.
1285 When applied to a string-valued variable, @var{value} is expanded and
1286 appended to the variable's value.
1287
1288 @node Positional Parameters
1289 @subsection Positional Parameters
1290 @cindex parameters, positional
1291
1292 A @var{positional parameter} is a parameter denoted by one or more
1293 digits, other than the single digit @code{0}.  Positional parameters are
1294 assigned from the shell's arguments when it is invoked,
1295 and may be reassigned using the @code{set} builtin command.
1296 Positional parameter @code{N} may be referenced as @code{$@{N@}}, or
1297 as @code{$N} when @code{N} consists of a single digit.
1298 Positional parameters may not be assigned to with assignment statements.
1299 The @code{set} and @code{shift} builtins are used to set and
1300 unset them (@pxref{Shell Builtin Commands}).
1301 The positional parameters are
1302 temporarily replaced when a shell function is executed
1303 (@pxref{Shell Functions}).
1304
1305 When a positional parameter consisting of more than a single
1306 digit is expanded, it must be enclosed in braces.
1307
1308 @node Special Parameters
1309 @subsection Special Parameters
1310 @cindex parameters, special
1311
1312 The shell treats several parameters specially.  These parameters may
1313 only be referenced; assignment to them is not allowed.
1314
1315 @vtable @code
1316
1317 @item *
1318 Expands to the positional parameters, starting from one.  When the
1319 expansion occurs within double quotes, it expands to a single word
1320 with the value of each parameter separated by the first character
1321 of the @env{IFS}
1322 special variable.  That is, @code{"$*"} is equivalent
1323 to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c}
1324 is the first character of the value of the @code{IFS}
1325 variable.
1326 If @env{IFS} is unset, the parameters are separated by spaces.
1327 If @env{IFS} is null, the parameters are joined without intervening
1328 separators.
1329
1330
1331 @item @@
1332 Expands to the positional parameters, starting from one.  When the
1333 expansion occurs within double quotes, each parameter expands to a
1334 separate word.  That is, @code{"$@@"} is equivalent to
1335 @code{"$1" "$2" @dots{}}.
1336 If the double-quoted expansion occurs within a word, the expansion of
1337 the first parameter is joined with the beginning part of the original
1338 word, and the expansion of the last parameter is joined with the last
1339 part of the original word.
1340 When there are no positional parameters, @code{"$@@"} and
1341 @code{$@@}
1342 expand to nothing (i.e., they are removed).
1343
1344 @item #
1345 Expands to the number of positional parameters in decimal.
1346
1347 @item ?
1348 Expands to the exit status of the most recently executed foreground
1349 pipeline.
1350
1351 @item -
1352 (A hyphen.)  Expands to the current option flags as specified upon
1353 invocation, by the @code{set}
1354 builtin command, or those set by the shell itself
1355 (such as the @option{-i} option).
1356
1357 @item $
1358 Expands to the process @sc{id} of the shell.  In a @code{()} subshell, it
1359 expands to the process @sc{id} of the invoking shell, not the subshell.
1360
1361 @item !
1362 Expands to the process @sc{id} of the most recently executed background
1363 (asynchronous) command.
1364
1365 @item 0
1366 Expands to the name of the shell or shell script.  This is set at
1367 shell initialization.  If Bash is invoked with a file of commands
1368 (@pxref{Shell Scripts}), @code{$0} is set to the name of that file.
1369 If Bash is started with the @option{-c} option (@pxref{Invoking Bash}),
1370 then @code{$0} is set to the first argument after the string to be
1371 executed, if one is present.  Otherwise, it is set
1372 to the filename used to invoke Bash, as given by argument zero.
1373
1374 @item _
1375 (An underscore.)
1376 At shell startup, set to the absolute pathname used to invoke the
1377 shell or shell script being executed as passed in the environment
1378 or argument list.
1379 Subsequently, expands to the last argument to the previous command,
1380 after expansion.   
1381 Also set to the full pathname used to invoke each command executed
1382 and placed in the environment exported to that command.
1383 When checking mail, this parameter holds the name of the mail file.
1384 @end vtable
1385
1386 @node Shell Expansions
1387 @section Shell Expansions
1388 @cindex expansion
1389
1390 Expansion is performed on the command line after it has been split into
1391 @code{token}s.  There are seven kinds of expansion performed:
1392 @itemize @bullet
1393 @item brace expansion
1394 @item tilde expansion
1395 @item parameter and variable expansion
1396 @item command substitution
1397 @item arithmetic expansion
1398 @item word splitting
1399 @item filename expansion
1400 @end itemize
1401
1402 @menu
1403 * Brace Expansion::             Expansion of expressions within braces.
1404 * Tilde Expansion::             Expansion of the ~ character.
1405 * Shell Parameter Expansion::   How Bash expands variables to their values.
1406 * Command Substitution::        Using the output of a command as an argument.
1407 * Arithmetic Expansion::        How to use arithmetic in shell expansions.
1408 * Process Substitution::        A way to write and read to and from a
1409                                 command.
1410 * Word Splitting::      How the results of expansion are split into separate
1411                         arguments.
1412 * Filename Expansion::  A shorthand for specifying filenames matching patterns.
1413 * Quote Removal::       How and when quote characters are removed from
1414                         words.
1415 @end menu
1416
1417 The order of expansions is: brace expansion, tilde expansion,
1418 parameter, variable, and arithmetic expansion and
1419 command substitution
1420 (done in a left-to-right fashion), word splitting, and filename
1421 expansion.
1422
1423 On systems that can support it, there is an additional expansion
1424 available: @var{process substitution}.  This is performed at the
1425 same time as parameter, variable, and arithmetic expansion and
1426 command substitution.
1427
1428 Only brace expansion, word splitting, and filename expansion
1429 can change the number of words of the expansion; other expansions
1430 expand a single word to a single word.
1431 The only exceptions to this are the expansions of
1432 @code{"$@@"} (@pxref{Special Parameters}) and @code{"$@{@var{name}[@@]@}"}
1433 (@pxref{Arrays}).
1434
1435 After all expansions, @code{quote removal} (@pxref{Quote Removal})
1436 is performed.
1437
1438 @node Brace Expansion
1439 @subsection Brace Expansion
1440 @cindex brace expansion
1441 @cindex expansion, brace
1442
1443 Brace expansion is a mechanism by which arbitrary strings may be generated.
1444 This mechanism is similar to
1445 @var{filename expansion} (@pxref{Filename Expansion}),
1446 but the file names generated need not exist.
1447 Patterns to be brace expanded take the form of an optional @var{preamble},
1448 followed by either a series of comma-separated strings or a seqeunce expression
1449 between a pair of braces,
1450 followed by an optional @var{postscript}.
1451 The preamble is prefixed to each string contained within the braces, and
1452 the postscript is then appended to each resulting string, expanding left
1453 to right.
1454
1455 Brace expansions may be nested.
1456 The results of each expanded string are not sorted; left to right order
1457 is preserved.
1458 For example,
1459 @example
1460 bash$ echo a@{d,c,b@}e
1461 ade ace abe
1462 @end example
1463
1464 A sequence expression takes the form @code{@{@var{x}..@var{y}[@var{incr}]@}},
1465 where @var{x} and @var{y} are either integers or single characters,
1466 and @var{incr}, an optional increment, is an integer.
1467 When integers are supplied, the expression expands to each number between
1468 @var{x} and @var{y}, inclusive.
1469 Supplied integers may be prefixed with @samp{0} to force each term to have the
1470 same width.  When either @var{x} or @var{y} begins with a zero, the shell
1471 attempts to force all generated terms to contain the same number of digits,
1472 zero-padding where necessary.
1473 When characters are supplied, the expression expands to each character
1474 lexicographically between @var{x} and @var{y}, inclusive.  Note that
1475 both @var{x} and @var{y} must be of the same type.
1476 When the increment is supplied, it is used as the difference between
1477 each term.  The default increment is 1 or -1 as appropriate.
1478
1479 Brace expansion is performed before any other expansions,
1480 and any characters special to other expansions are preserved
1481 in the result.  It is strictly textual.  Bash
1482 does not apply any syntactic interpretation to the context of the
1483 expansion or the text between the braces.
1484 To avoid conflicts with parameter expansion, the string @samp{$@{}
1485 is not considered eligible for brace expansion.
1486
1487 A correctly-formed brace expansion must contain unquoted opening
1488 and closing braces, and at least one unquoted comma or a valid
1489 sequence expression.
1490 Any incorrectly formed brace expansion is left unchanged.
1491
1492 A @{ or @samp{,} may be quoted with a backslash to prevent its
1493 being considered part of a brace expression.
1494 To avoid conflicts with parameter expansion, the string @samp{$@{}
1495 is not considered eligible for brace expansion.
1496
1497 This construct is typically used as shorthand when the common
1498 prefix of the strings to be generated is longer than in the
1499 above example:
1500 @example
1501 mkdir /usr/local/src/bash/@{old,new,dist,bugs@}
1502 @end example
1503 or
1504 @example
1505 chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@}
1506 @end example
1507
1508 @node Tilde Expansion
1509 @subsection Tilde Expansion
1510 @cindex tilde expansion
1511 @cindex expansion, tilde
1512
1513 If a word begins with an unquoted tilde character (@samp{~}), all of the
1514 characters up to the first unquoted slash (or all characters,
1515 if there is no unquoted slash) are considered a @var{tilde-prefix}.
1516 If none of the characters in the tilde-prefix are quoted, the
1517 characters in the tilde-prefix following the tilde are treated as a
1518 possible @var{login name}.
1519 If this login name is the null string, the tilde is replaced with the
1520 value of the @env{HOME} shell variable.
1521 If @env{HOME} is unset, the home directory of the user executing the
1522 shell is substituted instead.
1523 Otherwise, the tilde-prefix is replaced with the home directory
1524 associated with the specified login name.
1525
1526 If the tilde-prefix is @samp{~+}, the value of
1527 the shell variable @env{PWD} replaces the tilde-prefix.
1528 If the tilde-prefix is @samp{~-}, the value of the shell variable
1529 @env{OLDPWD}, if it is set, is substituted.
1530
1531 If the characters following the tilde in the tilde-prefix consist of a
1532 number @var{N}, optionally prefixed by a @samp{+} or a @samp{-},
1533 the tilde-prefix is replaced with the
1534 corresponding element from the directory stack, as it would be displayed
1535 by the @code{dirs} builtin invoked with the characters following tilde
1536 in the tilde-prefix as an argument (@pxref{The Directory Stack}).
1537 If the tilde-prefix, sans the tilde, consists of a number without a
1538 leading @samp{+} or @samp{-}, @samp{+} is assumed.
1539
1540 If the login name is invalid, or the tilde expansion fails, the word is
1541 left unchanged.
1542
1543 Each variable assignment is checked for unquoted tilde-prefixes immediately
1544 following a @samp{:} or the first @samp{=}.
1545 In these cases, tilde expansion is also performed.
1546 Consequently, one may use file names with tildes in assignments to
1547 @env{PATH}, @env{MAILPATH}, and @env{CDPATH},
1548 and the shell assigns the expanded value.
1549
1550 The following table shows how Bash treats unquoted tilde-prefixes:
1551
1552 @table @code
1553 @item ~
1554 The value of @code{$HOME}
1555 @item ~/foo
1556 @file{$HOME/foo}
1557
1558 @item ~fred/foo
1559 The subdirectory @code{foo} of the home directory of the user
1560 @code{fred}
1561
1562 @item ~+/foo
1563 @file{$PWD/foo}
1564
1565 @item ~-/foo
1566 @file{$@{OLDPWD-'~-'@}/foo}
1567
1568 @item ~@var{N}
1569 The string that would be displayed by @samp{dirs +@var{N}}
1570
1571 @item ~+@var{N}
1572 The string that would be displayed by @samp{dirs +@var{N}}
1573
1574 @item ~-@var{N}
1575 The string that would be displayed by @samp{dirs -@var{N}}
1576
1577 @end table
1578
1579 @node Shell Parameter Expansion
1580 @subsection Shell Parameter Expansion
1581 @cindex parameter expansion
1582 @cindex expansion, parameter
1583
1584 The @samp{$} character introduces parameter expansion,
1585 command substitution, or arithmetic expansion.  The parameter name
1586 or symbol to be expanded may be enclosed in braces, which
1587 are optional but serve to protect the variable to be expanded from
1588 characters immediately following it which could be
1589 interpreted as part of the name.
1590
1591 When braces are used, the matching ending brace is the first @samp{@}}
1592 not escaped by a backslash or within a quoted string, and not within an
1593 embedded arithmetic expansion, command substitution, or parameter
1594 expansion.
1595
1596 The basic form of parameter expansion is $@{@var{parameter}@}.
1597 The value of @var{parameter} is substituted.  The braces are required
1598 when @var{parameter}
1599 is a positional parameter with more than one digit,
1600 or when @var{parameter}
1601 is followed by a character that is not to be
1602 interpreted as part of its name.
1603
1604 If the first character of @var{parameter} is an exclamation point,
1605 a level of variable indirection is introduced.
1606 Bash uses the value of the variable formed from the rest of
1607 @var{parameter} as the name of the variable; this variable is then
1608 expanded and that value is used in the rest of the substitution, rather
1609 than the value of @var{parameter} itself.
1610 This is known as @code{indirect expansion}.
1611 The exceptions to this are the expansions of $@{!@var{prefix*}@}
1612 and $@{!@var{name}[@@]@}
1613 described below.
1614 The exclamation point must immediately follow the left brace in order to
1615 introduce indirection.
1616
1617 In each of the cases below, @var{word} is subject to tilde expansion,
1618 parameter expansion, command substitution, and arithmetic expansion.
1619
1620 When not performing substring expansion, using the form described
1621 below, Bash tests for a parameter that is unset or null.
1622 Omitting the colon results in a test only for a parameter that is unset.
1623 Put another way, if the colon is included,
1624 the operator tests for both @var{parameter}'s existence and that its value
1625 is not null; if the colon is omitted, the operator tests only for existence.
1626
1627 @table @code
1628
1629 @item $@{@var{parameter}:@minus{}@var{word}@}
1630 If @var{parameter} is unset or null, the expansion of
1631 @var{word} is substituted.  Otherwise, the value of
1632 @var{parameter} is substituted.
1633
1634 @item $@{@var{parameter}:=@var{word}@}
1635 If @var{parameter}
1636 is unset or null, the expansion of @var{word}
1637 is assigned to @var{parameter}.
1638 The value of @var{parameter} is then substituted. 
1639 Positional parameters and special parameters may not be assigned to
1640 in this way.
1641
1642 @item $@{@var{parameter}:?@var{word}@}
1643 If @var{parameter}
1644 is null or unset, the expansion of @var{word} (or a message
1645 to that effect if @var{word}
1646 is not present) is written to the standard error and the shell, if it
1647 is not interactive, exits.  Otherwise, the value of @var{parameter} is
1648 substituted.
1649
1650 @item $@{@var{parameter}:+@var{word}@}
1651 If @var{parameter}
1652 is null or unset, nothing is substituted, otherwise the expansion of
1653 @var{word} is substituted.
1654
1655 @item $@{@var{parameter}:@var{offset}@}
1656 @itemx $@{@var{parameter}:@var{offset}:@var{length}@}
1657 Expands to up to @var{length} characters of @var{parameter}
1658 starting at the character specified by @var{offset}.
1659 If @var{length} is omitted, expands to the substring of
1660 @var{parameter} starting at the character specified by @var{offset}.
1661 @var{length} and @var{offset} are arithmetic expressions
1662 (@pxref{Shell Arithmetic}).
1663 This is referred to as Substring Expansion.
1664
1665 @var{length} must evaluate to a number greater than or equal to zero.
1666 If @var{offset} evaluates to a number less than zero, the value
1667 is used as an offset from the end of the value of @var{parameter}.
1668 If @var{parameter} is @samp{@@}, the result is @var{length} positional
1669 parameters beginning at @var{offset}.
1670 If @var{parameter} is an indexed array name subscripted
1671 by @samp{@@} or @samp{*}, the result is the @var{length}
1672 members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}.
1673 A negative @var{offset} is taken relative to one greater than the maximum
1674 index of the specified array.
1675 Substring expansion applied to an associative array produces undefined
1676 results.
1677
1678 Note that a negative offset must be separated from the colon by at least
1679 one space to avoid being confused with the @samp{:-} expansion.
1680 Substring indexing is zero-based unless the positional parameters
1681 are used, in which case the indexing starts at 1 by default.
1682 If @var{offset} is 0, and the positional parameters are used, @code{$@@} is
1683 prefixed to the list.
1684
1685 @item $@{!@var{prefix}*@}
1686 @itemx $@{!@var{prefix}@@@}
1687 Expands to the names of variables whose names begin with @var{prefix},
1688 separated by the first character of the @env{IFS} special variable.
1689 When @samp{@@} is used and the expansion appears within double quotes, each
1690 variable name expands to a separate word.
1691
1692 @item $@{!@var{name}[@@]@}
1693 @itemx $@{!@var{name}[*]@}
1694 If @var{name} is an array variable, expands to the list of array indices
1695 (keys) assigned in @var{name}.
1696 If @var{name} is not an array, expands to 0 if @var{name} is set and null
1697 otherwise.
1698 When @samp{@@} is used and the expansion appears within double quotes, each
1699 key expands to a separate word.
1700
1701 @item $@{#@var{parameter}@}
1702 The length in characters of the expanded value of @var{parameter} is
1703 substituted.
1704 If @var{parameter} is @samp{*} or @samp{@@}, the value substituted
1705 is the number of positional parameters.
1706 If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@}, 
1707 the value substituted is the number of elements in the array.
1708
1709 @item $@{@var{parameter}#@var{word}@}
1710 @itemx $@{@var{parameter}##@var{word}@}
1711 The @var{word}
1712 is expanded to produce a pattern just as in filename
1713 expansion (@pxref{Filename Expansion}).  If the pattern matches
1714 the beginning of the expanded value of @var{parameter},
1715 then the result of the expansion is the expanded value of @var{parameter}
1716 with the shortest matching pattern (the @samp{#} case) or the
1717 longest matching pattern (the @samp{##} case) deleted.
1718 If @var{parameter} is @samp{@@} or @samp{*},
1719 the pattern removal operation is applied to each positional
1720 parameter in turn, and the expansion is the resultant list.
1721 If @var{parameter} is an array variable subscripted with
1722 @samp{@@} or @samp{*},
1723 the pattern removal operation is applied to each member of the
1724 array in turn, and the expansion is the resultant list.
1725
1726 @item $@{@var{parameter}%@var{word}@}
1727 @itemx $@{@var{parameter}%%@var{word}@}
1728 The @var{word} is expanded to produce a pattern just as in
1729 filename expansion.
1730 If the pattern matches a trailing portion of the expanded value of
1731 @var{parameter}, then the result of the expansion is the value of
1732 @var{parameter} with the shortest matching pattern (the @samp{%} case)
1733 or the longest matching pattern (the @samp{%%} case) deleted.
1734 If @var{parameter} is @samp{@@} or @samp{*},
1735 the pattern removal operation is applied to each positional
1736 parameter in turn, and the expansion is the resultant list.
1737 If @var{parameter}
1738 is an array variable subscripted with @samp{@@} or @samp{*},
1739 the pattern removal operation is applied to each member of the
1740 array in turn, and the expansion is the resultant list.
1741
1742 @item $@{@var{parameter}/@var{pattern}/@var{string}@} 
1743
1744 The @var{pattern} is expanded to produce a pattern just as in
1745 filename expansion.
1746 @var{Parameter} is expanded and the longest match of @var{pattern}
1747 against its value is replaced with @var{string}.
1748 If @var{pattern} begins with @samp{/}, all matches of @var{pattern} are
1749 replaced with @var{string}.  Normally only the first match is replaced.
1750 If @var{pattern} begins with @samp{#}, it must match at the beginning
1751 of the expanded value of @var{parameter}.
1752 If @var{pattern} begins with @samp{%}, it must match at the end
1753 of the expanded value of @var{parameter}.
1754 If @var{string} is null, matches of @var{pattern} are deleted
1755 and the @code{/} following @var{pattern} may be omitted.
1756 If @var{parameter} is @samp{@@} or @samp{*},
1757 the substitution operation is applied to each positional
1758 parameter in turn, and the expansion is the resultant list.
1759 If @var{parameter}
1760 is an array variable subscripted with @samp{@@} or @samp{*},
1761 the substitution operation is applied to each member of the
1762 array in turn, and the expansion is the resultant list.
1763
1764 @item $@{@var{parameter}^@var{pattern}@}
1765 @itemx $@{@var{parameter}^^@var{pattern}@}
1766 @itemx $@{@var{parameter},@var{pattern}@}
1767 @itemx $@{@var{parameter},,@var{pattern}@}
1768 This expansion modifies the case of alphabetic characters in @var{parameter}.
1769 The @var{pattern} is expanded to produce a pattern just as in
1770 pathname expansion.
1771 The @samp{^} operator converts lowercase letters matching @var{pattern}
1772 to uppercase; the @samp{,} operator converts matching uppercase letters
1773 to lowercase.
1774 The @samp{^^} and @samp{,,} expansions convert each matched character in the
1775 expanded value; the @samp{^} and @samp{,} expansions match and convert only
1776 the first character in the expanded value.
1777 If @var{pattern} is omitted, it is treated like a @samp{?}, which matches
1778 every character.
1779 If @var{parameter} is @samp{@@} or @samp{*},
1780 the case modification operation is applied to each positional
1781 parameter in turn, and the expansion is the resultant list.
1782 If @var{parameter}
1783 is an array variable subscripted with @samp{@@} or @samp{*},
1784 the case modification operation is applied to each member of the
1785 array in turn, and the expansion is the resultant list.
1786
1787 @end table
1788
1789 @node Command Substitution
1790 @subsection Command Substitution
1791 @cindex command substitution
1792
1793 Command substitution allows the output of a command to replace
1794 the command itself.
1795 Command substitution occurs when a command is enclosed as follows:
1796 @example
1797 $(@var{command})
1798 @end example
1799 @noindent
1800 or
1801 @example
1802 `@var{command}`
1803 @end example
1804
1805 @noindent
1806 Bash performs the expansion by executing @var{command} and
1807 replacing the command substitution with the standard output of the
1808 command, with any trailing newlines deleted.
1809 Embedded newlines are not deleted, but they may be removed during
1810 word splitting.
1811 The command substitution @code{$(cat @var{file})} can be
1812 replaced by the equivalent but faster @code{$(< @var{file})}.
1813
1814 When the old-style backquote form of substitution is used,
1815 backslash retains its literal meaning except when followed by
1816 @samp{$}, @samp{`}, or @samp{\}. 
1817 The first backquote not preceded by a backslash terminates the
1818 command substitution.
1819 When using the @code{$(@var{command})} form, all characters between
1820 the parentheses make up the command; none are treated specially.
1821
1822 Command substitutions may be nested.  To nest when using the backquoted
1823 form, escape the inner backquotes with backslashes.
1824
1825 If the substitution appears within double quotes, word splitting and
1826 filename expansion are not performed on the results.
1827
1828 @node Arithmetic Expansion
1829 @subsection Arithmetic Expansion
1830 @cindex expansion, arithmetic
1831 @cindex arithmetic expansion
1832
1833 Arithmetic expansion allows the evaluation of an arithmetic expression
1834 and the substitution of the result.  The format for arithmetic expansion is:
1835
1836 @example
1837 $(( @var{expression} ))
1838 @end example
1839
1840 The expression is treated as if it were within double quotes, but
1841 a double quote inside the parentheses is not treated specially.
1842 All tokens in the expression undergo parameter expansion, command
1843 substitution, and quote removal.
1844 Arithmetic expansions may be nested. 
1845
1846 The evaluation is performed according to the rules listed below
1847 (@pxref{Shell Arithmetic}).
1848 If the expression is invalid, Bash prints a message indicating
1849 failure to the standard error and no substitution occurs.
1850
1851 @node Process Substitution
1852 @subsection Process Substitution
1853 @cindex process substitution
1854
1855 Process substitution is supported on systems that support named
1856 pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files.
1857 It takes the form of 
1858 @example
1859 <(@var{list})
1860 @end example
1861 @noindent
1862 or
1863 @example
1864 >(@var{list})
1865 @end example
1866 @noindent
1867 The process @var{list} is run with its input or output connected to a
1868 @sc{fifo} or some file in @file{/dev/fd}.  The name of this file is
1869 passed as an argument to the current command as the result of the
1870 expansion.  If the @code{>(@var{list})} form is used, writing to
1871 the file will provide input for @var{list}.  If the
1872 @code{<(@var{list})} form is used, the file passed as an
1873 argument should be read to obtain the output of @var{list}.
1874 Note that no space may appear between the @code{<} or @code{>}
1875 and the left parenthesis, otherwise the construct would be interpreted
1876 as a redirection.
1877
1878 When available, process substitution is performed simultaneously with
1879 parameter and variable expansion, command substitution, and arithmetic
1880 expansion.
1881
1882 @node Word Splitting
1883 @subsection Word Splitting
1884 @cindex word splitting
1885
1886 The shell scans the results of parameter expansion, command substitution,
1887 and arithmetic expansion that did not occur within double quotes for
1888 word splitting.
1889
1890 The shell treats each character of @env{$IFS} as a delimiter, and splits
1891 the results of the other expansions into words on these characters.
1892 If @env{IFS} is unset, or its value is exactly @code{<space><tab><newline>},
1893 the default, then sequences of
1894 @code{ <space>}, @code{<tab>}, and @code{<newline>}
1895 at the beginning and end of the results of the previous
1896 expansions are ignored, and any sequence of @env{IFS}
1897 characters not at the beginning or end serves to delimit words.
1898 If @env{IFS} has a value other than the default, then sequences of
1899 the whitespace characters @code{space} and @code{tab}
1900 are ignored at the beginning and end of the
1901 word, as long as the whitespace character is in the
1902 value of @env{IFS} (an @env{IFS} whitespace character).
1903 Any character in @env{IFS} that is not @env{IFS}
1904 whitespace, along with any adjacent @env{IFS}
1905 whitespace characters, delimits a field.  A sequence of @env{IFS}
1906 whitespace characters is also treated as a delimiter.
1907 If the value of @env{IFS} is null, no word splitting occurs.
1908
1909 Explicit null arguments (@code{""} or @code{''}) are retained.
1910 Unquoted implicit null arguments, resulting from the expansion of
1911 parameters that have no values, are removed.
1912 If a parameter with no value is expanded within double quotes, a
1913 null argument results and is retained.
1914
1915 Note that if no expansion occurs, no splitting
1916 is performed.
1917
1918 @node Filename Expansion
1919 @subsection Filename Expansion
1920 @menu
1921 * Pattern Matching::    How the shell matches patterns.
1922 @end menu
1923 @cindex expansion, filename
1924 @cindex expansion, pathname
1925 @cindex filename expansion
1926 @cindex pathname expansion
1927
1928 After word splitting, unless the @option{-f} option has been set
1929 (@pxref{The Set Builtin}), Bash scans each word for the characters
1930 @samp{*}, @samp{?}, and @samp{[}.
1931 If one of these characters appears, then the word is
1932 regarded as a @var{pattern},
1933 and replaced with an alphabetically sorted list of
1934 file names matching the pattern. If no matching file names are found,
1935 and the shell option @code{nullglob} is disabled, the word is left
1936 unchanged.
1937 If the @code{nullglob} option is set, and no matches are found, the word
1938 is removed.
1939 If the @code{failglob} shell option is set, and no matches are found,
1940 an error message is printed and the command is not executed.
1941 If the shell option @code{nocaseglob} is enabled, the match is performed
1942 without regard to the case of alphabetic characters.
1943
1944 When a pattern is used for filename generation, the character @samp{.}
1945 at the start of a filename or immediately following a slash
1946 must be matched explicitly, unless the shell option @code{dotglob} is set.
1947 When matching a file name, the slash character must always be
1948 matched explicitly.
1949 In other cases, the @samp{.} character is not treated specially.
1950
1951 See the description of @code{shopt} in @ref{The Shopt Builtin},
1952 for a description of the @code{nocaseglob}, @code{nullglob},
1953 @code{failglob}, and @code{dotglob} options.
1954
1955 The @env{GLOBIGNORE}
1956 shell variable may be used to restrict the set of filenames matching a
1957 pattern.  If @env{GLOBIGNORE}
1958 is set, each matching filename that also matches one of the patterns in
1959 @env{GLOBIGNORE} is removed from the list of matches.  The filenames
1960 @file{.} and @file{..}
1961 are always ignored when @env{GLOBIGNORE}
1962 is set and not null.
1963 However, setting @env{GLOBIGNORE} to a non-null value has the effect of
1964 enabling the @code{dotglob}
1965 shell option, so all other filenames beginning with a
1966 @samp{.} will match.
1967 To get the old behavior of ignoring filenames beginning with a
1968 @samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}.
1969 The @code{dotglob} option is disabled when @env{GLOBIGNORE}
1970 is unset.
1971
1972 @node Pattern Matching
1973 @subsubsection Pattern Matching
1974 @cindex pattern matching
1975 @cindex matching, pattern
1976
1977 Any character that appears in a pattern, other than the special pattern
1978 characters described below, matches itself.
1979 The @sc{nul} character may not occur in a pattern.
1980 A backslash escapes the following character; the
1981 escaping backslash is discarded when matching.
1982 The special pattern characters must be quoted if they are to be matched
1983 literally.
1984
1985 The special pattern characters have the following meanings:
1986 @table @code
1987 @item *
1988 Matches any string, including the null string.
1989 When the @code{globstar} shell option is enabled, and @samp{*} is used in
1990 a filename expansion context, two adjacent @samp{*}s used as a single
1991 pattern will match all files and zero or more directories and
1992 subdirectories.
1993 If followed by a @samp{/}, two adjacent @samp{*}s will match only
1994 directories and subdirectories.
1995 @item ?
1996 Matches any single character.
1997 @item [@dots{}]
1998 Matches any one of the enclosed characters.  A pair of characters
1999 separated by a hyphen denotes a @var{range expression};
2000 any character that sorts between those two characters, inclusive,
2001 using the current locale's collating sequence and character set,
2002 is matched.  If the first character following the
2003 @samp{[} is a @samp{!}  or a @samp{^}
2004 then any character not enclosed is matched.  A @samp{@minus{}}
2005 may be matched by including it as the first or last character
2006 in the set.  A @samp{]} may be matched by including it as the first
2007 character in the set.
2008 The sorting order of characters in range expressions is determined by
2009 the current locale and the value of the @env{LC_COLLATE} shell variable,
2010 if set.
2011
2012 For example, in the default C locale, @samp{[a-dx-z]} is equivalent to
2013 @samp{[abcdxyz]}.  Many locales sort characters in dictionary order, and in
2014 these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
2015 it might be equivalent to @samp{[aBbCcDdxXyYz]}, for example.  To obtain
2016 the traditional interpretation of ranges in bracket expressions, you can
2017 force the use of the C locale by setting the @env{LC_COLLATE} or
2018 @env{LC_ALL} environment variable to the value @samp{C}.
2019
2020 Within @samp{[} and @samp{]}, @var{character classes} can be specified
2021 using the syntax
2022 @code{[:}@var{class}@code{:]}, where @var{class} is one of the
2023 following classes defined in the @sc{posix} standard:
2024 @example
2025 alnum   alpha   ascii   blank   cntrl   digit   graph   lower
2026 print   punct   space   upper   word    xdigit
2027 @end example
2028 @noindent
2029 A character class matches any character belonging to that class.
2030 The @code{word} character class matches letters, digits, and the character
2031 @samp{_}.
2032
2033 Within @samp{[} and @samp{]}, an @var{equivalence class} can be
2034 specified using the syntax @code{[=}@var{c}@code{=]}, which
2035 matches all characters with the same collation weight (as defined
2036 by the current locale) as the character @var{c}.
2037
2038 Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]}
2039 matches the collating symbol @var{symbol}.
2040 @end table
2041
2042 If the @code{extglob} shell option is enabled using the @code{shopt}
2043 builtin, several extended pattern matching operators are recognized.
2044 In the following description, a @var{pattern-list} is a list of one
2045 or more patterns separated by a @samp{|}.
2046 Composite patterns may be formed using one or more of the following
2047 sub-patterns:
2048
2049 @table @code
2050 @item ?(@var{pattern-list})
2051 Matches zero or one occurrence of the given patterns.
2052
2053 @item *(@var{pattern-list})
2054 Matches zero or more occurrences of the given patterns.
2055
2056 @item +(@var{pattern-list})
2057 Matches one or more occurrences of the given patterns.
2058
2059 @item @@(@var{pattern-list})
2060 Matches one of the given patterns.
2061
2062 @item !(@var{pattern-list})
2063 Matches anything except one of the given patterns.
2064 @end table
2065
2066 @node Quote Removal
2067 @subsection Quote Removal
2068
2069 After the preceding expansions, all unquoted occurrences of the
2070 characters @samp{\}, @samp{'}, and @samp{"} that did not
2071 result from one of the above expansions are removed.
2072
2073 @node Redirections
2074 @section Redirections
2075 @cindex redirection
2076
2077 Before a command is executed, its input and output
2078 may be @var{redirected}
2079 using a special notation interpreted by the shell.
2080 Redirection may also be used to open and close files for the
2081 current shell execution environment.  The following redirection
2082 operators may precede or appear anywhere within a
2083 simple command or may follow a command.
2084 Redirections are processed in the order they appear, from
2085 left to right.
2086
2087 In the following descriptions, if the file descriptor number is
2088 omitted, and the first character of the redirection operator is
2089 @samp{<}, the redirection refers to the standard input (file
2090 descriptor 0).  If the first character of the redirection operator
2091 is @samp{>}, the redirection refers to the standard output (file
2092 descriptor 1).
2093
2094 The word following the redirection operator in the following
2095 descriptions, unless otherwise noted, is subjected to brace expansion,
2096 tilde expansion, parameter expansion, command substitution, arithmetic
2097 expansion, quote removal, filename expansion, and word splitting.
2098 If it expands to more than one word, Bash reports an error.
2099
2100 Note that the order of redirections is significant.  For example,
2101 the command
2102 @example
2103 ls > @var{dirlist} 2>&1
2104 @end example
2105 @noindent
2106 directs both standard output (file descriptor 1) and standard error
2107 (file descriptor 2) to the file @var{dirlist}, while the command
2108 @example
2109 ls 2>&1 > @var{dirlist}
2110 @end example
2111 @noindent
2112 directs only the standard output to file @var{dirlist},
2113 because the standard error was made a copy of the standard output
2114 before the standard output was redirected to @var{dirlist}.
2115
2116 Bash handles several filenames specially when they are used in
2117 redirections, as described in the following table:
2118
2119 @table @code
2120 @item /dev/fd/@var{fd}
2121 If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated.
2122
2123 @item /dev/stdin
2124 File descriptor 0 is duplicated.
2125
2126 @item /dev/stdout
2127 File descriptor 1 is duplicated.
2128
2129 @item /dev/stderr
2130 File descriptor 2 is duplicated.
2131
2132 @item /dev/tcp/@var{host}/@var{port}
2133 If @var{host} is a valid hostname or Internet address, and @var{port}
2134 is an integer port number or service name, Bash attempts to open a TCP
2135 connection to the corresponding socket.
2136
2137 @item /dev/udp/@var{host}/@var{port}
2138 If @var{host} is a valid hostname or Internet address, and @var{port}
2139 is an integer port number or service name, Bash attempts to open a UDP
2140 connection to the corresponding socket.
2141
2142 @end table
2143
2144 A failure to open or create a file causes the redirection to fail.
2145
2146 Redirections using file descriptors greater than 9 should be used with
2147 care, as they may conflict with file descriptors the shell uses
2148 internally.
2149
2150 @subsection Redirecting Input
2151 Redirection of input causes the file whose name results from
2152 the expansion of @var{word}
2153 to be opened for reading on file descriptor @code{n},
2154 or the standard input (file descriptor 0) if @code{n}
2155 is not specified.
2156
2157 The general format for redirecting input is:
2158 @example
2159 [@var{n}]<@var{word}
2160 @end example
2161
2162 @subsection Redirecting Output
2163 Redirection of output causes the file whose name results from
2164 the expansion of @var{word}
2165 to be opened for writing on file descriptor @var{n},
2166 or the standard output (file descriptor 1) if @var{n}
2167 is not specified.  If the file does not exist it is created;
2168 if it does exist it is truncated to zero size.
2169
2170 The general format for redirecting output is:
2171 @example
2172 [@var{n}]>[|]@var{word}
2173 @end example
2174
2175 If the redirection operator is @samp{>}, and the @code{noclobber}
2176 option to the @code{set} builtin has been enabled, the redirection
2177 will fail if the file whose name results from the expansion of
2178 @var{word} exists and is a regular file.
2179 If the redirection operator is @samp{>|}, or the redirection operator is
2180 @samp{>} and the @code{noclobber} option is not enabled, the redirection
2181 is attempted even if the file named by @var{word} exists.
2182
2183 @subsection Appending Redirected Output
2184 Redirection of output in this fashion
2185 causes the file whose name results from
2186 the expansion of @var{word}
2187 to be opened for appending on file descriptor @var{n},
2188 or the standard output (file descriptor 1) if @var{n}
2189 is not specified.  If the file does not exist it is created.
2190
2191 The general format for appending output is:
2192 @example
2193 [@var{n}]>>@var{word}
2194 @end example
2195
2196 @subsection Redirecting Standard Output and Standard Error
2197 This construct allows both the
2198 standard output (file descriptor 1) and
2199 the standard error output (file descriptor 2)
2200 to be redirected to the file whose name is the
2201 expansion of @var{word}.
2202
2203 There are two formats for redirecting standard output and
2204 standard error:
2205 @example
2206 &>@var{word}
2207 @end example
2208 @noindent
2209 and
2210 @example
2211 >&@var{word}
2212 @end example
2213 @noindent
2214 Of the two forms, the first is preferred.
2215 This is semantically equivalent to
2216 @example
2217 >@var{word} 2>&1
2218 @end example
2219
2220 @subsection Appending Standard Output and Standard Error
2221 This construct allows both the
2222 standard output (file descriptor 1) and
2223 the standard error output (file descriptor 2)
2224 to be appended to the file whose name is the
2225 expansion of @var{word}.
2226
2227 The format for appending standard output and standard error is:
2228 @example
2229 &>>@var{word}
2230 @end example
2231 @noindent
2232 This is semantically equivalent to
2233 @example
2234 >>@var{word} 2>&1
2235 @end example
2236
2237 @subsection Here Documents
2238 This type of redirection instructs the shell to read input from the
2239 current source until a line containing only @var{word}
2240 (with no trailing blanks) is seen.  All of
2241 the lines read up to that point are then used as the standard
2242 input for a command.
2243
2244 The format of here-documents is:
2245 @example
2246 <<[@minus{}]@var{word}
2247         @var{here-document}
2248 @var{delimiter}
2249 @end example
2250
2251 No parameter expansion, command substitution, arithmetic expansion,
2252 or filename expansion is performed on
2253 @var{word}.  If any characters in @var{word} are quoted, the
2254 @var{delimiter} is the result of quote removal on @var{word},
2255 and the lines in the here-document are not expanded.
2256 If @var{word} is unquoted,
2257 all lines of the here-document are subjected to parameter expansion,
2258 command substitution, and arithmetic expansion.  In the latter
2259 case, the character sequence @code{\newline} is ignored, and @samp{\}
2260 must be used to quote the characters
2261 @samp{\}, @samp{$}, and @samp{`}.
2262
2263 If the redirection operator is @samp{<<-},
2264 then all leading tab characters are stripped from input lines and the
2265 line containing @var{delimiter}.
2266 This allows here-documents within shell scripts to be indented in a
2267 natural fashion.
2268
2269 @subsection Here Strings
2270 A variant of here documents, the format is:
2271 @example
2272 <<< @var{word}
2273 @end example
2274
2275 The @var{word} is expanded and supplied to the command on its standard
2276 input.
2277
2278 @subsection Duplicating File Descriptors
2279 The redirection operator
2280 @example
2281 [@var{n}]<&@var{word}
2282 @end example
2283 @noindent
2284 is used to duplicate input file descriptors.
2285 If @var{word}
2286 expands to one or more digits, the file descriptor denoted by @var{n}
2287 is made to be a copy of that file descriptor.
2288 If the digits in @var{word} do not specify a file descriptor open for
2289 input, a redirection error occurs.
2290 If @var{word}
2291 evaluates to @samp{-}, file descriptor @var{n} is closed.  If
2292 @var{n} is not specified, the standard input (file descriptor 0) is used.
2293
2294 The operator
2295 @example
2296 [@var{n}]>&@var{word}
2297 @end example
2298 @noindent
2299 is used similarly to duplicate output file descriptors.  If
2300 @var{n} is not specified, the standard output (file descriptor 1) is used.
2301 If the digits in @var{word} do not specify a file descriptor open for
2302 output, a redirection error occurs.
2303 As a special case, if @var{n} is omitted, and @var{word} does not
2304 expand to one or more digits, the standard output and standard
2305 error are redirected as described previously.
2306
2307 @subsection Moving File Descriptors
2308 The redirection operator
2309 @example
2310 [@var{n}]<&@var{digit}-
2311 @end example
2312 @noindent
2313 moves the file descriptor @var{digit} to file descriptor @var{n},
2314 or the standard input (file descriptor 0) if @var{n} is not specified.
2315 @var{digit} is closed after being duplicated to @var{n}.
2316
2317 Similarly, the redirection operator
2318 @example
2319 [@var{n}]>&@var{digit}-
2320 @end example
2321 @noindent
2322 moves the file descriptor @var{digit} to file descriptor @var{n},
2323 or the standard output (file descriptor 1) if @var{n} is not specified.
2324
2325 @subsection Opening File Descriptors for Reading and Writing
2326 The redirection operator
2327 @example
2328 [@var{n}]<>@var{word}
2329 @end example
2330 @noindent
2331 causes the file whose name is the expansion of @var{word}
2332 to be opened for both reading and writing on file descriptor
2333 @var{n}, or on file descriptor 0 if @var{n}
2334 is not specified.  If the file does not exist, it is created.
2335
2336 @node Executing Commands
2337 @section Executing Commands
2338
2339 @menu
2340 * Simple Command Expansion::    How Bash expands simple commands before
2341                                 executing them.
2342 * Command Search and Execution::        How Bash finds commands and runs them.
2343 * Command Execution Environment::       The environment in which Bash
2344                                         executes commands that are not
2345                                         shell builtins.
2346 * Environment::         The environment given to a command.
2347 * Exit Status::         The status returned by commands and how Bash
2348                         interprets it.
2349 * Signals::             What happens when Bash or a command it runs
2350                         receives a signal.
2351 @end menu
2352
2353 @node Simple Command Expansion
2354 @subsection Simple Command Expansion
2355 @cindex command expansion
2356
2357 When a simple command is executed, the shell performs the following
2358 expansions, assignments, and redirections, from left to right.
2359
2360 @enumerate
2361 @item
2362 The words that the parser has marked as variable assignments (those
2363 preceding the command name) and redirections are saved for later
2364 processing.
2365
2366 @item
2367 The words that are not variable assignments or redirections are
2368 expanded (@pxref{Shell Expansions}).
2369 If any words remain after expansion, the first word
2370 is taken to be the name of the command and the remaining words are
2371 the arguments.
2372
2373 @item
2374 Redirections are performed as described above (@pxref{Redirections}).
2375
2376 @item
2377 The text after the @samp{=} in each variable assignment undergoes tilde
2378 expansion, parameter expansion, command substitution, arithmetic expansion,
2379 and quote removal before being assigned to the variable.
2380 @end enumerate
2381
2382 If no command name results, the variable assignments affect the current
2383 shell environment.  Otherwise, the variables are added to the environment
2384 of the executed command and do not affect the current shell environment.
2385 If any of the assignments attempts to assign a value to a readonly variable,
2386 an error occurs, and the command exits with a non-zero status.
2387
2388 If no command name results, redirections are performed, but do not
2389 affect the current shell environment.  A redirection error causes the
2390 command to exit with a non-zero status.
2391
2392 If there is a command name left after expansion, execution proceeds as
2393 described below.  Otherwise, the command exits.  If one of the expansions
2394 contained a command substitution, the exit status of the command is
2395 the exit status of the last command substitution performed.  If there
2396 were no command substitutions, the command exits with a status of zero.
2397
2398 @node Command Search and Execution
2399 @subsection Command Search and Execution
2400 @cindex command execution
2401 @cindex command search
2402
2403 After a command has been split into words, if it results in a
2404 simple command and an optional list of arguments, the following
2405 actions are taken.
2406
2407 @enumerate
2408 @item
2409 If the command name contains no slashes, the shell attempts to
2410 locate it.  If there exists a shell function by that name, that
2411 function is invoked as described in @ref{Shell Functions}.
2412
2413 @item
2414 If the name does not match a function, the shell searches for
2415 it in the list of shell builtins.  If a match is found, that
2416 builtin is invoked.
2417
2418 @item
2419 If the name is neither a shell function nor a builtin,
2420 and contains no slashes, Bash searches each element of
2421 @env{$PATH} for a directory containing an executable file
2422 by that name.  Bash uses a hash table to remember the full
2423 pathnames of executable files to avoid multiple @env{PATH} searches
2424 (see the description of @code{hash} in @ref{Bourne Shell Builtins}).
2425 A full search of the directories in @env{$PATH}
2426 is performed only if the command is not found in the hash table.
2427 If the search is unsuccessful, the shell searches for a defined shell
2428 function named @code{command_not_found_handle}.
2429 If that function exists, it is invoked with the original command and
2430 the original command's arguments as its arguments, and the function's
2431 exit status becomes the exit status of the shell.
2432 If that function is not defined, the shell prints an error
2433 message and returns an exit status of 127.
2434
2435 @item
2436 If the search is successful, or if the command name contains
2437 one or more slashes, the shell executes the named program in
2438 a separate execution environment.
2439 Argument 0 is set to the name given, and the remaining arguments
2440 to the command are set to the arguments supplied, if any.
2441
2442 @item
2443 If this execution fails because the file is not in executable
2444 format, and the file is not a directory, it is assumed to be a
2445 @var{shell script} and the shell executes it as described in
2446 @ref{Shell Scripts}.
2447
2448 @item
2449 If the command was not begun asynchronously, the shell waits for
2450 the command to complete and collects its exit status.
2451
2452 @end enumerate
2453
2454 @node Command Execution Environment
2455 @subsection Command Execution Environment
2456 @cindex execution environment
2457
2458 The shell has an @var{execution environment}, which consists of the
2459 following:
2460
2461 @itemize @bullet
2462 @item
2463 open files inherited by the shell at invocation, as modified by
2464 redirections supplied to the @code{exec} builtin
2465
2466 @item
2467 the current working directory as set by @code{cd}, @code{pushd}, or
2468 @code{popd}, or inherited by the shell at invocation
2469
2470 @item
2471 the file creation mode mask as set by @code{umask} or inherited from
2472 the shell's parent
2473
2474 @item
2475 current traps set by @code{trap}
2476
2477 @item
2478 shell parameters that are set by variable assignment or with @code{set}
2479 or inherited from the shell's parent in the environment
2480
2481 @item
2482 shell functions defined during execution or inherited from the shell's
2483 parent in the environment
2484
2485 @item
2486 options enabled at invocation (either by default or with command-line
2487 arguments) or by @code{set}
2488
2489 @item
2490 options enabled by @code{shopt} (@pxref{The Shopt Builtin})
2491
2492 @item
2493 shell aliases defined with @code{alias} (@pxref{Aliases})
2494
2495 @item
2496 various process @sc{id}s, including those of background jobs
2497 (@pxref{Lists}), the value of @code{$$}, and the value of
2498 @env{$PPID}
2499
2500 @end itemize
2501
2502 When a simple command other than a builtin or shell function
2503 is to be executed, it
2504 is invoked in a separate execution environment that consists of
2505 the following.  Unless otherwise noted, the values are inherited
2506 from the shell.
2507
2508 @itemize @bullet
2509 @item
2510 the shell's open files, plus any modifications and additions specified
2511 by redirections to the command
2512
2513 @item
2514 the current working directory
2515
2516 @item
2517 the file creation mode mask
2518
2519 @item
2520 shell variables and functions marked for export, along with variables
2521 exported for the command, passed in the environment (@pxref{Environment})
2522
2523 @item
2524 traps caught by the shell are reset to the values inherited from the
2525 shell's parent, and traps ignored by the shell are ignored
2526
2527 @end itemize
2528
2529 A command invoked in this separate environment cannot affect the
2530 shell's execution environment. 
2531
2532 Command substitution, commands grouped with parentheses,
2533 and asynchronous commands are invoked in a
2534 subshell environment that is a duplicate of the shell environment,
2535 except that traps caught by the shell are reset to the values
2536 that the shell inherited from its parent at invocation.  Builtin
2537 commands that are invoked as part of a pipeline are also executed
2538 in a subshell environment.  Changes made to the subshell environment
2539 cannot affect the shell's execution environment.
2540
2541 Subshells spawned to execute command substitutions inherit the value of
2542 the @option{-e} option from the parent shell.  When not in @sc{posix} mode,
2543 Bash clears the @option{-e} option in such subshells.
2544
2545 If a command is followed by a @samp{&} and job control is not active, the
2546 default standard input for the command is the empty file @file{/dev/null}.
2547 Otherwise, the invoked command inherits the file descriptors of the calling
2548 shell as modified by redirections.
2549
2550 @node Environment
2551 @subsection Environment
2552 @cindex environment
2553
2554 When a program is invoked it is given an array of strings
2555 called the @var{environment}.
2556 This is a list of name-value pairs, of the form @code{name=value}.
2557
2558 Bash provides several ways to manipulate the environment.
2559 On invocation, the shell scans its own environment and
2560 creates a parameter for each name found, automatically marking
2561 it for @var{export}
2562 to child processes.  Executed commands inherit the environment.
2563 The @code{export} and @samp{declare -x}
2564 commands allow parameters and functions to be added to and
2565 deleted from the environment.  If the value of a parameter
2566 in the environment is modified, the new value becomes part
2567 of the environment, replacing the old.  The environment
2568 inherited by any executed command consists of the shell's
2569 initial environment, whose values may be modified in the shell,
2570 less any pairs removed by the @code{unset} and @samp{export -n}
2571 commands, plus any additions via the @code{export} and
2572 @samp{declare -x} commands.
2573
2574 The environment for any simple command
2575 or function may be augmented temporarily by prefixing it with
2576 parameter assignments, as described in @ref{Shell Parameters}.
2577 These assignment statements affect only the environment seen
2578 by that command.
2579
2580 If the @option{-k} option is set (@pxref{The Set Builtin}), then all
2581 parameter assignments are placed in the environment for a command,
2582 not just those that precede the command name.
2583
2584 When Bash invokes an external command, the variable @samp{$_}
2585 is set to the full path name of the command and passed to that
2586 command in its environment.
2587
2588 @node Exit Status
2589 @subsection Exit Status
2590 @cindex exit status
2591
2592 The exit status of an executed command is the value returned by the
2593 @var{waitpid} system call or equivalent function.  Exit statuses    
2594 fall between 0 and 255, though, as explained below, the shell may
2595 use values above 125 specially.  Exit statuses from shell builtins and
2596 compound commands are also limited to this range. Under certain
2597 circumstances, the shell will use special values to indicate specific
2598 failure modes.
2599
2600 For the shell's purposes, a command which exits with a
2601 zero exit status has succeeded.
2602 A non-zero exit status indicates failure.
2603 This seemingly counter-intuitive scheme is used so there
2604 is one well-defined way to indicate success and a variety of
2605 ways to indicate various failure modes.
2606 When a command terminates on a fatal signal whose number is @var{N},
2607 Bash uses the value 128+@var{N} as the exit status.
2608
2609 If a command is not found, the child process created to
2610 execute it returns a status of 127.  If a command is found  
2611 but is not executable, the return status is 126.
2612
2613 If a command fails because of an error during expansion or redirection,
2614 the exit status is greater than zero.
2615
2616 The exit status is used by the Bash conditional commands
2617 (@pxref{Conditional Constructs}) and some of the list
2618 constructs (@pxref{Lists}).
2619
2620 All of the Bash builtins return an exit status of zero if they succeed
2621 and a non-zero status on failure, so they may be used by the
2622 conditional and list constructs.
2623 All builtins return an exit status of 2 to indicate incorrect usage.
2624
2625 @node Signals
2626 @subsection Signals
2627 @cindex signal handling
2628
2629 When Bash is interactive, in the absence of any traps, it ignores
2630 @code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell),
2631 and @code{SIGINT}
2632 is caught and handled (so that the @code{wait} builtin is interruptible).
2633 When Bash receives a @code{SIGINT}, it breaks out of any executing loops.
2634 In all cases, Bash ignores @code{SIGQUIT}.
2635 If job control is in effect (@pxref{Job Control}), Bash
2636 ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
2637
2638 Non-builtin commands started by Bash have signal handlers set to the
2639 values inherited by the shell from its parent.
2640 When job control is not in effect, asynchronous commands
2641 ignore @code{SIGINT} and @code{SIGQUIT} in addition to these inherited
2642 handlers.
2643 Commands run as a result of
2644 command substitution ignore the keyboard-generated job control signals
2645 @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
2646
2647 The shell exits by default upon receipt of a @code{SIGHUP}.
2648 Before exiting, an interactive shell resends the @code{SIGHUP} to
2649 all jobs, running or stopped.
2650 Stopped jobs are sent @code{SIGCONT} to ensure that they receive
2651 the @code{SIGHUP}.
2652 To prevent the shell from sending the @code{SIGHUP} signal to a
2653 particular job, it should be removed
2654 from the jobs table with the @code{disown}
2655 builtin (@pxref{Job Control Builtins}) or marked
2656 to not receive @code{SIGHUP} using @code{disown -h}.
2657
2658 If the  @code{huponexit} shell option has been set with @code{shopt}
2659 (@pxref{The Shopt Builtin}), Bash sends a @code{SIGHUP} to all jobs when
2660 an interactive login shell exits.
2661
2662 If Bash is waiting for a command to complete and receives a signal
2663 for which a trap has been set, the trap will not be executed until
2664 the command completes. 
2665 When Bash is waiting for an asynchronous
2666 command via the @code{wait} builtin, the reception of a signal for
2667 which a trap has been set will cause the @code{wait} builtin to return
2668 immediately with an exit status greater than 128, immediately after
2669 which the trap is executed.
2670
2671 @node Shell Scripts
2672 @section Shell Scripts
2673 @cindex shell script
2674
2675 A shell script is a text file containing shell commands.  When such
2676 a file is used as the first non-option argument when invoking Bash,
2677 and neither the @option{-c} nor @option{-s} option is supplied
2678 (@pxref{Invoking Bash}), 
2679 Bash reads and executes commands from the file, then exits.  This
2680 mode of operation creates a non-interactive shell.  The shell first
2681 searches for the file in the current directory, and looks in the
2682 directories in @env{$PATH} if not found there.
2683
2684 When Bash runs
2685 a shell script, it sets the special parameter @code{0} to the name
2686 of the file, rather than the name of the shell, and the positional
2687 parameters are set to the remaining arguments, if any are given.
2688 If no additional arguments are supplied, the positional parameters
2689 are unset.
2690
2691 A shell script may be made executable by using the @code{chmod} command
2692 to turn on the execute bit.  When Bash finds such a file while
2693 searching the @env{$PATH} for a command, it spawns a subshell to
2694 execute it.  In other words, executing
2695 @example
2696 filename @var{arguments}
2697 @end example
2698 @noindent
2699 is equivalent to executing
2700 @example
2701 bash filename @var{arguments}
2702 @end example
2703
2704 @noindent
2705 if @code{filename} is an executable shell script.
2706 This subshell reinitializes itself, so that the effect is as if a
2707 new shell had been invoked to interpret the script, with the
2708 exception that the locations of commands remembered by the parent
2709 (see the description of @code{hash} in @ref{Bourne Shell Builtins})
2710 are retained by the child.
2711
2712 Most versions of Unix make this a part of the operating system's command
2713 execution mechanism.  If the first line of a script begins with
2714 the two characters @samp{#!}, the remainder of the line specifies
2715 an interpreter for the program.
2716 Thus, you can specify Bash, @code{awk}, Perl, or some other
2717 interpreter and write the rest of the script file in that language.
2718
2719 The arguments to the interpreter
2720 consist of a single optional argument following the interpreter
2721 name on the first line of the script file, followed by the name of
2722 the script file, followed by the rest of the arguments.  Bash
2723 will perform this action on operating systems that do not handle it
2724 themselves.  Note that some older versions of Unix limit the interpreter
2725 name and argument to a maximum of 32 characters.
2726
2727 Bash scripts often begin with @code{#! /bin/bash} (assuming that
2728 Bash has been installed in @file{/bin}), since this ensures that
2729 Bash will be used to interpret the script, even if it is executed
2730 under another shell.
2731
2732 @node Shell Builtin Commands
2733 @chapter Shell Builtin Commands
2734
2735 @menu
2736 * Bourne Shell Builtins::       Builtin commands inherited from the Bourne
2737                                 Shell.
2738 * Bash Builtins::               Table of builtins specific to Bash.
2739 * Modifying Shell Behavior::    Builtins to modify shell attributes and
2740                                 optional behavior.
2741 * Special Builtins::            Builtin commands classified specially by
2742                                 POSIX.
2743 @end menu
2744
2745 Builtin commands are contained within the shell itself.
2746 When the name of a builtin command is used as the first word of
2747 a simple command (@pxref{Simple Commands}), the shell executes
2748 the command directly, without invoking another program.
2749 Builtin commands are necessary to implement functionality impossible
2750 or inconvenient to obtain with separate utilities.
2751
2752 This section briefly describes the builtins which Bash inherits from
2753 the Bourne Shell, as well as the builtin commands which are unique
2754 to or have been extended in Bash.
2755
2756 Several builtin commands are described in other chapters:  builtin
2757 commands which provide the Bash interface to the job control
2758 facilities (@pxref{Job Control Builtins}), the directory stack
2759 (@pxref{Directory Stack Builtins}), the command history
2760 (@pxref{Bash History Builtins}), and the programmable completion
2761 facilities (@pxref{Programmable Completion Builtins}).
2762
2763 Many of the builtins have been extended by @sc{posix} or Bash.
2764
2765 Unless otherwise noted, each builtin command documented as accepting
2766 options preceded by @samp{-} accepts @samp{--}
2767 to signify the end of the options.
2768 For example, the @code{:}, @code{true}, @code{false}, and @code{test}
2769 builtins do not accept options.
2770
2771 @node Bourne Shell Builtins
2772 @section Bourne Shell Builtins
2773
2774 The following shell builtin commands are inherited from the Bourne Shell.
2775 These commands are implemented as specified by the @sc{posix} standard.
2776
2777 @table @code
2778 @item :    @r{(a colon)}
2779 @btindex :
2780 @example
2781 : [@var{arguments}]
2782 @end example
2783 Do nothing beyond expanding @var{arguments} and performing redirections.
2784 The return status is zero.
2785
2786 @item .    @r{(a period)}
2787 @btindex .
2788 @example
2789 . @var{filename} [@var{arguments}]
2790 @end example
2791 Read and execute commands from the @var{filename} argument in the
2792 current shell context.  If @var{filename} does not contain a slash,
2793 the @env{PATH} variable is used to find @var{filename}.
2794 When Bash is not in @sc{posix} mode, the current directory is searched
2795 if @var{filename} is not found in @env{$PATH}.
2796 If any @var{arguments} are supplied, they become the positional
2797 parameters when @var{filename} is executed.  Otherwise the positional
2798 parameters are unchanged.
2799 The return status is the exit status of the last command executed, or
2800 zero if no commands are executed.  If @var{filename} is not found, or
2801 cannot be read, the return status is non-zero.
2802 This builtin is equivalent to @code{source}.
2803
2804 @item break
2805 @btindex break
2806 @example
2807 break [@var{n}]
2808 @end example
2809 Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop.
2810 If @var{n} is supplied, the @var{n}th enclosing loop is exited.
2811 @var{n} must be greater than or equal to 1.
2812 The return status is zero unless @var{n} is not greater than or equal to 1.
2813
2814 @item cd
2815 @btindex cd
2816 @example
2817 cd [-L|-P] [@var{directory}]
2818 @end example
2819 Change the current working directory to @var{directory}.
2820 If @var{directory} is not given, the value of the @env{HOME} shell
2821 variable is used.
2822 If the shell variable @env{CDPATH} exists, it is used as a search path.
2823 If @var{directory} begins with a slash, @env{CDPATH} is not used.
2824
2825 The @option{-P} option means to not follow symbolic links; symbolic
2826 links are followed by default or with the @option{-L} option.
2827 If @var{directory} is @samp{-}, it is equivalent to @env{$OLDPWD}.
2828
2829 If a non-empty directory name from @env{CDPATH} is used, or if
2830 @samp{-} is the first argument, and the directory change is
2831 successful, the absolute pathname of the new working directory is
2832 written to the standard output.
2833
2834 The return status is zero if the directory is successfully changed,
2835 non-zero otherwise.
2836
2837 @item continue
2838 @btindex continue
2839 @example
2840 continue [@var{n}]
2841 @end example
2842 Resume the next iteration of an enclosing @code{for}, @code{while},
2843 @code{until}, or @code{select} loop.
2844 If @var{n} is supplied, the execution of the @var{n}th enclosing loop
2845 is resumed.
2846 @var{n} must be greater than or equal to 1.
2847 The return status is zero unless @var{n} is not greater than or equal to 1.
2848
2849 @item eval
2850 @btindex eval
2851 @example
2852 eval [@var{arguments}]
2853 @end example
2854 The arguments are concatenated together into a single command, which is
2855 then read and executed, and its exit status returned as the exit status
2856 of @code{eval}.
2857 If there are no arguments or only empty arguments, the return status is
2858 zero.
2859
2860 @item exec
2861 @btindex exec
2862 @example
2863 exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]]
2864 @end example
2865 If @var{command}
2866 is supplied, it replaces the shell without creating a new process.
2867 If the @option{-l} option is supplied, the shell places a dash at the
2868 beginning of the zeroth argument passed to @var{command}.
2869 This is what the @code{login} program does.
2870 The @option{-c} option causes @var{command} to be executed with an empty
2871 environment.
2872 If @option{-a} is supplied, the shell passes @var{name} as the zeroth
2873 argument to @var{command}.
2874 If no @var{command} is specified, redirections may be used to affect
2875 the current shell environment.  If there are no redirection errors, the
2876 return status is zero; otherwise the return status is non-zero.
2877
2878 @item exit
2879 @btindex exit
2880 @example
2881 exit [@var{n}]
2882 @end example
2883 Exit the shell, returning a status of @var{n} to the shell's parent.
2884 If @var{n} is omitted, the exit status is that of the last command executed.
2885 Any trap on @code{EXIT} is executed before the shell terminates.
2886
2887 @item export
2888 @btindex export
2889 @example
2890 export [-fn] [-p] [@var{name}[=@var{value}]]
2891 @end example
2892 Mark each @var{name} to be passed to child processes
2893 in the environment.  If the @option{-f} option is supplied, the @var{name}s
2894 refer to shell functions; otherwise the names refer to shell variables.
2895 The @option{-n} option means to no longer mark each @var{name} for export.
2896 If no @var{names} are supplied, or if the @option{-p} option is given, a
2897 list of exported names is displayed.
2898 The @option{-p} option displays output in a form that may be reused as input.
2899 If a variable name is followed by =@var{value}, the value of
2900 the variable is set to @var{value}.
2901
2902 The return status is zero unless an invalid option is supplied, one of
2903 the names is not a valid shell variable name, or @option{-f} is supplied
2904 with a name that is not a shell function.
2905
2906 @item getopts
2907 @btindex getopts
2908 @example
2909 getopts @var{optstring} @var{name} [@var{args}]
2910 @end example
2911 @code{getopts} is used by shell scripts to parse positional parameters.
2912 @var{optstring} contains the option characters to be recognized; if a
2913 character is followed by a colon, the option is expected to have an
2914 argument, which should be separated from it by white space.
2915 The colon (@samp{:}) and question mark (@samp{?}) may not be
2916 used as option characters.
2917 Each time it is invoked, @code{getopts}
2918 places the next option in the shell variable @var{name}, initializing
2919 @var{name} if it does not exist,
2920 and the index of the next argument to be processed into the
2921 variable @env{OPTIND}.
2922 @env{OPTIND} is initialized to 1 each time the shell or a shell script
2923 is invoked.
2924 When an option requires an argument,
2925 @code{getopts} places that argument into the variable @env{OPTARG}.
2926 The shell does not reset @env{OPTIND} automatically; it must be manually
2927 reset between multiple calls to @code{getopts} within the same shell
2928 invocation if a new set of parameters is to be used.
2929
2930 When the end of options is encountered, @code{getopts} exits with a
2931 return value greater than zero.
2932 @env{OPTIND} is set to the index of the first non-option argument,
2933 and @code{name} is set to @samp{?}.
2934
2935 @code{getopts}
2936 normally parses the positional parameters, but if more arguments are
2937 given in @var{args}, @code{getopts} parses those instead.
2938
2939 @code{getopts} can report errors in two ways.  If the first character of
2940 @var{optstring} is a colon, @var{silent}
2941 error reporting is used.  In normal operation diagnostic messages
2942 are printed when invalid options or missing option arguments are
2943 encountered.
2944 If the variable @env{OPTERR}
2945 is set to 0, no error messages will be displayed, even if the first
2946 character of @code{optstring} is not a colon.
2947
2948 If an invalid option is seen,
2949 @code{getopts} places @samp{?} into @var{name} and, if not silent,
2950 prints an error message and unsets @env{OPTARG}.
2951 If @code{getopts} is silent, the option character found is placed in
2952 @env{OPTARG} and no diagnostic message is printed.
2953
2954 If a required argument is not found, and @code{getopts}
2955 is not silent, a question mark (@samp{?}) is placed in @var{name},
2956 @code{OPTARG} is unset, and a diagnostic message is printed.
2957 If @code{getopts} is silent, then a colon (@samp{:}) is placed in
2958 @var{name} and @env{OPTARG} is set to the option character found.
2959
2960 @item hash
2961 @btindex hash
2962 @example
2963 hash [-r] [-p @var{filename}] [-dt] [@var{name}]
2964 @end example
2965 Remember the full pathnames of commands specified as @var{name} arguments,
2966 so they need not be searched for on subsequent invocations.
2967 The commands are found by searching through the directories listed in
2968 @env{$PATH}.
2969 The @option{-p} option inhibits the path search, and @var{filename} is
2970 used as the location of @var{name}.
2971 The @option{-r} option causes the shell to forget all remembered locations.
2972 The @option{-d} option causes the shell to forget the remembered location
2973 of each @var{name}.
2974 If the @option{-t} option is supplied, the full pathname to which each
2975 @var{name} corresponds is printed.  If multiple @var{name} arguments are
2976 supplied with @option{-t} the @var{name} is printed before the hashed
2977 full pathname.
2978 The @option{-l} option causes output to be displayed in a format
2979 that may be reused as input.
2980 If no arguments are given, or if only @option{-l} is supplied,
2981 information about remembered commands is printed.
2982 The return status is zero unless a @var{name} is not found or an invalid
2983 option is supplied.
2984
2985 @item pwd
2986 @btindex pwd
2987 @example
2988 pwd [-LP]
2989 @end example
2990 Print the absolute pathname of the current working directory.
2991 If the @option{-P} option is supplied, the pathname printed will not
2992 contain symbolic links.
2993 If the @option{-L} option is supplied, the pathname printed may contain
2994 symbolic links.
2995 The return status is zero unless an error is encountered while
2996 determining the name of the current directory or an invalid option
2997 is supplied.
2998
2999 @item readonly
3000 @btindex readonly
3001 @example
3002 readonly [-aApf] [@var{name}[=@var{value}]] @dots{}
3003 @end example
3004 Mark each @var{name} as readonly.
3005 The values of these names may not be changed by subsequent assignment.
3006 If the @option{-f} option is supplied, each @var{name} refers to a shell
3007 function.
3008 The @option{-a} option means each @var{name} refers to an indexed
3009 array variable; the @option{-A} option means each @var{name} refers
3010 to an associative array variable.
3011 If no @var{name} arguments are given, or if the @option{-p}
3012 option is supplied, a list of all readonly names is printed.
3013 The @option{-p} option causes output to be displayed in a format that
3014 may be reused as input.
3015 If a variable name is followed by =@var{value}, the value of
3016 the variable is set to @var{value}.
3017 The return status is zero unless an invalid option is supplied, one of
3018 the @var{name} arguments is not a valid shell variable or function name,
3019 or the @option{-f} option is supplied with a name that is not a shell function.
3020
3021 @item return
3022 @btindex return
3023 @example
3024 return [@var{n}]
3025 @end example
3026 Cause a shell function to exit with the return value @var{n}.
3027 If @var{n} is not supplied, the return value is the exit status of the
3028 last command executed in the function.
3029 This may also be used to terminate execution of a script being executed
3030 with the @code{.} (or @code{source}) builtin, returning either @var{n} or
3031 the exit status of the last command executed within the script as the exit
3032 status of the script.
3033 Any command associated with the @code{RETURN} trap is executed
3034 before execution resumes after the function or script.
3035 The return status is non-zero if @code{return} is used outside a function
3036 and not during the execution of a script by @code{.} or @code{source}.
3037
3038 @item shift
3039 @btindex shift
3040 @example
3041 shift [@var{n}]
3042 @end example
3043 Shift the positional parameters to the left by @var{n}.
3044 The positional parameters from @var{n}+1 @dots{} @code{$#} are
3045 renamed to @code{$1} @dots{} @code{$#}-@var{n}.
3046 Parameters represented by the numbers @code{$#} to @code{$#}-@var{n}+1
3047 are unset.
3048 @var{n} must be a non-negative number less than or equal to @code{$#}.
3049 If @var{n} is zero or greater than @code{$#}, the positional parameters
3050 are not changed.
3051 If @var{n} is not supplied, it is assumed to be 1.
3052 The return status is zero unless @var{n} is greater than @code{$#} or
3053 less than zero, non-zero otherwise.
3054
3055 @item test
3056 @itemx [
3057 @btindex test
3058 @btindex [
3059 Evaluate a conditional expression @var{expr}.
3060 Each operator and operand must be a separate argument.
3061 Expressions are composed of the primaries described below in
3062 @ref{Bash Conditional Expressions}.
3063 @code{test} does not accept any options, nor does it accept and ignore
3064 an argument of @option{--} as signifying the end of options.
3065
3066 When the @code{[} form is used, the last argument to the command must
3067 be a @code{]}.
3068
3069 Expressions may be combined using the following operators, listed in
3070 decreasing order of precedence.
3071 The evaluation depends on the number of arguments; see below.
3072
3073 @table @code
3074 @item ! @var{expr}
3075 True if @var{expr} is false.
3076
3077 @item ( @var{expr} )
3078 Returns the value of @var{expr}.
3079 This may be used to override the normal precedence of operators.
3080
3081 @item @var{expr1} -a @var{expr2}
3082 True if both @var{expr1} and @var{expr2} are true.
3083
3084 @item @var{expr1} -o @var{expr2}
3085 True if either @var{expr1} or @var{expr2} is true.
3086 @end table
3087
3088 The @code{test} and @code{[} builtins evaluate conditional
3089 expressions using a set of rules based on the number of arguments.
3090
3091 @table @asis
3092 @item 0 arguments
3093 The expression is false.
3094
3095 @item 1 argument
3096 The expression is true if and only if the argument is not null.
3097
3098 @item 2 arguments
3099 If the first argument is @samp{!}, the expression is true if and
3100 only if the second argument is null.
3101 If the first argument is one of the unary conditional operators
3102 (@pxref{Bash Conditional Expressions}), the expression
3103 is true if the unary test is true.
3104 If the first argument is not a valid unary operator, the expression is
3105 false.
3106
3107 @item 3 arguments
3108 If the second argument is one of the binary conditional
3109 operators (@pxref{Bash Conditional Expressions}), the
3110 result of the expression is the result of the binary test using the
3111 first and third arguments as operands.
3112 The @samp{-a} and @samp{-o} operators are considered binary operators
3113 when there are three arguments.
3114 If the first argument is @samp{!}, the value is the negation of
3115 the two-argument test using the second and third arguments.
3116 If the first argument is exactly @samp{(} and the third argument is
3117 exactly @samp{)}, the result is the one-argument test of the second
3118 argument.
3119 Otherwise, the expression is false.
3120
3121 @item 4 arguments
3122 If the first argument is @samp{!}, the result is the negation of
3123 the three-argument expression composed of the remaining arguments.
3124 Otherwise, the expression is parsed and evaluated according to 
3125 precedence using the rules listed above.
3126
3127 @item 5 or more arguments
3128 The expression is parsed and evaluated according to precedence
3129 using the rules listed above.
3130 @end table
3131
3132 @item times
3133 @btindex times
3134 @example
3135 times
3136 @end example
3137 Print out the user and system times used by the shell and its children.
3138 The return status is zero.
3139
3140 @item trap
3141 @btindex trap
3142 @example
3143 trap [-lp] [@var{arg}] [@var{sigspec} @dots{}]
3144 @end example
3145 The commands in @var{arg} are to be read and executed when the
3146 shell receives signal @var{sigspec}.  If @var{arg} is absent (and
3147 there is a single @var{sigspec}) or
3148 equal to @samp{-}, each specified signal's disposition is reset
3149 to the value it had when the shell was started.
3150 If @var{arg} is the null string, then the signal specified by
3151 each @var{sigspec} is ignored by the shell and commands it invokes.
3152 If @var{arg} is not present and @option{-p} has been supplied,
3153 the shell displays the trap commands associated with each @var{sigspec}.
3154 If no arguments are supplied, or
3155 only @option{-p} is given, @code{trap} prints the list of commands
3156 associated with each signal number in a form that may be reused as
3157 shell input.
3158 The @option{-l} option causes the shell to print a list of signal names
3159 and their corresponding numbers.
3160 Each @var{sigspec} is either a signal name or a signal number.
3161 Signal names are case insensitive and the @code{SIG} prefix is optional.
3162 If a @var{sigspec}
3163 is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
3164 If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
3165 before every simple command, @code{for} command, @code{case} command,
3166 @code{select} command, every arithmetic @code{for} command, and before
3167 the first command executes in a shell function.
3168 Refer to the description of the @code{extglob} option to the
3169 @code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its
3170 effect on the @code{DEBUG} trap.
3171 If a @var{sigspec} is @code{ERR}, the command @var{arg} 
3172 is executed whenever a simple command has a non-zero exit status,
3173 subject to the following conditions.
3174 The @code{ERR} trap is not executed if the failed command is part of the
3175 command list immediately following an @code{until} or @code{while} keyword,
3176 part of the test following the @code{if} or @code{elif} reserved words,
3177 part of a command executed in a @code{&&} or @code{||} list,
3178 or if the command's return
3179 status is being inverted using @code{!}.
3180 These are the same conditions obeyed by the @code{errexit} option.
3181 If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed
3182 each time a shell function or a script executed with the @code{.} or
3183 @code{source} builtins finishes executing.
3184
3185 Signals ignored upon entry to the shell cannot be trapped or reset.
3186 Trapped signals that are not being ignored are reset to their original
3187 values in a child process when it is created.
3188
3189 The return status is zero unless a @var{sigspec} does not specify a
3190 valid signal.
3191
3192 @item umask
3193 @btindex umask
3194 @example
3195 umask [-p] [-S] [@var{mode}]
3196 @end example
3197 Set the shell process's file creation mask to @var{mode}.  If
3198 @var{mode} begins with a digit, it is interpreted as an octal number;
3199 if not, it is interpreted as a symbolic mode mask similar
3200 to that accepted by the @code{chmod} command.  If @var{mode} is
3201 omitted, the current value of the mask is printed.  If the @option{-S}
3202 option is supplied without a @var{mode} argument, the mask is printed
3203 in a symbolic format.
3204 If the  @option{-p} option is supplied, and @var{mode}
3205 is omitted, the output is in a form that may be reused as input.
3206 The return status is zero if the mode is successfully changed or if
3207 no @var{mode} argument is supplied, and non-zero otherwise.
3208
3209 Note that when the mode is interpreted as an octal number, each number
3210 of the umask is subtracted from @code{7}.  Thus, a umask of @code{022}
3211 results in permissions of @code{755}.
3212
3213 @item unset
3214 @btindex unset
3215 @example
3216 unset [-fv] [@var{name}]
3217 @end example
3218 Each variable or function @var{name} is removed.
3219 If no options are supplied, or the @option{-v} option is given, each
3220 @var{name} refers to a shell variable. 
3221 If the @option{-f} option is given, the @var{name}s refer to shell
3222 functions, and the function definition is removed.
3223 Readonly variables and functions may not be unset.
3224 The return status is zero unless a @var{name} is readonly.
3225 @end table
3226
3227 @node Bash Builtins
3228 @section Bash Builtin Commands
3229
3230 This section describes builtin commands which are unique to
3231 or have been extended in Bash.
3232 Some of these commands are specified in the @sc{posix} standard.
3233
3234 @table @code
3235
3236 @item alias
3237 @btindex alias
3238 @example
3239 alias [@code{-p}] [@var{name}[=@var{value}] @dots{}]
3240 @end example
3241
3242 Without arguments or with the @option{-p} option, @code{alias} prints
3243 the list of aliases on the standard output in a form that allows
3244 them to be reused as input.
3245 If arguments are supplied, an alias is defined for each @var{name}
3246 whose @var{value} is given.  If no @var{value} is given, the name
3247 and value of the alias is printed.
3248 Aliases are described in @ref{Aliases}.
3249
3250 @item bind
3251 @btindex bind
3252 @example
3253 bind [-m @var{keymap}] [-lpsvPSV]
3254 bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}]
3255 bind [-m @var{keymap}] -f @var{filename}
3256 bind [-m @var{keymap}] -x @var{keyseq:shell-command}
3257 bind [-m @var{keymap}] @var{keyseq:function-name}
3258 bind @var{readline-command}
3259 @end example
3260
3261 Display current Readline (@pxref{Command Line Editing})
3262 key and function bindings,
3263 bind a key sequence to a Readline function or macro,
3264 or set a Readline variable.
3265 Each non-option argument is a command as it would appear in a
3266 Readline initialization file (@pxref{Readline Init File}),
3267 but each binding or command must be passed as a separate argument;  e.g.,
3268 @samp{"\C-x\C-r":re-read-init-file}.
3269
3270 Options, if supplied, have the following meanings:
3271
3272 @table @code
3273 @item -m @var{keymap}
3274 Use @var{keymap} as the keymap to be affected by
3275 the subsequent bindings.  Acceptable @var{keymap}
3276 names are
3277 @code{emacs},
3278 @code{emacs-standard},
3279 @code{emacs-meta},
3280 @code{emacs-ctlx},
3281 @code{vi},
3282 @code{vi-move},
3283 @code{vi-command}, and
3284 @code{vi-insert}.
3285 @code{vi} is equivalent to @code{vi-command};
3286 @code{emacs} is equivalent to @code{emacs-standard}.
3287
3288 @item -l
3289 List the names of all Readline functions.
3290
3291 @item -p
3292 Display Readline function names and bindings in such a way that they
3293 can be used as input or in a Readline initialization file.
3294
3295 @item -P
3296 List current Readline function names and bindings.
3297
3298 @item -v
3299 Display Readline variable names and values in such a way that they
3300 can be used as input or in a Readline initialization file.
3301
3302 @item -V
3303 List current Readline variable names and values.
3304
3305 @item -s
3306 Display Readline key sequences bound to macros and the strings they output
3307 in such a way that they can be used as input or in a Readline
3308 initialization file.
3309
3310 @item -S
3311 Display Readline key sequences bound to macros and the strings they output.
3312
3313 @item -f @var{filename}
3314 Read key bindings from @var{filename}.
3315
3316 @item -q @var{function}
3317 Query about which keys invoke the named @var{function}.
3318
3319 @item -u @var{function}
3320 Unbind all keys bound to the named @var{function}.
3321
3322 @item -r @var{keyseq}
3323 Remove any current binding for @var{keyseq}.
3324
3325 @item -x @var{keyseq:shell-command}
3326 Cause @var{shell-command} to be executed whenever @var{keyseq} is
3327 entered.
3328 When @var{shell-command} is executed, the shell sets the
3329 @code{READLINE_LINE} variable to the contents of the Readline line
3330 buffer and the @code{READLINE_POINT} variable to the current location
3331 of the insertion point.
3332 If the executed command changes the value of @code{READLINE_LINE} or
3333 @code{READLINE_POINT}, those new values will be reflected in the
3334 editing state.
3335 @end table
3336
3337 @noindent
3338 The return status is zero unless an invalid option is supplied or an
3339 error occurs.
3340
3341 @item builtin
3342 @btindex builtin
3343 @example
3344 builtin [@var{shell-builtin} [@var{args}]]
3345 @end example
3346 Run a shell builtin, passing it @var{args}, and return its exit status.
3347 This is useful when defining a shell function with the same
3348 name as a shell builtin, retaining the functionality of the builtin within
3349 the function.
3350 The return status is non-zero if @var{shell-builtin} is not a shell
3351 builtin command.
3352
3353 @item caller
3354 @btindex caller
3355 @example
3356 caller [@var{expr}]
3357 @end example
3358 Returns the context of any active subroutine call (a shell function or
3359 a script executed with the @code{.} or @code{source} builtins).
3360
3361 Without @var{expr}, @code{caller} displays the line number and source
3362 filename of the current subroutine call.
3363 If a non-negative integer is supplied as @var{expr}, @code{caller} 
3364 displays the line number, subroutine name, and source file corresponding
3365 to that position in the current execution call stack.  This extra
3366 information may be used, for example, to print a stack trace.  The
3367 current frame is frame 0.
3368
3369 The return value is 0 unless the shell is not executing a subroutine
3370 call or @var{expr} does not correspond to a valid position in the
3371 call stack.
3372
3373 @item command
3374 @btindex command
3375 @example
3376 command [-pVv] @var{command} [@var{arguments} @dots{}]
3377 @end example
3378 Runs @var{command} with @var{arguments} ignoring any shell function
3379 named @var{command}.
3380 Only shell builtin commands or commands found by searching the
3381 @env{PATH} are executed.
3382 If there is a shell function named @code{ls}, running @samp{command ls}
3383 within the function will execute the external command @code{ls}
3384 instead of calling the function recursively.
3385 The @option{-p} option means to use a default value for @env{PATH}
3386 that is guaranteed to find all of the standard utilities.
3387 The return status in this case is 127 if @var{command} cannot be
3388 found or an error occurred, and the exit status of @var{command}
3389 otherwise.
3390
3391 If either the @option{-V} or @option{-v} option is supplied, a
3392 description of @var{command} is printed.  The @option{-v} option
3393 causes a single word indicating the command or file name used to
3394 invoke @var{command} to be displayed; the @option{-V} option produces
3395 a more verbose description.  In this case, the return status is
3396 zero if @var{command} is found, and non-zero if not.
3397
3398 @item declare
3399 @btindex declare
3400 @example
3401 declare [-aAfFilrtux] [-p] [@var{name}[=@var{value}] @dots{}]
3402 @end example
3403
3404 Declare variables and give them attributes.  If no @var{name}s
3405 are given, then display the values of variables instead. 
3406
3407 The @option{-p} option will display the attributes and values of each
3408 @var{name}.
3409 When @option{-p} is used with @var{name} arguments, additional options
3410 are ignored.
3411
3412 When @option{-p} is supplied without @var{name} arguments, @code{declare}
3413 will display the attributes and values of all variables having the
3414 attributes specified by the additional options.
3415 If no other options are supplied with @option{-p}, @code{declare} will
3416 display the attributes and values of all shell variables.  The @option{-f}
3417 option will restrict the display to shell functions.
3418
3419 The @option{-F} option inhibits the display of function definitions;
3420 only the function name and attributes are printed.
3421 If the @code{extdebug} shell option is enabled using @code{shopt}
3422 (@pxref{The Shopt Builtin}), the source file name and line number where
3423 the function is defined are displayed as well.
3424 @option{-F} implies @option{-f}.
3425 The following options can be used to restrict output to variables with
3426 the specified attributes or to give variables attributes:
3427
3428 @table @code
3429 @item -a
3430 Each @var{name} is an indexed array variable (@pxref{Arrays}).
3431
3432 @item -A
3433 Each @var{name} is an associative array variable (@pxref{Arrays}).
3434
3435 @item -f
3436 Use function names only.
3437
3438 @item -i
3439 The variable is to be treated as
3440 an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is
3441 performed when the variable is assigned a value.
3442
3443 @item -l
3444 When the variable is assigned a value, all upper-case characters are
3445 converted to lower-case.
3446 The upper-case attribute is disabled.
3447
3448 @item -r
3449 Make @var{name}s readonly.  These names cannot then be assigned values
3450 by subsequent assignment statements or unset.
3451
3452 @item -t
3453 Give each @var{name} the @code{trace} attribute.
3454 Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from
3455 the calling shell.
3456 The trace attribute has no special meaning for variables.
3457
3458 @item -u
3459 When the variable is assigned a value, all lower-case characters are
3460 converted to upper-case.
3461 The lower-case attribute is disabled.
3462
3463 @item -x
3464 Mark each @var{name} for export to subsequent commands via
3465 the environment.
3466 @end table
3467
3468 Using @samp{+} instead of @samp{-} turns off the attribute instead,
3469 with the exceptions that @samp{+a}
3470 may not be used to destroy an array variable and @samp{+r} will not
3471 remove the readonly attribute.
3472 When used in a function, @code{declare} makes each @var{name} local,
3473 as with the @code{local} command.  If a variable name is followed by
3474 =@var{value}, the value of the variable is set to @var{value}.
3475
3476 The return status is zero unless an invalid option is encountered,
3477 an attempt is made to define a function using @samp{-f foo=bar},
3478 an attempt is made to assign a value to a readonly variable,
3479 an attempt is made to assign a value to an array variable without
3480 using the compound assignment syntax (@pxref{Arrays}),
3481 one of the @var{names} is not a valid shell variable name,
3482 an attempt is made to turn off readonly status for a readonly variable,
3483 an attempt is made to turn off array status for an array variable,
3484 or an attempt is made to display a non-existent function with @option{-f}.
3485
3486 @item echo
3487 @btindex echo
3488 @example
3489 echo [-neE] [@var{arg} @dots{}]
3490 @end example
3491 Output the @var{arg}s, separated by spaces, terminated with a
3492 newline.
3493 The return status is always 0.
3494 If @option{-n} is specified, the trailing newline is suppressed.
3495 If the @option{-e} option is given, interpretation of the following
3496 backslash-escaped characters is enabled.
3497 The @option{-E} option disables the interpretation of these escape characters,
3498 even on systems where they are interpreted by default.
3499 The @code{xpg_echo} shell option may be used to
3500 dynamically determine whether or not @code{echo} expands these
3501 escape characters by default.
3502 @code{echo} does not interpret @option{--} to mean the end of options.
3503
3504 @code{echo} interprets the following escape sequences:
3505 @table @code
3506 @item \a
3507 alert (bell)
3508 @item \b
3509 backspace
3510 @item \c
3511 suppress further output
3512 @item \e
3513 escape
3514 @item \f
3515 form feed
3516 @item \n
3517 new line
3518 @item \r
3519 carriage return
3520 @item \t 
3521 horizontal tab
3522 @item \v
3523 vertical tab
3524 @item \\
3525 backslash
3526 @item \0@var{nnn}
3527 the eight-bit character whose value is the octal value @var{nnn}
3528 (zero to three octal digits)
3529 @item \x@var{HH}
3530 the eight-bit character whose value is the hexadecimal value @var{HH}
3531 (one or two hex digits)
3532 @end table
3533
3534 @item enable
3535 @btindex enable
3536 @example
3537 enable [-a] [-dnps] [-f @var{filename}] [@var{name} @dots{}]
3538 @end example
3539 Enable and disable builtin shell commands.
3540 Disabling a builtin allows a disk command which has the same name
3541 as a shell builtin to be executed without specifying a full pathname,
3542 even though the shell normally searches for builtins before disk commands.
3543 If @option{-n} is used, the @var{name}s become disabled.  Otherwise
3544 @var{name}s are enabled.  For example, to use the @code{test} binary
3545 found via @env{$PATH} instead of the shell builtin version, type
3546 @samp{enable -n test}.
3547
3548 If the @option{-p} option is supplied, or no @var{name} arguments appear,
3549 a list of shell builtins is printed.  With no other arguments, the list
3550 consists of all enabled shell builtins.
3551 The @option{-a} option means to list
3552 each builtin with an indication of whether or not it is enabled. 
3553
3554 The @option{-f} option means to load the new builtin command @var{name}
3555 from shared object @var{filename}, on systems that support dynamic loading.
3556 The @option{-d} option will delete a builtin loaded with @option{-f}.
3557
3558 If there are no options, a list of the shell builtins is displayed.
3559 The @option{-s} option restricts @code{enable} to the @sc{posix} special
3560 builtins.  If @option{-s} is used with @option{-f}, the new builtin becomes
3561 a special builtin (@pxref{Special Builtins}).
3562
3563 The return status is zero unless a @var{name} is not a shell builtin
3564 or there is an error loading a new builtin from a shared object.
3565
3566 @item help
3567 @btindex help
3568 @example
3569 help [-dms] [@var{pattern}]
3570 @end example
3571 Display helpful information about builtin commands.
3572 If @var{pattern} is specified, @code{help} gives detailed help
3573 on all commands matching @var{pattern}, otherwise a list of
3574 the builtins is printed.
3575
3576 Options, if supplied, have the following meanings:
3577
3578 @table @code
3579 @item -d
3580 Display a short description of each @var{pattern}
3581 @item -m
3582 Display the description of each @var{pattern} in a manpage-like format
3583 @item -s
3584 Display only a short usage synopsis for each @var{pattern}
3585 @end table
3586
3587 The return status is zero unless no command matches @var{pattern}.
3588
3589 @item let
3590 @btindex let
3591 @example
3592 let @var{expression} [@var{expression}]
3593 @end example
3594 The @code{let} builtin allows arithmetic to be performed on shell
3595 variables.  Each @var{expression} is evaluated according to the
3596 rules given below in @ref{Shell Arithmetic}.  If the
3597 last @var{expression} evaluates to 0, @code{let} returns 1;
3598 otherwise 0 is returned.
3599
3600 @item local
3601 @btindex local
3602 @example
3603 local [@var{option}] @var{name}[=@var{value}] @dots{}
3604 @end example
3605 For each argument, a local variable named @var{name} is created,
3606 and assigned @var{value}.
3607 The @var{option} can be any of the options accepted by @code{declare}.
3608 @code{local} can only be used within a function; it makes the variable
3609 @var{name} have a visible scope restricted to that function and its
3610 children.  The return status is zero unless @code{local} is used outside
3611 a function, an invalid @var{name} is supplied, or @var{name} is a
3612 readonly variable.
3613
3614 @item logout
3615 @btindex logout
3616 @example
3617 logout [@var{n}]
3618 @end example
3619 Exit a login shell, returning a status of @var{n} to the shell's
3620 parent.
3621
3622 @item mapfile
3623 @btindex mapfile
3624 @example
3625 mapfile [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}] [
3626 -C @var{callback}] [-c @var{quantum}] [@var{array}]
3627 @end example
3628 Read lines from the standard input into array variable @var{array},
3629 or from file descriptor @var{fd}
3630 if the @option{-u} option is supplied.
3631 The variable @code{MAPFILE} is the default @var{array}.
3632 Options, if supplied, have the following meanings:
3633 @table @code
3634
3635 @item -n
3636 Copy at most @var{count} lines.  If @var{count} is 0, all lines are copied.
3637 @item -O
3638 Begin assigning to @var{array} at index @var{origin}.
3639 The default index is 0.
3640 @item -s
3641 Discard the first @var{count} lines read.
3642 @item -t
3643 Remove a trailing line from each line read.
3644 @item -u
3645 Read lines from file descriptor @var{fd} instead of the standard input.
3646 @item -C
3647 Evaluate @var{callback} each time @var{quantum}P lines are read.
3648 The @option{-c} option specifies @var{quantum}.
3649 @item -c
3650 Specify the number of lines read between each call to @var{callback}.
3651 @end table
3652
3653 If @option{-C} is specified without @option{-c}, 
3654 the default quantum is 5000.
3655 When @var{callback}  is evaluated, it is supplied the index of the next
3656 array element to be assigned as an additional argument.
3657 @var{callback} is evaluated after the line is read but before the 
3658 array element is assigned.
3659
3660 If not supplied with an explicit origin, @code{mapfile} will clear @var{array}
3661 before assigning to it.
3662
3663 @code{mapfile} returns successfully unless an invalid option or option
3664 argument is supplied, or @var{array} is invalid or unassignable.
3665
3666 @item printf
3667 @btindex printf
3668 @example
3669 printf [-v @var{var}] @var{format} [@var{arguments}]
3670 @end example
3671 Write the formatted @var{arguments} to the standard output under the
3672 control of the @var{format}.
3673 The @var{format} is a character string which contains three types of objects:
3674 plain characters, which are simply copied to standard output, character
3675 escape sequences, which are converted and copied to the standard output, and
3676 format specifications, each of which causes printing of the next successive
3677 @var{argument}.
3678 In addition to the standard @code{printf(1)} formats, @samp{%b} causes
3679 @code{printf} to expand backslash escape sequences in the corresponding
3680 @var{argument},
3681 (except that @samp{\c} terminates output, backslashes in
3682 @samp{\'}, @samp{\"}, and @samp{\?} are not removed, and octal escapes
3683 beginning with @samp{\0} may contain up to four digits),
3684 and @samp{%q} causes @code{printf} to output the
3685 corresponding @var{argument} in a format that can be reused as shell input.
3686
3687 The @option{-v} option causes the output to be assigned to the variable
3688 @var{var} rather than being printed to the standard output.
3689
3690 The @var{format} is reused as necessary to consume all of the @var{arguments}.
3691 If the @var{format} requires more @var{arguments} than are supplied, the
3692 extra format specifications behave as if a zero value or null string, as
3693 appropriate, had been supplied.  The return value is zero on success,
3694 non-zero on failure.
3695
3696 @item read
3697 @btindex read
3698 @example
3699 read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}]
3700 @end example
3701 One line is read from the standard input, or from the file descriptor
3702 @var{fd} supplied as an argument to the @option{-u} option, and the first word
3703 is assigned to the first @var{name}, the second word to the second @var{name},
3704 and so on, with leftover words and their intervening separators assigned
3705 to the last @var{name}.
3706 If there are fewer words read from the input stream than names,
3707 the remaining names are assigned empty values.
3708 The characters in the value of the @env{IFS} variable
3709 are used to split the line into words.
3710 The backslash character @samp{\} may be used to remove any special
3711 meaning for the next character read and for line continuation.
3712 If no names are supplied, the line read is assigned to the
3713 variable @env{REPLY}.
3714 The return code is zero, unless end-of-file is encountered, @code{read}
3715 times out (in which case the return code is greater than 128), or an
3716 invalid file descriptor is supplied as the argument to @option{-u}.
3717
3718 Options, if supplied, have the following meanings:
3719
3720 @table @code
3721 @item -a @var{aname}
3722 The words are assigned to sequential indices of the array variable
3723 @var{aname}, starting at 0.
3724 All elements are removed from @var{aname} before the assignment.
3725 Other @var{name} arguments are ignored.
3726
3727 @item -d @var{delim}
3728 The first character of @var{delim} is used to terminate the input line,
3729 rather than newline.
3730
3731 @item -e
3732 Readline (@pxref{Command Line Editing}) is used to obtain the line.
3733 Readline uses the current (or default, if line editing was not previously
3734 active) editing settings.
3735
3736 @item -i @var{text}
3737 If Readline is being used to read the line, @var{text} is placed into
3738 the editing buffer before editing begins.
3739
3740 @item -n @var{nchars}
3741 @code{read} returns after reading @var{nchars} characters rather than
3742 waiting for a complete line of input.
3743
3744 @item -p @var{prompt}
3745 Display @var{prompt}, without a trailing newline, before attempting
3746 to read any input.
3747 The prompt is displayed only if input is coming from a terminal.
3748
3749 @item -r
3750 If this option is given, backslash does not act as an escape character.
3751 The backslash is considered to be part of the line.
3752 In particular, a backslash-newline pair may not be used as a line
3753 continuation.
3754
3755 @item -s
3756 Silent mode.  If input is coming from a terminal, characters are
3757 not echoed.
3758
3759 @item -t @var{timeout}
3760 Cause @code{read} to time out and return failure if a complete line of
3761 input is not read within @var{timeout} seconds.
3762 @var{timeout}  may be a decimal number with a fractional portion following
3763 the decimal point.
3764 This option is only effective if @code{read} is reading input from a
3765 terminal, pipe, or other special file; it has no effect when reading
3766 from regular files.
3767 If @var{timeout} is 0, @code{read} returns success if input is available on
3768 the specified file descriptor, failure otherwise.
3769 The exit status is greater than 128 if the timeout is exceeded.
3770
3771 @item -u @var{fd}
3772 Read input from file descriptor @var{fd}.
3773
3774 @end table
3775
3776 @item readarray
3777 @btindex readarray
3778 @example
3779 readarray [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}] [
3780 -C @var{callback}] [-c @var{quantum}] [@var{array}]
3781 @end example
3782 Read lines from the standard input into array variable @var{array},
3783 or from file descriptor @var{fd}
3784 if the @option{-u} option is supplied.
3785
3786 A synonym for @code{mapfile}.
3787
3788 @item source
3789 @btindex source
3790 @example
3791 source @var{filename}
3792 @end example
3793 A synonym for @code{.} (@pxref{Bourne Shell Builtins}).
3794
3795 @item type
3796 @btindex type
3797 @example
3798 type [-afptP] [@var{name} @dots{}]
3799 @end example
3800 For each @var{name}, indicate how it would be interpreted if used as a
3801 command name.
3802
3803 If the @option{-t} option is used, @code{type} prints a single word
3804 which is one of @samp{alias}, @samp{function}, @samp{builtin},
3805 @samp{file} or @samp{keyword},
3806 if @var{name} is an alias, shell function, shell builtin,
3807 disk file, or shell reserved word, respectively.
3808 If the @var{name} is not found, then nothing is printed, and
3809 @code{type} returns a failure status.
3810
3811 If the @option{-p} option is used, @code{type} either returns the name
3812 of the disk file that would be executed, or nothing if @option{-t}
3813 would not return @samp{file}.
3814
3815 The @option{-P} option forces a path search for each @var{name}, even if
3816 @option{-t} would not return @samp{file}.
3817
3818 If a command is hashed, @option{-p} and @option{-P} print the hashed value,
3819 not necessarily the file that appears first in @code{$PATH}.
3820
3821 If the @option{-a} option is used, @code{type} returns all of the places
3822 that contain an executable named @var{file}.
3823 This includes aliases and functions, if and only if the @option{-p} option
3824 is not also used.
3825
3826 If the @option{-f} option is used, @code{type} does not attempt to find
3827 shell functions, as with the @code{command} builtin.
3828
3829 The return status is zero if all of the @var{names} are found, non-zero
3830 if any are not found.
3831
3832 @item typeset
3833 @btindex typeset
3834 @example
3835 typeset [-afFrxi] [-p] [@var{name}[=@var{value}] @dots{}]
3836 @end example
3837 The @code{typeset} command is supplied for compatibility with the Korn
3838 shell; however, it has been deprecated in favor of the @code{declare}
3839 builtin command.
3840
3841 @item ulimit
3842 @btindex ulimit
3843 @example
3844 ulimit [-abcdefilmnpqrstuvxHST] [@var{limit}]
3845 @end example
3846 @code{ulimit} provides control over the resources available to processes
3847 started by the shell, on systems that allow such control.  If an
3848 option is given, it is interpreted as follows:
3849 @table @code
3850 @item -S
3851 Change and report the soft limit associated with a resource.
3852
3853 @item -H
3854 Change and report the hard limit associated with a resource.
3855
3856 @item -a
3857 All current limits are reported.
3858
3859 @item -b
3860 The maximum socket buffer size.
3861
3862 @item -c
3863 The maximum size of core files created.
3864
3865 @item -d
3866 The maximum size of a process's data segment.
3867
3868 @item -e
3869 The maximum scheduling priority ("nice").
3870
3871 @item -f
3872 The maximum size of files written by the shell and its children.
3873
3874 @item -i
3875 The maximum number of pending signals.
3876
3877 @item -l
3878 The maximum size that may be locked into memory.
3879
3880 @item -m
3881 The maximum resident set size (many systems do not honor this limit).
3882
3883 @item -n
3884 The maximum number of open file descriptors (most systems do not
3885 allow this value to be set).
3886
3887 @item -p
3888 The pipe buffer size.
3889
3890 @item -q
3891 The maximum number of bytes in POSIX message queues.
3892
3893 @item -r
3894 The maximum real-time scheduling priority.
3895
3896 @item -s
3897 The maximum stack size.
3898
3899 @item -t
3900 The maximum amount of cpu time in seconds.
3901
3902 @item -u
3903 The maximum number of processes available to a single user.
3904
3905 @item -v
3906 The maximum amount of virtual memory available to the process.
3907
3908 @item -x
3909 The maximum number of file locks.
3910
3911 @item -T
3912 The maximum number of threads.
3913
3914 @end table
3915
3916 If @var{limit} is given, it is the new value of the specified resource;
3917 the special @var{limit} values @code{hard}, @code{soft}, and
3918 @code{unlimited} stand for the current hard limit, the current soft limit,
3919 and no limit, respectively.
3920 A hard limit cannot be increased by a non-root user once it is set;
3921 a soft limit may be increased up to the value of the hard limit.
3922 Otherwise, the current value of the soft limit for the specified resource
3923 is printed, unless the @option{-H} option is supplied.
3924 When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
3925 both the hard and soft limits are set.
3926 If no option is given, then @option{-f} is assumed.  Values are in 1024-byte
3927 increments, except for @option{-t}, which is in seconds, @option{-p},
3928 which is in units of 512-byte blocks, and @option{-n} and @option{-u}, which
3929 are unscaled values.
3930
3931 The return status is zero unless an invalid option or argument is supplied,
3932 or an error occurs while setting a new limit.
3933
3934 @item unalias
3935 @btindex unalias
3936 @example
3937 unalias [-a] [@var{name} @dots{} ]
3938 @end example
3939
3940 Remove each @var{name} from the list of aliases.  If @option{-a} is
3941 supplied, all aliases are removed.
3942 Aliases are described in @ref{Aliases}.
3943
3944 @end table
3945
3946 @node Modifying Shell Behavior
3947 @section Modifying Shell Behavior
3948  
3949 @menu
3950 * The Set Builtin::             Change the values of shell attributes and
3951                                 positional parameters.
3952 * The Shopt Builtin::           Modify shell optional behavior.
3953 @end menu
3954
3955 @node The Set Builtin
3956 @subsection The Set Builtin
3957
3958 This builtin is so complicated that it deserves its own section.  @code{set}
3959 allows you to change the values of shell options and set the positional
3960 parameters, or to display the names and values of shell variables.
3961
3962 @table @code
3963 @item set
3964 @btindex set
3965 @example
3966 set [--abefhkmnptuvxBCEHPT] [-o @var{option}] [@var{argument} @dots{}]
3967 set [+abefhkmnptuvxBCEHPT] [+o @var{option}] [@var{argument} @dots{}]
3968 @end example
3969
3970 If no options or arguments are supplied, @code{set} displays the names
3971 and values of all shell variables and functions, sorted according to the
3972 current locale, in a format that may be reused as input
3973 for setting or resetting the currently-set variables.
3974 Read-only variables cannot be reset.
3975 In @sc{posix} mode, only shell variables are listed.
3976
3977 When options are supplied, they set or unset shell attributes.
3978 Options, if specified, have the following meanings:
3979
3980 @table @code
3981 @item -a
3982 Mark variables and function which are modified or created for export
3983 to the environment of subsequent commands.
3984
3985 @item -b
3986 Cause the status of terminated background jobs to be reported
3987 immediately, rather than before printing the next primary prompt.
3988
3989 @item -e
3990 Exit immediately if a pipeline (@pxref{Pipelines}), which may consist
3991 of a single simple command (@pxref{Simple Commands}),
3992 a subshell command enclosed in parentheses (@pxref{Command Grouping}),
3993 or one of the commands executed as part of a command list enclosed
3994 by braces (@pxref{Command Grouping})
3995 returns a non-zero status.
3996 The shell does not exit if the command that fails is part of the
3997 command list immediately following a @code{while} or @code{until} keyword,
3998 part of the test in an @code{if} statement,
3999 part of any command executed in a @code{&&} or @code{||} list except
4000 the command following the final @code{&&} or @code{||},
4001 any command in a pipeline but the last,
4002 or if the command's return status is being inverted with @code{!}.
4003 A trap on @code{ERR}, if set, is executed before the shell exits.
4004
4005 This option applies to the shell environment and each subshell environment
4006 separately (@pxref{Command Execution Environment}), and may cause
4007 subshells to exit before executing all the commands in the subshell.
4008
4009 @item -f
4010 Disable file name generation (globbing).
4011
4012 @item -h
4013 Locate and remember (hash) commands as they are looked up for execution.
4014 This option is enabled by default.
4015
4016 @item -k
4017 All arguments in the form of assignment statements are placed
4018 in the environment for a command, not just those that precede
4019 the command name.
4020
4021 @item -m
4022 Job control is enabled (@pxref{Job Control}).
4023
4024 @item -n
4025 Read commands but do not execute them; this may be used to check a
4026 script for syntax errors.
4027 This option is ignored by interactive shells.
4028
4029 @item -o @var{option-name}
4030
4031 Set the option corresponding to @var{option-name}:
4032
4033 @table @code
4034 @item allexport
4035 Same as @code{-a}.
4036
4037 @item braceexpand
4038 Same as @code{-B}.
4039
4040 @item emacs
4041 Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}).
4042 This also affects the editing interface used for @code{read -e}.
4043
4044 @item errexit
4045 Same as @code{-e}.
4046
4047 @item errtrace
4048 Same as @code{-E}.
4049
4050 @item functrace
4051 Same as @code{-T}.
4052
4053 @item hashall
4054 Same as @code{-h}.
4055
4056 @item histexpand
4057 Same as @code{-H}.
4058
4059 @item history
4060 Enable command history, as described in @ref{Bash History Facilities}.
4061 This option is on by default in interactive shells.
4062
4063 @item ignoreeof
4064 An interactive shell will not exit upon reading EOF.
4065
4066 @item keyword
4067 Same as @code{-k}.
4068
4069 @item monitor
4070 Same as @code{-m}.
4071
4072 @item noclobber
4073 Same as @code{-C}.
4074
4075 @item noexec
4076 Same as @code{-n}.
4077
4078 @item noglob
4079 Same as @code{-f}.
4080
4081 @item nolog
4082 Currently ignored.
4083
4084 @item notify
4085 Same as @code{-b}.
4086
4087 @item nounset
4088 Same as @code{-u}.
4089
4090 @item onecmd
4091 Same as @code{-t}.
4092
4093 @item physical
4094 Same as @code{-P}.
4095
4096 @item pipefail
4097 If set, the return value of a pipeline is the value of the last
4098 (rightmost) command to exit with a non-zero status, or zero if all
4099 commands in the pipeline exit successfully.
4100 This option is disabled by default.
4101
4102 @item posix
4103 Change the behavior of Bash where the default operation differs
4104 from the @sc{posix} standard to match the standard
4105 (@pxref{Bash POSIX Mode}).
4106 This is intended to make Bash behave as a strict superset of that
4107 standard.
4108
4109 @item privileged
4110 Same as @code{-p}.
4111
4112 @item verbose
4113 Same as @code{-v}.
4114
4115 @item vi
4116 Use a @code{vi}-style line editing interface.
4117 This also affects the editing interface used for @code{read -e}.
4118
4119 @item xtrace
4120 Same as @code{-x}.
4121 @end table
4122
4123 @item -p
4124 Turn on privileged mode.
4125 In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not
4126 processed, shell functions are not inherited from the environment,
4127 and the @env{SHELLOPTS}, @env{CDPATH} and @env{GLOBIGNORE}  variables,
4128 if they appear in the environment, are ignored.
4129 If the shell is started with the effective user (group) id not equal to the
4130 real user (group) id, and the @code{-p} option is not supplied, these actions
4131 are taken and the effective user id is set to the real user id.
4132 If the @code{-p} option is supplied at startup, the effective user id is
4133 not reset.
4134 Turning this option off causes the effective user
4135 and group ids to be set to the real user and group ids.
4136
4137 @item -t
4138 Exit after reading and executing one command.
4139
4140 @item -u
4141 Treat unset variables and parameters other than the special parameters
4142 @samp{@@} or @samp{*} as an error when performing parameter expansion.
4143 An error message will be written to the standard error, and a non-interactive
4144 shell will exit.
4145
4146 @item -v
4147 Print shell input lines as they are read.
4148
4149 @item -x
4150 Print a trace of simple commands, @code{for} commands, @code{case}
4151 commands, @code{select} commands, and arithmetic @code{for} commands
4152 and their arguments or associated word lists after they are
4153 expanded and before they are executed.  The value of the @env{PS4}
4154 variable is expanded and the resultant value is printed before
4155 the command and its expanded arguments.
4156
4157 @item -B
4158 The shell will perform brace expansion (@pxref{Brace Expansion}).
4159 This option is on by default.
4160
4161 @item -C
4162 Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>}
4163 from overwriting existing files.
4164
4165 @item -E
4166 If set, any trap on @code{ERR} is inherited by shell functions, command
4167 substitutions, and commands executed in a subshell environment.
4168 The @code{ERR} trap is normally not inherited in such cases.
4169
4170 @item -H
4171 Enable @samp{!} style history substitution (@pxref{History Interaction}).
4172 This option is on by default for interactive shells.
4173
4174 @item -P
4175 If set, do not follow symbolic links when performing commands such as
4176 @code{cd} which change the current directory.  The physical directory
4177 is used instead.  By default, Bash follows
4178 the logical chain of directories when performing commands
4179 which change the current directory.
4180
4181 For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys}
4182 then:
4183 @example
4184 $ cd /usr/sys; echo $PWD
4185 /usr/sys
4186 $ cd ..; pwd
4187 /usr
4188 @end example
4189
4190 @noindent
4191 If @code{set -P} is on, then:
4192 @example
4193 $ cd /usr/sys; echo $PWD
4194 /usr/local/sys
4195 $ cd ..; pwd
4196 /usr/local
4197 @end example
4198
4199 @item -T
4200 If set, any trap on @code{DEBUG} and @code{RETURN} are inherited by
4201 shell functions, command substitutions, and commands executed
4202 in a subshell environment.
4203 The @code{DEBUG} and @code{RETURN} traps are normally not inherited
4204 in such cases.
4205
4206 @item --
4207 If no arguments follow this option, then the positional parameters are
4208 unset.  Otherwise, the positional parameters are set to the
4209 @var{arguments}, even if some of them begin with a @samp{-}.
4210
4211 @item -
4212 Signal the end of options, cause all remaining @var{arguments}
4213 to be assigned to the positional parameters.  The @option{-x}
4214 and @option{-v}  options are turned off.
4215 If there are no arguments, the positional parameters remain unchanged.
4216 @end table
4217
4218 Using @samp{+} rather than @samp{-} causes these options to be
4219 turned off.  The options can also be used upon invocation of the
4220 shell.  The current set of options may be found in @code{$-}.
4221
4222 The remaining N @var{arguments} are positional parameters and are
4223 assigned, in order, to @code{$1}, @code{$2}, @dots{}  @code{$N}.
4224 The special parameter @code{#} is set to N.
4225
4226 The return status is always zero unless an invalid option is supplied.
4227 @end table
4228
4229 @node The Shopt Builtin
4230 @subsection The Shopt Builtin
4231
4232 This builtin allows you to change additional shell optional behavior.
4233
4234 @table @code
4235
4236 @item shopt
4237 @btindex shopt
4238 @example
4239 shopt [-pqsu] [-o] [@var{optname} @dots{}]
4240 @end example
4241 Toggle the values of variables controlling optional shell behavior.
4242 With no options, or with the @option{-p} option, a list of all settable
4243 options is displayed, with an indication of whether or not each is set.
4244 The @option{-p} option causes output to be displayed in a form that
4245 may be reused as input.
4246 Other options have the following meanings:
4247
4248 @table @code
4249 @item -s
4250 Enable (set) each @var{optname}.
4251
4252 @item -u
4253 Disable (unset) each @var{optname}.
4254
4255 @item -q
4256 Suppresses normal output; the return status
4257 indicates whether the @var{optname} is set or unset.
4258 If multiple @var{optname} arguments are given with @option{-q},
4259 the return status is zero if all @var{optnames} are enabled;
4260 non-zero otherwise.
4261
4262 @item -o
4263 Restricts the values of
4264 @var{optname} to be those defined for the @option{-o} option to the
4265 @code{set} builtin (@pxref{The Set Builtin}).
4266 @end table
4267
4268 If either @option{-s} or @option{-u}
4269 is used with no @var{optname} arguments, the display is limited to
4270 those options which are set or unset, respectively.
4271
4272 Unless otherwise noted, the @code{shopt} options are disabled (off)
4273 by default.
4274
4275 The return status when listing options is zero if all @var{optnames}
4276 are enabled, non-zero otherwise.  When setting or unsetting options,
4277 the return status is zero unless an @var{optname} is not a valid shell
4278 option.
4279
4280 The list of @code{shopt} options is:
4281 @table @code
4282
4283 @item autocd
4284 If set, a command name that is the name of a directory is executed as if
4285 it were the argument to the @code{cd} command.
4286 This option is only used by interactive shells.
4287
4288 @item cdable_vars
4289 If this is set, an argument to the @code{cd} builtin command that
4290 is not a directory is assumed to be the name of a variable whose
4291 value is the directory to change to.
4292
4293 @item cdspell
4294 If set, minor errors in the spelling of a directory component in a
4295 @code{cd} command will be corrected.
4296 The errors checked for are transposed characters,
4297 a missing character, and a character too many.
4298 If a correction is found, the corrected path is printed,
4299 and the command proceeds.
4300 This option is only used by interactive shells.
4301
4302 @item checkhash
4303 If this is set, Bash checks that a command found in the hash
4304 table exists before trying to execute it.  If a hashed command no
4305 longer exists, a normal path search is performed.
4306
4307 @item checkjobs
4308 If set, Bash lists the status of any stopped and running jobs before
4309 exiting an interactive shell.  If any jobs are running, this causes
4310 the exit to be deferred until a second exit is attempted without an
4311 intervening command (@pxref{Job Control}).
4312 The shell always postpones exiting if any jobs are stopped.
4313
4314 @item checkwinsize
4315 If set, Bash checks the window size after each command
4316 and, if necessary, updates the values of    
4317 @env{LINES} and @env{COLUMNS}.
4318
4319 @item cmdhist
4320 If set, Bash
4321 attempts to save all lines of a multiple-line
4322 command in the same history entry.  This allows
4323 easy re-editing of multi-line commands.
4324
4325 @item compat31
4326 If set, Bash
4327 changes its behavior to that of version 3.1 with respect to quoted
4328 arguments to the conditional command's =~ operator.
4329
4330 @item dirspell
4331 If set, Bash
4332 attempts spelling correction on directory names during word completion 
4333 if the directory name initially supplied does not exist.
4334
4335 @item dotglob
4336 If set, Bash includes filenames beginning with a `.' in
4337 the results of filename expansion.
4338
4339 @item execfail
4340 If this is set, a non-interactive shell will not exit if
4341 it cannot execute the file specified as an argument to the @code{exec}
4342 builtin command.  An interactive shell does not exit if @code{exec}
4343 fails.
4344
4345 @item expand_aliases
4346 If set, aliases are expanded as described below under Aliases,
4347 @ref{Aliases}.
4348 This option is enabled by default for interactive shells.
4349
4350 @item extdebug
4351 If set, behavior intended for use by debuggers is enabled:
4352
4353 @enumerate
4354 @item
4355 The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins})
4356 displays the source file name and line number corresponding to each function
4357 name supplied as an argument.
4358
4359 @item
4360 If the command run by the @code{DEBUG} trap returns a non-zero value, the
4361 next command is skipped and not executed.
4362
4363 @item
4364 If the command run by the @code{DEBUG} trap returns a value of 2, and the
4365 shell is executing in a subroutine (a shell function or a shell script
4366 executed by the @code{.} or @code{source} builtins), a call to
4367 @code{return} is simulated.
4368
4369 @item
4370 @code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their
4371 descriptions (@pxref{Bash Variables}).
4372
4373 @item
4374 Function tracing is enabled:  command substitution, shell functions, and
4375 subshells invoked with @code{( @var{command} )} inherit the
4376 @code{DEBUG} and @code{RETURN} traps.
4377
4378 @item
4379 Error tracing is enabled:  command substitution, shell functions, and
4380 subshells invoked with @code{( @var{command} )} inherit the
4381 @code{ERROR} trap.
4382 @end enumerate
4383
4384 @item extglob
4385 If set, the extended pattern matching features described above
4386 (@pxref{Pattern Matching}) are enabled.
4387
4388 @item extquote
4389 If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is  
4390 performed within @code{$@{@var{parameter}@}} expansions                     
4391 enclosed in double quotes.  This option is enabled by default. 
4392
4393 @item failglob
4394 If set, patterns which fail to match filenames during pathname expansion
4395 result in an expansion error.
4396
4397 @item force_fignore
4398 If set, the suffixes specified by the @env{FIGNORE} shell variable
4399 cause words to be ignored when performing word completion even if
4400 the ignored words are the only possible completions.
4401 @xref{Bash Variables}, for a description of @env{FIGNORE}.
4402 This option is enabled by default.
4403
4404 @item globstar
4405 If set, the pattern @samp{**} used in a filename expansion context will
4406 match a files and zero or more directories and subdirectories.
4407 If the pattern is followed by a @samp{/}, only directories and
4408 subdirectories match.
4409
4410 @item gnu_errfmt
4411 If set, shell error messages are written in the standard @sc{gnu} error
4412 message format.
4413
4414 @item histappend
4415 If set, the history list is appended to the file named by the value
4416 of the @env{HISTFILE}
4417 variable when the shell exits, rather than overwriting the file.
4418
4419 @item histreedit
4420 If set, and Readline
4421 is being used, a user is given the opportunity to re-edit a
4422 failed history substitution.
4423
4424 @item histverify
4425 If set, and Readline
4426 is being used, the results of history substitution are not immediately
4427 passed to the shell parser.  Instead, the resulting line is loaded into
4428 the Readline editing buffer, allowing further modification.
4429
4430 @item hostcomplete
4431 If set, and Readline is being used, Bash will attempt to perform
4432 hostname completion when a word containing a @samp{@@} is being
4433 completed (@pxref{Commands For Completion}).  This option is enabled
4434 by default.
4435
4436 @item huponexit
4437 If set, Bash will send @code{SIGHUP} to all jobs when an interactive
4438 login shell exits (@pxref{Signals}).
4439
4440 @item interactive_comments
4441 Allow a word beginning with @samp{#}
4442 to cause that word and all remaining characters on that
4443 line to be ignored in an interactive shell.
4444 This option is enabled by default.
4445
4446 @item lithist
4447 If enabled, and the @code{cmdhist}
4448 option is enabled, multi-line commands are saved to the history with
4449 embedded newlines rather than using semicolon separators where possible.
4450
4451 @item login_shell
4452 The shell sets this option if it is started as a login shell
4453 (@pxref{Invoking Bash}).
4454 The value may not be changed.
4455
4456 @item mailwarn
4457 If set, and a file that Bash is checking for mail has been  
4458 accessed since the last time it was checked, the message
4459 @code{"The mail in @var{mailfile} has been read"} is displayed.
4460
4461 @item no_empty_cmd_completion
4462 If set, and Readline is being used, Bash will not attempt to search
4463 the @env{PATH} for possible completions when completion is attempted
4464 on an empty line.
4465
4466 @item nocaseglob
4467 If set, Bash matches filenames in a case-insensitive fashion when
4468 performing filename expansion.
4469
4470 @item nocasematch
4471 If set, Bash matches patterns in a case-insensitive fashion when
4472 performing matching while executing @code{case} or @code{[[}
4473 conditional commands.
4474
4475 @item nullglob
4476 If set, Bash allows filename patterns which match no
4477 files to expand to a null string, rather than themselves.
4478
4479 @item progcomp
4480 If set, the programmable completion facilities
4481 (@pxref{Programmable Completion}) are enabled.
4482 This option is enabled by default.
4483
4484 @item promptvars
4485 If set, prompt strings undergo
4486 parameter expansion, command substitution, arithmetic
4487 expansion, and quote removal after being expanded
4488 as described below (@pxref{Printing a Prompt}).
4489 This option is enabled by default.
4490
4491 @item restricted_shell
4492 The shell sets this option if it is started in restricted mode
4493 (@pxref{The Restricted Shell}).
4494 The value may not be changed.
4495 This is not reset when the startup files are executed, allowing
4496 the startup files to discover whether or not a shell is restricted.
4497
4498 @item shift_verbose
4499 If this is set, the @code{shift}
4500 builtin prints an error message when the shift count exceeds the
4501 number of positional parameters.
4502
4503 @item sourcepath
4504 If set, the @code{source} builtin uses the value of @env{PATH}
4505 to find the directory containing the file supplied as an argument.
4506 This option is enabled by default.
4507
4508 @item xpg_echo
4509 If set, the @code{echo} builtin expands backslash-escape sequences
4510 by default.
4511
4512 @end table
4513
4514 @noindent
4515 The return status when listing options is zero if all @var{optnames}
4516 are enabled, non-zero otherwise.
4517 When setting or unsetting options, the return status is zero unless an
4518 @var{optname} is not a valid shell option.
4519
4520 @end table
4521
4522 @node Special Builtins
4523 @section Special Builtins
4524 @cindex special builtin
4525
4526 For historical reasons, the @sc{posix} standard has classified
4527 several builtin commands as @emph{special}.
4528 When Bash is executing in @sc{posix} mode, the special builtins
4529 differ from other builtin commands in three respects:
4530
4531 @enumerate
4532 @item
4533 Special builtins are found before shell functions during command lookup.
4534
4535 @item
4536 If a special builtin returns an error status, a non-interactive shell exits.
4537
4538 @item
4539 Assignment statements preceding the command stay in effect in the shell
4540 environment after the command completes.
4541 @end enumerate
4542
4543 When Bash is not executing in @sc{posix} mode, these builtins behave no
4544 differently than the rest of the Bash builtin commands.
4545 The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}. 
4546
4547 These are the @sc{posix} special builtins:
4548 @example
4549 @w{break : . continue eval exec exit export readonly return set}
4550 @w{shift trap unset}
4551 @end example
4552
4553 @node Shell Variables
4554 @chapter Shell Variables
4555
4556 @menu
4557 * Bourne Shell Variables::      Variables which Bash uses in the same way
4558                                 as the Bourne Shell.
4559 * Bash Variables::              List of variables that exist in Bash.
4560 @end menu
4561
4562 This chapter describes the shell variables that Bash uses.
4563 Bash automatically assigns default values to a number of variables.
4564
4565 @node Bourne Shell Variables
4566 @section Bourne Shell Variables
4567
4568 Bash uses certain shell variables in the same way as the Bourne shell.
4569 In some cases, Bash assigns a default value to the variable.
4570
4571 @vtable @code
4572
4573 @item CDPATH
4574 A colon-separated list of directories used as a search path for
4575 the @code{cd} builtin command.
4576
4577 @item HOME
4578 The current user's home directory; the default for the @code{cd} builtin
4579 command.
4580 The value of this variable is also used by tilde expansion
4581 (@pxref{Tilde Expansion}).
4582
4583 @item IFS
4584 A list of characters that separate fields; used when the shell splits
4585 words as part of expansion.
4586
4587 @item MAIL
4588 If this parameter is set to a filename and the @env{MAILPATH} variable
4589 is not set, Bash informs the user of the arrival of mail in
4590 the specified file.
4591
4592 @item MAILPATH
4593 A colon-separated list of filenames which the shell periodically checks
4594 for new mail.
4595 Each list entry can specify the message that is printed when new mail
4596 arrives in the mail file by separating the file name from the message with
4597 a @samp{?}.
4598 When used in the text of the message, @code{$_} expands to the name of
4599 the current mail file.
4600
4601 @item OPTARG
4602 The value of the last option argument processed by the @code{getopts} builtin.
4603
4604 @item OPTIND
4605 The index of the last option argument processed by the @code{getopts} builtin.
4606
4607 @item PATH
4608 A colon-separated list of directories in which the shell looks for
4609 commands.
4610 A zero-length (null) directory name in the value of @code{PATH} indicates the
4611 current directory.
4612 A null directory name may appear as two adjacent colons, or as an initial
4613 or trailing colon.
4614
4615
4616 @item PS1
4617 The primary prompt string.  The default value is @samp{\s-\v\$ }.
4618 @xref{Printing a Prompt}, for the complete list of escape
4619 sequences that are expanded before @env{PS1} is displayed.
4620
4621 @item PS2
4622 The secondary prompt string.  The default value is @samp{> }.
4623
4624 @end vtable
4625
4626 @node Bash Variables
4627 @section Bash Variables
4628
4629 These variables are set or used by Bash, but other shells
4630 do not normally treat them specially.
4631
4632 A few variables used by Bash are described in different chapters:
4633 variables for controlling the job control facilities
4634 (@pxref{Job Control Variables}).
4635
4636 @vtable @code
4637
4638 @item BASH
4639 The full pathname used to execute the current instance of Bash.
4640
4641 @item BASHPID
4642 Expands to the process id of the current Bash process.
4643 This differs from @code{$$} under certain circumstances, such as subshells
4644 that do not require Bash to be re-initialized.
4645
4646 @item BASH_ALIASES
4647 An associative array variable whose members correspond to the internal
4648 list of aliases as maintained by the @code{alias} builtin
4649 (@pxref{Bourne Shell Builtins}).
4650 Elements added to this array appear in the alias list; unsetting array
4651 elements cause aliases to be removed from the alias list.
4652
4653 @item BASH_ARGC
4654 An array variable whose values are the number of parameters in each
4655 frame of the current bash execution call stack.  The number of
4656 parameters to the current subroutine (shell function or script executed
4657 with @code{.} or @code{source}) is at the top of the stack.  When a
4658 subroutine is executed, the number of parameters passed is pushed onto
4659 @code{BASH_ARGC}.
4660 The shell sets @code{BASH_ARGC} only when in extended debugging mode
4661 (see @ref{The Shopt Builtin}
4662 for a description of the @code{extdebug} option to the @code{shopt}
4663 builtin).
4664
4665 @item BASH_ARGV
4666 An array variable containing all of the parameters in the current bash
4667 execution call stack.  The final parameter of the last subroutine call
4668 is at the top of the stack; the first parameter of the initial call is
4669 at the bottom.  When a subroutine is executed, the parameters supplied
4670 are pushed onto @code{BASH_ARGV}.
4671 The shell sets @code{BASH_ARGV} only when in extended debugging mode
4672 (see @ref{The Shopt Builtin}
4673 for a description of the @code{extdebug} option to the @code{shopt}
4674 builtin).
4675
4676 @item BASH_CMDS
4677 An associative array variable whose members correspond to the internal
4678 hash table of commands as maintained by the @code{hash} builtin
4679 (@pxref{Bourne Shell Builtins}).
4680 Elements added to this array appear in the hash table; unsetting array
4681 elements cause commands to be removed from the hash table.
4682
4683 @item BASH_COMMAND
4684 The command currently being executed or about to be executed, unless the
4685 shell is executing a command as the result of a trap,
4686 in which case it is the command executing at the time of the trap.
4687
4688 @item BASH_ENV
4689 If this variable is set when Bash is invoked to execute a shell
4690 script, its value is expanded and used as the name of a startup file
4691 to read before executing the script.  @xref{Bash Startup Files}.
4692
4693 @item BASH_EXECUTION_STRING
4694 The command argument to the @option{-c} invocation option.
4695
4696 @item BASH_LINENO
4697 An array variable whose members are the line numbers in source files
4698 corresponding to each member of @var{FUNCNAME}.
4699 @code{$@{BASH_LINENO[$i]@}} is the line number in the source file where
4700 @code{$@{FUNCNAME[$i]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if
4701 referenced within another shell function).
4702 The corresponding source file name is @code{$@{BASH_SOURCE[$i]@}}.
4703 Use @code{LINENO} to obtain the current line number.
4704
4705 @item BASH_REMATCH
4706 An array variable whose members are assigned by the @samp{=~} binary
4707 operator to the @code{[[} conditional command
4708 (@pxref{Conditional Constructs}).
4709 The element with index 0 is the portion of the string
4710 matching the entire regular expression.
4711 The element with index @var{n} is the portion of the
4712 string matching the @var{n}th parenthesized subexpression.
4713 This variable is read-only.
4714
4715 @item BASH_SOURCE
4716 An array variable whose members are the source filenames corresponding
4717 to the elements in the @code{FUNCNAME} array variable.
4718
4719 @item BASH_SUBSHELL
4720 Incremented by one each time a subshell or subshell environment is spawned.
4721 The initial value is 0.
4722
4723 @item BASH_VERSINFO
4724 A readonly array variable (@pxref{Arrays})
4725 whose members hold version information for this instance of Bash.
4726 The values assigned to the array members are as follows:
4727
4728 @table @code
4729
4730 @item BASH_VERSINFO[0]
4731 The major version number (the @var{release}).
4732
4733 @item BASH_VERSINFO[1]
4734 The minor version number (the @var{version}).
4735
4736 @item BASH_VERSINFO[2]
4737 The patch level.
4738
4739 @item BASH_VERSINFO[3]
4740 The build version.
4741
4742 @item BASH_VERSINFO[4]
4743 The release status (e.g., @var{beta1}).
4744
4745 @item BASH_VERSINFO[5]
4746 The value of @env{MACHTYPE}.
4747
4748 @end table
4749
4750 @item BASH_VERSION
4751 The version number of the current instance of Bash.
4752
4753 @item COLUMNS
4754 Used by the @code{select} builtin command to determine the terminal width
4755 when printing selection lists.  Automatically set upon receipt of a
4756 @code{SIGWINCH}.
4757
4758 @item COMP_CWORD
4759 An index into @env{$@{COMP_WORDS@}} of the word containing the current
4760 cursor position.
4761 This variable is available only in shell functions invoked by the
4762 programmable completion facilities (@pxref{Programmable Completion}).
4763
4764 @item COMP_LINE
4765 The current command line.
4766 This variable is available only in shell functions and external
4767 commands invoked by the
4768 programmable completion facilities (@pxref{Programmable Completion}).
4769
4770 @item COMP_POINT
4771 The index of the current cursor position relative to the beginning of
4772 the current command.
4773 If the current cursor position is at the end of the current command,
4774 the value of this variable is equal to @code{$@{#COMP_LINE@}}.
4775 This variable is available only in shell functions and external
4776 commands invoked by the
4777 programmable completion facilities (@pxref{Programmable Completion}).
4778
4779 @item COMP_TYPE
4780 Set to an integer value corresponding to the type of completion attempted
4781 that caused a completion function to be called:
4782 @var{TAB}, for normal completion,
4783 @samp{?}, for listing completions after successive tabs,
4784 @samp{!}, for listing alternatives on partial word completion,
4785 @samp{@@}, to list completions if the word is not unmodified,
4786 or
4787 @samp{%}, for menu completion.
4788 This variable is available only in shell functions and external
4789 commands invoked by the
4790 programmable completion facilities (@pxref{Programmable Completion}).
4791
4792 @item COMP_KEY
4793 The key (or final key of a key sequence) used to invoke the current
4794 completion function.
4795
4796 @item COMP_WORDBREAKS
4797 The set of characters that the Readline library treats as word
4798 separators when performing word completion.
4799 If @code{COMP_WORDBREAKS} is unset, it loses its special properties,
4800 even if it is subsequently reset.
4801
4802 @item COMP_WORDS
4803 An array variable consisting of the individual
4804 words in the current command line.
4805 The line is split into words as Readline would split it, using
4806 @code{COMP_WORDBREAKS} as described above.
4807 This variable is available only in shell functions invoked by the
4808 programmable completion facilities (@pxref{Programmable Completion}).
4809
4810 @item COMPREPLY
4811 An array variable from which Bash reads the possible completions
4812 generated by a shell function invoked by the programmable completion
4813 facility (@pxref{Programmable Completion}).
4814
4815 @item DIRSTACK
4816 An array variable containing the current contents of the directory stack.
4817 Directories appear in the stack in the order they are displayed by the
4818 @code{dirs} builtin.
4819 Assigning to members of this array variable may be used to modify
4820 directories already in the stack, but the @code{pushd} and @code{popd}
4821 builtins must be used to add and remove directories.
4822 Assignment to this variable will not change the current directory.
4823 If @env{DIRSTACK} is unset, it loses its special properties, even if
4824 it is subsequently reset.
4825
4826 @item EMACS
4827 If Bash finds this variable in the environment when the shell
4828 starts with value @samp{t}, it assumes that the shell is running in an
4829 emacs shell buffer and disables line editing.
4830
4831 @item EUID
4832 The numeric effective user id of the current user.  This variable
4833 is readonly.
4834
4835 @item FCEDIT
4836 The editor used as a default by the @option{-e} option to the @code{fc}
4837 builtin command.
4838
4839 @item FIGNORE
4840 A colon-separated list of suffixes to ignore when performing
4841 filename completion.
4842 A file name whose suffix matches one of the entries in 
4843 @env{FIGNORE}
4844 is excluded from the list of matched file names.  A sample
4845 value is @samp{.o:~}
4846
4847 @item FUNCNAME
4848 An array variable containing the names of all shell functions
4849 currently in the execution call stack.
4850 The element with index 0 is the name of any currently-executing
4851 shell function.
4852 The bottom-most element is @code{"main"}.
4853 This variable exists only when a shell function is executing.
4854 Assignments to @env{FUNCNAME} have no effect and return an error status.
4855 If @env{FUNCNAME} is unset, it loses its special properties, even if
4856 it is subsequently reset.
4857
4858 @item GLOBIGNORE
4859 A colon-separated list of patterns defining the set of filenames to
4860 be ignored by filename expansion.
4861 If a filename matched by a filename expansion pattern also matches one
4862 of the patterns in @env{GLOBIGNORE}, it is removed from the list
4863 of matches.
4864
4865 @item GROUPS
4866 An array variable containing the list of groups of which the current    
4867 user is a member.
4868 Assignments to @env{GROUPS} have no effect and return an error status.
4869 If @env{GROUPS} is unset, it loses its special properties, even if it is
4870 subsequently reset.
4871
4872 @item histchars
4873 Up to three characters which control history expansion, quick
4874 substitution, and tokenization (@pxref{History Interaction}).
4875 The first character is the
4876 @var{history expansion} character, that is, the character which signifies the
4877 start of a history expansion, normally @samp{!}.  The second character is the
4878 character which signifies `quick substitution' when seen as the first
4879 character on a line, normally @samp{^}.  The optional third character is the
4880 character which indicates that the remainder of the line is a comment when
4881 found as the first character of a word, usually @samp{#}.  The history
4882 comment character causes history substitution to be skipped for the
4883 remaining words on the line.  It does not necessarily cause the shell
4884 parser to treat the rest of the line as a comment.
4885
4886 @item HISTCMD
4887 The history number, or index in the history list, of the current
4888 command.  If @env{HISTCMD} is unset, it loses its special properties,
4889 even if it is subsequently reset.
4890
4891 @item HISTCONTROL
4892 A colon-separated list of values controlling how commands are saved on
4893 the history list.
4894 If the list of values includes @samp{ignorespace}, lines which begin
4895 with a space character are not saved in the history list.
4896 A value of @samp{ignoredups} causes lines which match the previous
4897 history entry to not be saved.
4898 A value of @samp{ignoreboth} is shorthand for
4899 @samp{ignorespace} and @samp{ignoredups}.
4900 A value of @samp{erasedups} causes all previous lines matching the
4901 current line to be removed from the history list before that line
4902 is saved.
4903 Any value not in the above list is ignored.
4904 If @env{HISTCONTROL} is unset, or does not include a valid value, 
4905 all lines read by the shell parser are saved on the history list, 
4906 subject to the value of @env{HISTIGNORE}.
4907 The second and subsequent lines of a multi-line compound command are
4908 not tested, and are added to the history regardless of the value of
4909 @env{HISTCONTROL}.
4910
4911 @item HISTFILE
4912 The name of the file to which the command history is saved.  The
4913 default value is @file{~/.bash_history}.
4914
4915 @item HISTFILESIZE
4916 The maximum number of lines contained in the history file.  When this
4917 variable is assigned a value, the history file is truncated, if
4918 necessary, by removing the oldest entries,
4919 to contain no more than that number of lines.
4920 The history file is also truncated to this size after
4921 writing it when an interactive shell exits.
4922 The default value is 500.
4923
4924 @item HISTIGNORE
4925 A colon-separated list of patterns used to decide which command
4926 lines should be saved on the history list.  Each pattern is
4927 anchored at the beginning of the line and must match the complete
4928 line (no implicit @samp{*} is appended).  Each pattern is tested
4929 against the line after the checks specified by @env{HISTCONTROL}
4930 are applied.  In addition to the normal shell pattern matching
4931 characters, @samp{&} matches the previous history line.  @samp{&}
4932 may be escaped using a backslash; the backslash is removed
4933 before attempting a match. 
4934 The second and subsequent lines of a multi-line compound command are
4935 not tested, and are added to the history regardless of the value of
4936 @env{HISTIGNORE}.
4937
4938 @env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}.  A
4939 pattern of @samp{&} is identical to @code{ignoredups}, and a
4940 pattern of @samp{[ ]*} is identical to @code{ignorespace}. 
4941 Combining these two patterns, separating them with a colon,
4942 provides the functionality of @code{ignoreboth}. 
4943
4944 @item HISTSIZE
4945 The maximum number of commands to remember on the history list.
4946 The default value is 500.
4947
4948 @item HISTTIMEFORMAT
4949 If this variable is set and not null, its value is used as a format string
4950 for @var{strftime} to print the time stamp associated with each history
4951 entry displayed by the @code{history} builtin.
4952 If this variable is set, time stamps are written to the history file so
4953 they may be preserved across shell sessions.
4954 This uses the history comment character to distinguish timestamps from
4955 other history lines.
4956
4957 @item HOSTFILE
4958 Contains the name of a file in the same format as @file{/etc/hosts} that
4959 should be read when the shell needs to complete a hostname.
4960 The list of possible hostname completions may be changed while the shell
4961 is running;
4962 the next time hostname completion is attempted after the
4963 value is changed, Bash adds the contents of the new file to the
4964 existing list.
4965 If @env{HOSTFILE} is set, but has no value, Bash attempts to read 
4966 @file{/etc/hosts} to obtain the list of possible hostname completions.
4967 When @env{HOSTFILE} is unset, the hostname list is cleared.
4968
4969 @item HOSTNAME
4970 The name of the current host.
4971
4972 @item HOSTTYPE
4973 A string describing the machine Bash is running on.
4974
4975 @item IGNOREEOF
4976 Controls the action of the shell on receipt of an @code{EOF} character
4977 as the sole input.  If set, the value denotes the number
4978 of consecutive @code{EOF} characters that can be read as the
4979 first character on an input line
4980 before the shell will exit.  If the variable exists but does not
4981 have a numeric value (or has no value) then the default is 10.
4982 If the variable does not exist, then @code{EOF} signifies the end of 
4983 input to the shell.  This is only in effect for interactive shells.
4984
4985 @item INPUTRC
4986 The name of the Readline initialization file, overriding the default
4987 of @file{~/.inputrc}.
4988
4989 @item LANG  
4990 Used to determine the locale category for any category not specifically
4991 selected with a variable starting with @code{LC_}.
4992
4993 @item LC_ALL
4994 This variable overrides the value of @env{LANG} and any other
4995 @code{LC_} variable specifying a locale category.
4996
4997 @item LC_COLLATE
4998 This variable determines the collation order used when sorting the
4999 results of filename expansion, and
5000 determines the behavior of range expressions, equivalence classes,
5001 and collating sequences within filename expansion and pattern matching
5002 (@pxref{Filename Expansion}).
5003
5004 @item LC_CTYPE
5005 This variable determines the interpretation of characters and the
5006 behavior of character classes within filename expansion and pattern
5007 matching (@pxref{Filename Expansion}).
5008
5009 @item LC_MESSAGES
5010 This variable determines the locale used to translate double-quoted
5011 strings preceded by a @samp{$} (@pxref{Locale Translation}).
5012
5013 @item LC_NUMERIC
5014 This variable determines the locale category used for number formatting.
5015
5016 @item LINENO
5017 The line number in the script or shell function currently executing.
5018
5019 @item LINES
5020 Used by the @code{select} builtin command to determine the column length
5021 for printing selection lists.  Automatically set upon receipt of a
5022 @code{SIGWINCH}.
5023
5024 @item MACHTYPE
5025 A string that fully describes the system type on which Bash
5026 is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
5027
5028 @item MAILCHECK
5029 How often (in seconds) that the shell should check for mail in the
5030 files specified in the @env{MAILPATH} or @env{MAIL} variables.
5031 The default is 60 seconds.  When it is time to check
5032 for mail, the shell does so before displaying the primary prompt.
5033 If this variable is unset, or set to a value that is not a number
5034 greater than or equal to zero, the shell disables mail checking.
5035
5036 @item OLDPWD
5037 The previous working directory as set by the @code{cd} builtin.
5038
5039 @item OPTERR
5040 If set to the value 1, Bash displays error messages
5041 generated by the @code{getopts} builtin command.
5042
5043 @item OSTYPE
5044 A string describing the operating system Bash is running on.
5045
5046 @item PIPESTATUS
5047 An array variable (@pxref{Arrays})
5048 containing a list of exit status values from the processes
5049 in the most-recently-executed foreground pipeline (which may
5050 contain only a single command).
5051
5052 @item POSIXLY_CORRECT
5053 If this variable is in the environment when @code{bash} starts, the shell
5054 enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the
5055 startup files, as if the @option{--posix} invocation option had been supplied.
5056 If it is set while the shell is running, @code{bash} enables @sc{posix} mode,
5057 as if the command
5058 @example
5059 @code{set -o posix}
5060 @end example
5061 @noindent
5062 had been executed.  
5063
5064 @item PPID
5065 The process @sc{id} of the shell's parent process.  This variable
5066 is readonly.
5067
5068 @item PROMPT_COMMAND
5069 If set, the value is interpreted as a command to execute
5070 before the printing of each primary prompt (@env{$PS1}).
5071
5072 @item PROMPT_DIRTRIM
5073 If set to a number greater than zero, the value is used as the number of
5074 trailing directory components to retain when expanding the @code{\w} and
5075 @code{\W} prompt string escapes (@pxref{Printing a Prompt}).
5076 Characters removed are replaced with an ellipsis.
5077
5078 @item PS3
5079 The value of this variable is used as the prompt for the
5080 @code{select} command.  If this variable is not set, the
5081 @code{select} command prompts with @samp{#? }
5082
5083 @item PS4
5084 The value is the prompt printed before the command line is echoed
5085 when the @option{-x} option is set (@pxref{The Set Builtin}).
5086 The first character of @env{PS4} is replicated multiple times, as
5087 necessary, to indicate multiple levels of indirection.
5088 The default is @samp{+ }.
5089
5090 @item PWD
5091 The current working directory as set by the @code{cd} builtin.
5092
5093 @item RANDOM
5094 Each time this parameter is referenced, a random integer
5095 between 0 and 32767 is generated.  Assigning a value to this
5096 variable seeds the random number generator.
5097
5098 @item REPLY
5099 The default variable for the @code{read} builtin.
5100
5101 @item SECONDS
5102 This variable expands to the number of seconds since the
5103 shell was started.  Assignment to this variable resets
5104 the count to the value assigned, and the expanded value
5105 becomes the value assigned plus the number of seconds
5106 since the assignment.
5107
5108 @item SHELL
5109 The full pathname to the shell is kept in this environment variable.
5110 If it is not set when the shell starts,
5111 Bash assigns to it the full pathname of the current user's login shell.
5112
5113 @item SHELLOPTS
5114 A colon-separated list of enabled shell options.  Each word in
5115 the list is a valid argument for the @option{-o} option to the
5116 @code{set} builtin command (@pxref{The Set Builtin}).
5117 The options appearing in @env{SHELLOPTS} are those reported
5118 as @samp{on} by @samp{set -o}.
5119 If this variable is in the environment when Bash
5120 starts up, each shell option in the list will be enabled before
5121 reading any startup files.  This variable is readonly.
5122
5123 @item SHLVL
5124 Incremented by one each time a new instance of Bash is started.  This is
5125 intended to be a count of how deeply your Bash shells are nested.
5126
5127 @item TIMEFORMAT
5128 The value of this parameter is used as a format string specifying
5129 how the timing information for pipelines prefixed with the @code{time}
5130 reserved word should be displayed.
5131 The @samp{%} character introduces an
5132 escape sequence that is expanded to a time value or other
5133 information.
5134 The escape sequences and their meanings are as
5135 follows; the braces denote optional portions. 
5136
5137 @table @code
5138
5139 @item %%
5140 A literal @samp{%}.
5141
5142 @item %[@var{p}][l]R
5143 The elapsed time in seconds. 
5144
5145 @item %[@var{p}][l]U
5146 The number of CPU seconds spent in user mode. 
5147
5148 @item %[@var{p}][l]S
5149 The number of CPU seconds spent in system mode. 
5150
5151 @item %P
5152 The CPU percentage, computed as (%U + %S) / %R. 
5153 @end table
5154
5155 The optional @var{p} is a digit specifying the precision, the number of
5156 fractional digits after a decimal point.
5157 A value of 0 causes no decimal point or fraction to be output.
5158 At most three places after the decimal point may be specified; values
5159 of @var{p} greater than 3 are changed to 3.
5160 If @var{p} is not specified, the value 3 is used. 
5161
5162 The optional @code{l} specifies a longer format, including minutes, of
5163 the form @var{MM}m@var{SS}.@var{FF}s.
5164 The value of @var{p} determines whether or not the fraction is included. 
5165
5166 If this variable is not set, Bash acts as if it had the value
5167 @example
5168 @code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'}
5169 @end example
5170 If the value is null, no timing information is displayed.
5171 A trailing newline is added when the format string is displayed.
5172
5173 @item TMOUT
5174 If set to a value greater than zero, @code{TMOUT} is treated as the
5175 default timeout for the @code{read} builtin (@pxref{Bash Builtins}).
5176 The @code{select} command (@pxref{Conditional Constructs}) terminates
5177 if input does not arrive after @code{TMOUT} seconds when input is coming
5178 from a terminal.
5179
5180 In an interactive shell, the value is interpreted as
5181 the number of seconds to wait for input after issuing the primary
5182 prompt when the shell is interactive.
5183 Bash terminates after that number of seconds if input does
5184 not arrive.
5185
5186 @item TMPDIR
5187 If set, Bash uses its value as the name of a directory in which
5188 Bash creates temporary files for the shell's use.
5189
5190 @item UID
5191 The numeric real user id of the current user.  This variable is readonly.
5192
5193 @end vtable
5194
5195 @node Bash Features
5196 @chapter Bash Features
5197
5198 This section describes features unique to Bash.
5199
5200 @menu
5201 * Invoking Bash::               Command line options that you can give
5202                                 to Bash.
5203 * Bash Startup Files::          When and how Bash executes scripts.
5204 * Interactive Shells::          What an interactive shell is.
5205 * Bash Conditional Expressions::        Primitives used in composing expressions for
5206                                 the @code{test} builtin.
5207 * Shell Arithmetic::            Arithmetic on shell variables.
5208 * Aliases::                     Substituting one command for another.
5209 * Arrays::                      Array Variables.
5210 * The Directory Stack::         History of visited directories.
5211 * Printing a Prompt::           Controlling the PS1 string.
5212 * The Restricted Shell::        A more controlled mode of shell execution.
5213 * Bash POSIX Mode::             Making Bash behave more closely to what
5214                                 the POSIX standard specifies.
5215 @end menu
5216
5217 @node Invoking Bash
5218 @section Invoking Bash
5219
5220 @example
5221 bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
5222 bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}]
5223 bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
5224 @end example
5225
5226 In addition to the single-character shell command-line options
5227 (@pxref{The Set Builtin}), there are several multi-character
5228 options that you can use.  These options must appear on the command
5229 line before the single-character options to be recognized. 
5230
5231 @table @code
5232 @item --debugger
5233 Arrange for the debugger profile to be executed before the shell
5234 starts.  Turns on extended debugging mode (see @ref{The Shopt Builtin}
5235 for a description of the @code{extdebug} option to the @code{shopt}
5236 builtin) and shell function tracing
5237 (see @ref{The Set Builtin} for a description of the @code{-o functrace}
5238 option).
5239
5240 @item --dump-po-strings
5241 A list of all double-quoted strings preceded by @samp{$}
5242 is printed on the standard output
5243 in the @sc{gnu} @code{gettext} PO (portable object) file format.
5244 Equivalent to @option{-D} except for the output format.
5245
5246 @item --dump-strings
5247 Equivalent to @option{-D}.
5248
5249 @item --help
5250 Display a usage message on standard output and exit successfully.
5251
5252 @item --init-file @var{filename}
5253 @itemx --rcfile @var{filename}
5254 Execute commands from @var{filename} (instead of @file{~/.bashrc})
5255 in an interactive shell.
5256
5257 @item --login
5258 Equivalent to @option{-l}.
5259
5260 @item --noediting
5261 Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing})
5262 to read  command lines when the shell is interactive.
5263
5264 @item --noprofile
5265 Don't load the system-wide startup file @file{/etc/profile}
5266 or any of the personal initialization files
5267 @file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile}
5268 when Bash is invoked as a login shell.
5269
5270 @item --norc
5271 Don't read the @file{~/.bashrc} initialization file in an
5272 interactive shell.  This is on by default if the shell is
5273 invoked as @code{sh}.
5274
5275 @item --posix
5276 Change the behavior of Bash where the default operation differs
5277 from the @sc{posix} standard to match the standard.  This
5278 is intended to make Bash behave as a strict superset of that
5279 standard.  @xref{Bash POSIX Mode}, for a description of the Bash
5280 @sc{posix} mode.
5281
5282 @item --restricted
5283 Make the shell a restricted shell (@pxref{The Restricted Shell}).
5284
5285 @item --verbose
5286 Equivalent to @option{-v}.  Print shell input lines as they're read.
5287
5288 @item --version
5289 Show version information for this instance of
5290 Bash on the standard output and exit successfully.
5291
5292 @end table
5293
5294 There are several single-character options that may be supplied at
5295 invocation which are not available with the @code{set} builtin.
5296
5297 @table @code
5298 @item -c @var{string}
5299 Read and execute commands from @var{string} after processing the
5300 options, then exit.  Any remaining arguments are assigned to the
5301 positional parameters, starting with @code{$0}.
5302
5303 @item -i
5304 Force the shell to run interactively.  Interactive shells are
5305 described in @ref{Interactive Shells}.
5306
5307 @item -l
5308 Make this shell act as if it had been directly invoked by login.
5309 When the shell is interactive, this is equivalent to starting a
5310 login shell with @samp{exec -l bash}.
5311 When the shell is not interactive, the login shell startup files will
5312 be executed.
5313 @samp{exec bash -l} or @samp{exec bash --login}
5314 will replace the current shell with a Bash login shell.
5315 @xref{Bash Startup Files}, for a description of the special behavior
5316 of a login shell.
5317
5318 @item -r
5319 Make the shell a restricted shell (@pxref{The Restricted Shell}).
5320
5321 @item -s
5322 If this option is present, or if no arguments remain after option
5323 processing, then commands are read from the standard input.
5324 This option allows the positional parameters to be set
5325 when invoking an interactive shell.
5326
5327 @item -D
5328 A list of all double-quoted strings preceded by @samp{$}
5329 is printed on the standard output.
5330 These are the strings that
5331 are subject to language translation when the current locale
5332 is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
5333 This implies the @option{-n} option; no commands will be executed.
5334
5335 @item [-+]O [@var{shopt_option}]
5336 @var{shopt_option} is one of the shell options accepted by the
5337 @code{shopt} builtin (@pxref{The Shopt Builtin}).
5338 If @var{shopt_option} is present, @option{-O} sets the value of that option;
5339 @option{+O} unsets it.  
5340 If @var{shopt_option} is not supplied, the names and values of the shell
5341 options accepted by @code{shopt} are printed on the standard output.
5342 If the invocation option is @option{+O}, the output is displayed in a format
5343 that may be reused as input.
5344
5345 @item --
5346 A @code{--} signals the end of options and disables further option
5347 processing.
5348 Any arguments after the @code{--} are treated as filenames and arguments.
5349
5350 @end table
5351
5352 @cindex login shell
5353 A @emph{login} shell is one whose first character of argument zero is
5354 @samp{-}, or one invoked with the @option{--login} option.
5355
5356 @cindex interactive shell
5357 An @emph{interactive} shell is one started without non-option arguments,
5358 unless @option{-s} is specified,
5359 without specifying the @option{-c} option, and whose input and output are both
5360 connected to terminals (as determined by @code{isatty(3)}), or one
5361 started with the @option{-i} option.  @xref{Interactive Shells}, for more
5362 information.
5363
5364 If arguments remain after option processing, and neither the
5365 @option{-c} nor the @option{-s}
5366 option has been supplied, the first argument is assumed to
5367 be the name of a file containing shell commands (@pxref{Shell Scripts}).
5368 When Bash is invoked in this fashion, @code{$0}
5369 is set to the name of the file, and the positional parameters
5370 are set to the remaining arguments.
5371 Bash reads and executes commands from this file, then exits.   
5372 Bash's exit status is the exit status of the last command executed
5373 in the script.  If no commands are executed, the exit status is 0.
5374
5375 @node Bash Startup Files
5376 @section Bash Startup Files
5377 @cindex startup files
5378
5379 This section describes how Bash executes its startup files.
5380 If any of the files exist but cannot be read, Bash reports an error.
5381 Tildes are expanded in file names as described above under
5382 Tilde Expansion (@pxref{Tilde Expansion}).
5383
5384 Interactive shells are described in @ref{Interactive Shells}.
5385
5386 @subsubheading Invoked as an interactive login shell, or with @option{--login}
5387
5388 When Bash is invoked as an interactive login shell, or as a
5389 non-interactive shell with the @option{--login} option, it first reads and
5390 executes commands from the file @file{/etc/profile}, if that file exists.
5391 After reading that file, it looks for @file{~/.bash_profile},
5392 @file{~/.bash_login}, and @file{~/.profile}, in that order, and reads
5393 and executes commands from the first one that exists and is readable.
5394 The @option{--noprofile} option may be used when the shell is started to
5395 inhibit this behavior.
5396
5397 When a login shell exits, Bash reads and executes commands from
5398 the file @file{~/.bash_logout}, if it exists.
5399
5400 @subsubheading Invoked as an interactive non-login shell
5401
5402 When an interactive shell that is not a login shell is started, Bash
5403 reads and executes commands from @file{~/.bashrc}, if that file exists.
5404 This may be inhibited by using the @option{--norc} option.
5405 The @option{--rcfile @var{file}} option will force Bash to read and
5406 execute commands from @var{file} instead of @file{~/.bashrc}.
5407
5408 So, typically, your @file{~/.bash_profile} contains the line
5409 @example
5410 @code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi}
5411 @end example
5412 @noindent
5413 after (or before) any login-specific initializations.
5414
5415 @subsubheading Invoked non-interactively
5416
5417 When Bash is started non-interactively, to run a shell script,
5418 for example, it looks for the variable @env{BASH_ENV} in the environment,
5419 expands its value if it appears there, and uses the expanded value as
5420 the name of a file to read and execute.  Bash behaves as if the
5421 following command were executed:
5422 @example
5423 @code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi}
5424 @end example
5425 @noindent
5426 but the value of the @env{PATH} variable is not used to search for the
5427 file name.
5428
5429 As noted above, if a non-interactive shell is invoked with the
5430 @option{--login} option, Bash attempts to read and execute commands from the
5431 login shell startup files. 
5432
5433 @subsubheading Invoked with name @code{sh}
5434
5435 If Bash is invoked with the name @code{sh}, it tries to mimic the
5436 startup behavior of historical versions of @code{sh} as closely as
5437 possible, while conforming to the @sc{posix} standard as well.
5438
5439 When invoked as an interactive login shell, or as a non-interactive
5440 shell with the @option{--login} option, it first attempts to read
5441 and execute commands from @file{/etc/profile} and @file{~/.profile}, in
5442 that order.
5443 The @option{--noprofile} option may be used to inhibit this behavior.
5444 When invoked as an interactive shell with the name @code{sh}, Bash
5445 looks for the variable @env{ENV}, expands its value if it is defined,
5446 and uses the expanded value as the name of a file to read and execute.
5447 Since a shell invoked as @code{sh} does not attempt to read and execute
5448 commands from any other startup files, the @option{--rcfile} option has
5449 no effect.
5450 A non-interactive shell invoked with the name @code{sh} does not attempt
5451 to read any other startup files.
5452
5453 When invoked as @code{sh}, Bash enters @sc{posix} mode after
5454 the startup files are read.
5455
5456 @subsubheading Invoked in @sc{posix} mode
5457
5458 When Bash is started in @sc{posix} mode, as with the
5459 @option{--posix} command line option, it follows the @sc{posix} standard
5460 for startup files.
5461 In this mode, interactive shells expand the @env{ENV} variable
5462 and commands are read and executed from the file whose name is the
5463 expanded value.
5464 No other startup files are read.
5465
5466 @subsubheading Invoked by remote shell daemon
5467
5468 Bash attempts to determine when it is being run with its standard input
5469 connected to a a network connection, as if by the remote shell
5470 daemon, usually @code{rshd}, or the secure shell daemon @code{sshd}.
5471 If Bash determines it is being run in
5472 this fashion, it reads and executes commands from @file{~/.bashrc}, if that
5473 file exists and is readable.
5474 It will not do this if invoked as @code{sh}.
5475 The @option{--norc} option may be used to inhibit this behavior, and the
5476 @option{--rcfile} option may be used to force another file to be read, but
5477 @code{rshd} does not generally invoke the shell with those options or
5478 allow them to be specified.
5479
5480 @subsubheading Invoked with unequal effective and real @sc{uid/gid}s
5481
5482 If Bash is started with the effective user (group) id not equal to the
5483 real user (group) id, and the @code{-p} option is not supplied, no startup
5484 files are read, shell functions are not inherited from the environment,
5485 the @env{SHELLOPTS} variable, if it appears in the environment, is ignored,
5486 and the effective user id is set to the real user id.
5487 If the @code{-p} option is supplied at invocation, the startup behavior is
5488 the same, but the effective user id is not reset.
5489
5490 @node Interactive Shells
5491 @section Interactive Shells
5492 @cindex interactive shell
5493 @cindex shell, interactive
5494
5495 @menu
5496 * What is an Interactive Shell?::       What determines whether a shell is Interactive.
5497 * Is this Shell Interactive?::  How to tell if a shell is interactive.
5498 * Interactive Shell Behavior::  What changes in a interactive shell?
5499 @end menu
5500
5501 @node What is an Interactive Shell?
5502 @subsection What is an Interactive Shell?
5503
5504 An interactive shell
5505 is one started without non-option arguments, unless @option{-s} is
5506 specified, without specifying the @option{-c} option, and
5507 whose input and error output are both
5508 connected to terminals (as determined by @code{isatty(3)}),
5509 or one started with the @option{-i} option.
5510
5511 An interactive shell generally reads from and writes to a user's
5512 terminal.
5513
5514 The @option{-s} invocation option may be used to set the positional parameters
5515 when an interactive shell is started.
5516
5517 @node Is this Shell Interactive?
5518 @subsection Is this Shell Interactive?
5519
5520 To determine within a startup script whether or not Bash is
5521 running interactively,
5522 test the value of the @samp{-} special parameter.
5523 It contains @code{i} when the shell is interactive.  For example:
5524
5525 @example
5526 case "$-" in
5527 *i*)    echo This shell is interactive ;;
5528 *)      echo This shell is not interactive ;;
5529 esac
5530 @end example
5531
5532 Alternatively, startup scripts may examine the variable
5533 @env{PS1}; it is unset in non-interactive shells, and set in
5534 interactive shells.  Thus:
5535
5536 @example
5537 if [ -z "$PS1" ]; then
5538         echo This shell is not interactive
5539 else
5540         echo This shell is interactive
5541 fi
5542 @end example
5543
5544 @node Interactive Shell Behavior
5545 @subsection Interactive Shell Behavior
5546
5547 When the shell is running interactively, it changes its behavior in
5548 several ways.
5549
5550 @enumerate
5551 @item
5552 Startup files are read and executed as described in @ref{Bash Startup Files}.
5553
5554 @item
5555 Job Control (@pxref{Job Control}) is enabled by default.  When job
5556 control is in effect, Bash ignores the keyboard-generated job control
5557 signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
5558
5559 @item
5560 Bash expands and displays @env{PS1} before reading the first line
5561 of a command, and expands and displays @env{PS2} before reading the
5562 second and subsequent lines of a multi-line command.
5563
5564 @item
5565 Bash executes the value of the @env{PROMPT_COMMAND} variable as a command
5566 before printing the primary prompt, @env{$PS1}
5567 (@pxref{Bash Variables}).
5568
5569 @item
5570 Readline (@pxref{Command Line Editing}) is used to read commands from
5571 the user's terminal.
5572
5573 @item
5574 Bash inspects the value of the @code{ignoreeof} option to @code{set -o}
5575 instead of exiting immediately when it receives an @code{EOF} on its
5576 standard input when reading a command (@pxref{The Set Builtin}).
5577
5578 @item
5579 Command history (@pxref{Bash History Facilities})
5580 and history expansion (@pxref{History Interaction})
5581 are enabled by default.
5582 Bash will save the command history to the file named by @env{$HISTFILE}
5583 when an interactive shell exits.
5584
5585 @item
5586 Alias expansion (@pxref{Aliases}) is performed by default.
5587
5588 @item
5589 In the absence of any traps, Bash ignores @code{SIGTERM}
5590 (@pxref{Signals}).
5591
5592 @item
5593 In the absence of any traps, @code{SIGINT} is caught and handled
5594 ((@pxref{Signals}).
5595 @code{SIGINT} will interrupt some shell builtins.
5596
5597 @item
5598 An interactive login shell sends a @code{SIGHUP} to all jobs on exit
5599 if the @code{huponexit} shell option has been enabled (@pxref{Signals}).
5600
5601 @item
5602 The @option{-n} invocation option is ignored, and @samp{set -n} has
5603 no effect (@pxref{The Set Builtin}).
5604
5605 @item
5606 Bash will check for mail periodically, depending on the values of the
5607 @env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables
5608 (@pxref{Bash Variables}).
5609
5610 @item
5611 Expansion errors due to references to unbound shell variables after
5612 @samp{set -u} has been enabled will not cause the shell to exit
5613 (@pxref{The Set Builtin}).
5614
5615 @item
5616 The shell will not exit on expansion errors caused by @var{var} being unset
5617 or null in @code{$@{@var{var}:?@var{word}@}} expansions
5618 (@pxref{Shell Parameter Expansion}).
5619
5620 @item
5621 Redirection errors encountered by shell builtins will not cause the
5622 shell to exit.
5623
5624 @item
5625 When running in @sc{posix} mode, a special builtin returning an error
5626 status will not cause the shell to exit (@pxref{Bash POSIX Mode}).
5627
5628 @item
5629 A failed @code{exec} will not cause the shell to exit
5630 (@pxref{Bourne Shell Builtins}).
5631
5632 @item
5633 Parser syntax errors will not cause the shell to exit.
5634
5635 @item
5636 Simple spelling correction for directory arguments to the @code{cd}
5637 builtin is enabled by default (see the description of the @code{cdspell}
5638 option to the @code{shopt} builtin in @ref{The Shopt Builtin}).
5639
5640 @item
5641 The shell will check the value of the @env{TMOUT} variable and exit
5642 if a command is not read within the specified number of seconds after
5643 printing @env{$PS1} (@pxref{Bash Variables}).
5644
5645 @end enumerate
5646
5647 @node Bash Conditional Expressions
5648 @section Bash Conditional Expressions
5649 @cindex expressions, conditional
5650
5651 Conditional expressions are used by the @code{[[} compound command
5652 and the @code{test} and @code{[} builtin commands.
5653
5654 Expressions may be unary or binary.
5655 Unary expressions are often used to examine the status of a file.
5656 There are string operators and numeric comparison operators as well.
5657 If the @var{file} argument to one of the primaries is of the form
5658 @file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked.
5659 If the @var{file} argument to one of the primaries is one of
5660 @file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file
5661 descriptor 0, 1, or 2, respectively, is checked.
5662
5663 Unless otherwise specified, primaries that operate on files follow symbolic
5664 links and operate on the target of the link, rather than the link itself.
5665
5666 @table @code
5667 @item -a @var{file}
5668 True if @var{file} exists.
5669
5670 @item -b @var{file}
5671 True if @var{file} exists and is a block special file.
5672
5673 @item -c @var{file}
5674 True if @var{file} exists and is a character special file.
5675
5676 @item -d @var{file}
5677 True if @var{file} exists and is a directory.
5678
5679 @item -e @var{file}
5680 True if @var{file} exists.
5681
5682 @item -f @var{file}
5683 True if @var{file} exists and is a regular file.
5684
5685 @item -g @var{file}
5686 True if @var{file} exists and its set-group-id bit is set.
5687
5688 @item -h @var{file}
5689 True if @var{file} exists and is a symbolic link.
5690
5691 @item -k @var{file}
5692 True if @var{file} exists and its "sticky" bit is set.
5693
5694 @item -p @var{file}
5695 True if @var{file} exists and is a named pipe (FIFO).
5696
5697 @item -r @var{file}
5698 True if @var{file} exists and is readable.
5699
5700 @item -s @var{file}
5701 True if @var{file} exists and has a size greater than zero.
5702
5703 @item -t @var{fd}
5704 True if file descriptor @var{fd} is open and refers to a terminal.
5705
5706 @item -u @var{file}
5707 True if @var{file} exists and its set-user-id bit is set.
5708
5709 @item -w @var{file}
5710 True if @var{file} exists and is writable.
5711
5712 @item -x @var{file}
5713 True if @var{file} exists and is executable.
5714
5715 @item -O @var{file}
5716 True if @var{file} exists and is owned by the effective user id.
5717
5718 @item -G @var{file}
5719 True if @var{file} exists and is owned by the effective group id.
5720
5721 @item -L @var{file}
5722 True if @var{file} exists and is a symbolic link.
5723
5724 @item -S @var{file}
5725 True if @var{file} exists and is a socket.
5726
5727 @item -N @var{file}
5728 True if @var{file} exists and has been modified since it was last read.
5729
5730 @item @var{file1} -nt @var{file2}
5731 True if @var{file1} is newer (according to modification date)
5732 than @var{file2}, or if @var{file1} exists and @var{file2} does not.
5733
5734 @item @var{file1} -ot @var{file2}
5735 True if @var{file1} is older than @var{file2},
5736 or if @var{file2} exists and @var{file1} does not.
5737
5738 @item @var{file1} -ef @var{file2}
5739 True if @var{file1} and @var{file2} refer to the same device and
5740 inode numbers.
5741
5742 @item -o @var{optname}
5743 True if shell option @var{optname} is enabled.
5744 The list of options appears in the description of the @option{-o}
5745 option to the @code{set} builtin (@pxref{The Set Builtin}).
5746
5747 @item -z @var{string}
5748 True if the length of @var{string} is zero.
5749
5750 @item -n @var{string}
5751 @itemx @var{string}
5752 True if the length of @var{string} is non-zero.
5753
5754 @item @var{string1} == @var{string2}
5755 True if the strings are equal.
5756 @samp{=} may be used in place of @samp{==} for strict @sc{posix} compliance.
5757
5758 @item @var{string1} != @var{string2}
5759 True if the strings are not equal.
5760
5761 @item @var{string1} < @var{string2}
5762 True if @var{string1} sorts before @var{string2} lexicographically
5763 in the current locale.
5764
5765 @item @var{string1} > @var{string2}
5766 True if @var{string1} sorts after @var{string2} lexicographically
5767 in the current locale.
5768
5769 @item @var{arg1} OP @var{arg2}
5770 @code{OP} is one of 
5771 @samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}.
5772 These arithmetic binary operators return true if @var{arg1}
5773 is equal to, not equal to, less than, less than or equal to,
5774 greater than, or greater than or equal to @var{arg2},
5775 respectively.  @var{Arg1} and @var{arg2}
5776 may be positive or negative integers.
5777
5778 @end table
5779
5780 @node Shell Arithmetic
5781 @section Shell Arithmetic
5782 @cindex arithmetic, shell
5783 @cindex shell arithmetic
5784 @cindex expressions, arithmetic
5785 @cindex evaluation, arithmetic
5786 @cindex arithmetic evaluation
5787
5788 The shell allows arithmetic expressions to be evaluated, as one of
5789 the shell expansions or by the @code{let} and the @option{-i} option
5790 to the @code{declare} builtins.
5791
5792 Evaluation is done in fixed-width integers with no check for overflow,
5793 though division by 0 is trapped and flagged as an error.
5794 The operators and their precedence, associativity, and values
5795 are the same as in the C language.
5796 The following list of operators is grouped into levels of
5797 equal-precedence operators.
5798 The levels are listed in order of decreasing precedence. 
5799
5800 @table @code
5801
5802 @item @var{id}++ @var{id}--
5803 variable post-increment and post-decrement 
5804
5805 @item ++@var{id} --@var{id}
5806 variable pre-increment and pre-decrement
5807
5808 @item - +
5809 unary minus and plus
5810
5811 @item ! ~
5812 logical and bitwise negation
5813
5814 @item **
5815 exponentiation
5816
5817 @item * / %
5818 multiplication, division, remainder
5819
5820 @item + -
5821 addition, subtraction
5822
5823 @item << >>
5824 left and right bitwise shifts
5825
5826 @item <= >= < >
5827 comparison
5828
5829 @item == !=
5830 equality and inequality
5831
5832 @item &
5833 bitwise AND
5834
5835 @item ^
5836 bitwise exclusive OR
5837
5838 @item |
5839 bitwise OR
5840
5841 @item &&
5842 logical AND
5843
5844 @item ||
5845 logical OR
5846
5847 @item expr ? expr : expr
5848 conditional operator
5849
5850 @item = *= /= %= += -= <<= >>= &= ^= |=
5851 assignment
5852
5853 @item expr1 , expr2
5854 comma
5855 @end table
5856
5857 Shell variables are allowed as operands; parameter expansion is
5858 performed before the expression is evaluated. 
5859 Within an expression, shell variables may also be referenced by name
5860 without using the parameter expansion syntax.
5861 A shell variable that is null or unset evaluates to 0 when referenced
5862 by name without using the parameter expansion syntax.
5863 The value of a variable is evaluated as an arithmetic expression
5864 when it is referenced, or when a variable which has been given the  
5865 @var{integer} attribute using @samp{declare -i} is assigned a value.
5866 A null value evaluates to 0.
5867 A shell variable need not have its integer attribute turned on
5868 to be used in an expression.
5869
5870 Constants with a leading 0 are interpreted as octal numbers.
5871 A leading @samp{0x} or @samp{0X} denotes hexadecimal.  Otherwise,
5872 numbers take the form [@var{base}@code{#}]@var{n}, where @var{base}
5873 is a decimal number between 2 and 64 representing the arithmetic
5874 base, and @var{n} is a number in that base.  If @var{base}@code{#} is
5875 omitted, then base 10 is used.
5876 The digits greater than 9 are represented by the lowercase letters,
5877 the uppercase letters, @samp{@@}, and @samp{_}, in that order.
5878 If @var{base} is less than or equal to 36, lowercase and uppercase
5879 letters may be used interchangeably to represent numbers between 10
5880 and 35.
5881
5882 Operators are evaluated in order of precedence.  Sub-expressions in
5883 parentheses are evaluated first and may override the precedence
5884 rules above.
5885
5886 @node Aliases
5887 @section Aliases
5888 @cindex alias expansion
5889
5890 @var{Aliases} allow a string to be substituted for a word when it is used
5891 as the first word of a simple command.
5892 The shell maintains a list of aliases that may be set and unset with
5893 the @code{alias} and @code{unalias} builtin commands.
5894
5895 The first word of each simple command, if unquoted, is checked to see
5896 if it has an alias.
5897 If so, that word is replaced by the text of the alias.
5898 The characters @samp{/}, @samp{$}, @samp{`}, @samp{=} and any of the
5899 shell metacharacters or quoting characters listed above may not appear
5900 in an alias name.
5901 The replacement text may contain any valid
5902 shell input, including shell metacharacters.
5903 The first word of the replacement text is tested for
5904 aliases, but a word that is identical to an alias being expanded
5905 is not expanded a second time.
5906 This means that one may alias @code{ls} to @code{"ls -F"},
5907 for instance, and Bash does not try to recursively expand the
5908 replacement text. If the last character of the alias value is a
5909 space or tab character, then the next command word following the
5910 alias is also checked for alias expansion.
5911
5912 Aliases are created and listed with the @code{alias}
5913 command, and removed with the @code{unalias} command.
5914
5915 There is no mechanism for using arguments in the replacement text,
5916 as in @code{csh}.
5917 If arguments are needed, a shell function should be used
5918 (@pxref{Shell Functions}).
5919
5920 Aliases are not expanded when the shell is not interactive,
5921 unless the @code{expand_aliases} shell option is set using
5922 @code{shopt} (@pxref{The Shopt Builtin}).
5923
5924 The rules concerning the definition and use of aliases are
5925 somewhat confusing.  Bash
5926 always reads at least one complete line
5927 of input before executing any
5928 of the commands on that line.  Aliases are expanded when a
5929 command is read, not when it is executed.  Therefore, an
5930 alias definition appearing on the same line as another
5931 command does not take effect until the next line of input is read.
5932 The commands following the alias definition
5933 on that line are not affected by the new alias.
5934 This behavior is also an issue when functions are executed.
5935 Aliases are expanded when a function definition is read,
5936 not when the function is executed, because a function definition
5937 is itself a compound command.  As a consequence, aliases
5938 defined in a function are not available until after that
5939 function is executed.  To be safe, always put
5940 alias definitions on a separate line, and do not use @code{alias}
5941 in compound commands.
5942
5943 For almost every purpose, shell functions are preferred over aliases.
5944
5945 @node Arrays
5946 @section Arrays
5947 @cindex arrays
5948
5949 Bash provides one-dimensional indexed and associative array variables.
5950 Any variable may be used as an indexed array;
5951 the @code{declare} builtin will explicitly declare an array.
5952 There is no maximum
5953 limit on the size of an array, nor any requirement that members
5954 be indexed or assigned contiguously.
5955 Indexed arrays are referenced using integers (including arithmetic
5956 expressions (@pxref{Shell Arithmetic}) and are zero-based;
5957 associative arrays use arbitrary strings.
5958
5959 An indexed array is created automatically if any variable is assigned to
5960 using the syntax
5961 @example
5962 name[@var{subscript}]=@var{value}
5963 @end example
5964
5965 @noindent
5966 The @var{subscript}
5967 is treated as an arithmetic expression that must evaluate to a number
5968 greater than or equal to zero.  To explicitly declare an array, use
5969 @example
5970 declare -a @var{name}
5971 @end example
5972 @noindent
5973 The syntax
5974 @example
5975 declare -a @var{name}[@var{subscript}]
5976 @end example
5977 @noindent
5978 is also accepted; the @var{subscript} is ignored.
5979
5980 Associative arrays are created using
5981 @example
5982 declare -A @var{name}.
5983 @end example
5984
5985 Attributes may be
5986 specified for an array variable using the @code{declare} and
5987 @code{readonly} builtins.  Each attribute applies to all members of
5988 an array.
5989
5990 Arrays are assigned to using compound assignments of the form
5991 @example
5992 name=(value@var{1} @dots{} value@var{n})
5993 @end example
5994 @noindent
5995 where each
5996 @var{value} is of the form @code{[@var{subscript}]=}@var{string}.
5997 Indexed array assignments do not require the bracket and subscript.
5998 When assigning to indexed arrays, if
5999 the optional subscript is supplied, that index is assigned to;
6000 otherwise the index of the element assigned is the last index assigned
6001 to by the statement plus one.  Indexing starts at zero.
6002
6003 When assigning to an associative array, the subscript is required.
6004
6005 This syntax is also accepted by the @code{declare}
6006 builtin.  Individual array elements may be assigned to using the
6007 @code{name[}@var{subscript}@code{]=}@var{value} syntax introduced above.
6008
6009 Any element of an array may be referenced using
6010 @code{$@{name[}@var{subscript}@code{]@}}.
6011 The braces are required to avoid
6012 conflicts with the shell's filename expansion operators.  If the
6013 @var{subscript} is @samp{@@} or @samp{*}, the word expands to all members
6014 of the array @var{name}.  These subscripts differ only when the word
6015 appears within double quotes.
6016 If the word is double-quoted,
6017 @code{$@{name[*]@}} expands to a single word with
6018 the value of each array member separated by the first character of the
6019 @env{IFS} variable, and @code{$@{name[@@]@}} expands each element of
6020 @var{name} to a separate word.  When there are no array members,
6021 @code{$@{name[@@]@}} expands to nothing.
6022 If the double-quoted expansion occurs within a word, the expansion of
6023 the first parameter is joined with the beginning part of the original
6024 word, and the expansion of the last parameter is joined with the last
6025 part of the original word.
6026 This is analogous to the
6027 expansion of the special parameters @samp{@@} and @samp{*}. 
6028 @code{$@{#name[}@var{subscript}@code{]@}} expands to the length of
6029 @code{$@{name[}@var{subscript}@code{]@}}.
6030 If @var{subscript} is @samp{@@} or
6031 @samp{*}, the expansion is the number of elements in the array. 
6032 Referencing an array variable without a subscript is equivalent to
6033 referencing with a subscript of 0. 
6034
6035 The @code{unset} builtin is used to destroy arrays.
6036 @code{unset} @var{name}[@var{subscript}]
6037 destroys the array element at index @var{subscript}.
6038 Care must be taken to avoid unwanted side effects caused by filename
6039 generation.
6040 @code{unset} @var{name}, where @var{name} is an array, removes the
6041 entire array. A subscript of @samp{*} or @samp{@@} also removes the
6042 entire array.
6043
6044 The @code{declare}, @code{local}, and @code{readonly}
6045 builtins each accept a @option{-a} option to specify an indexed
6046 array and a @option{-A} option to specify an associative array.
6047 The @code{read} builtin accepts a @option{-a}
6048 option to assign a list of words read from the standard input
6049 to an array, and can read values from the standard input into
6050 individual array elements.  The @code{set} and @code{declare}
6051 builtins display array values in a way that allows them to be
6052 reused as input.
6053
6054 @node The Directory Stack
6055 @section The Directory Stack
6056 @cindex directory stack
6057
6058 @menu
6059 * Directory Stack Builtins::            Bash builtin commands to manipulate
6060                                         the directory stack.
6061 @end menu
6062
6063 The directory stack is a list of recently-visited directories.  The
6064 @code{pushd} builtin adds directories to the stack as it changes
6065 the current directory, and the @code{popd} builtin removes specified
6066 directories from the stack and changes the current directory to
6067 the directory removed.  The @code{dirs} builtin displays the contents
6068 of the directory stack.
6069
6070 The contents of the directory stack are also visible
6071 as the value of the @env{DIRSTACK} shell variable.
6072
6073 @node Directory Stack Builtins
6074 @subsection Directory Stack Builtins
6075
6076 @table @code
6077
6078 @item dirs
6079 @btindex dirs
6080 @example
6081 dirs [+@var{N} | -@var{N}] [-clpv]
6082 @end example
6083 Display the list of currently remembered directories.  Directories
6084 are added to the list with the @code{pushd} command; the
6085 @code{popd} command removes directories from the list.
6086 @table @code
6087 @item +@var{N}
6088 Displays the @var{N}th directory (counting from the left of the
6089 list printed by @code{dirs} when invoked without options), starting
6090 with zero.
6091 @item -@var{N}
6092 Displays the @var{N}th directory (counting from the right of the
6093 list printed by @code{dirs} when invoked without options), starting
6094 with zero.
6095 @item -c
6096 Clears the directory stack by deleting all of the elements.
6097 @item -l
6098 Produces a longer listing; the default listing format uses a 
6099 tilde to denote the home directory.
6100 @item -p
6101 Causes @code{dirs} to print the directory stack with one entry per
6102 line.
6103 @item -v
6104 Causes @code{dirs} to print the directory stack with one entry per
6105 line, prefixing each entry with its index in the stack.
6106 @end table
6107
6108 @item popd
6109 @btindex popd
6110 @example
6111 popd [+@var{N} | -@var{N}] [-n]
6112 @end example
6113
6114 Remove the top entry from the directory stack, and @code{cd}
6115 to the new top directory.
6116 When no arguments are given, @code{popd}
6117 removes the top directory from the stack and
6118 performs a @code{cd} to the new top directory.  The
6119 elements are numbered from 0 starting at the first directory listed with
6120 @code{dirs}; i.e., @code{popd} is equivalent to @code{popd +0}.
6121 @table @code
6122 @item +@var{N}
6123 Removes the @var{N}th directory (counting from the left of the
6124 list printed by @code{dirs}), starting with zero.
6125 @item -@var{N}
6126 Removes the @var{N}th directory (counting from the right of the
6127 list printed by @code{dirs}), starting with zero.
6128 @item -n
6129 Suppresses the normal change of directory when removing directories
6130 from the stack, so that only the stack is manipulated.
6131 @end table
6132
6133 @btindex pushd
6134 @item pushd
6135 @example
6136 pushd [-n] [@var{+N} | @var{-N} | @var{dir} ]
6137 @end example
6138
6139 Save the current directory on the top of the directory stack
6140 and then @code{cd} to @var{dir}.
6141 With no arguments, @code{pushd} exchanges the top two directories.
6142
6143 @table @code
6144 @item -n
6145 Suppresses the normal change of directory when adding directories
6146 to the stack, so that only the stack is manipulated.
6147 @item +@var{N}
6148 Brings the @var{N}th directory (counting from the left of the
6149 list printed by @code{dirs}, starting with zero) to the top of
6150 the list by rotating the stack.
6151 @item -@var{N}
6152 Brings the @var{N}th directory (counting from the right of the
6153 list printed by @code{dirs}, starting with zero) to the top of
6154 the list by rotating the stack.
6155 @item @var{dir}
6156 Makes the current working directory be the top of the stack, and then
6157 executes the equivalent of `@code{cd} @var{dir}'.
6158 @code{cd}s to @var{dir}.
6159 @end table
6160
6161 @end table
6162
6163 @node Printing a Prompt
6164 @section Controlling the Prompt
6165 @cindex prompting
6166
6167 The value of the variable @env{PROMPT_COMMAND} is examined just before
6168 Bash prints each primary prompt.  If @env{PROMPT_COMMAND} is set and
6169 has a non-null value, then the
6170 value is executed just as if it had been typed on the command line.
6171
6172 In addition, the following table describes the special characters which
6173 can appear in the prompt variables:
6174
6175 @table @code
6176 @item \a
6177 A bell character.
6178 @item \d
6179 The date, in "Weekday Month Date" format (e.g., "Tue May 26").
6180 @item \D@{@var{format}@}
6181 The @var{format} is passed to @code{strftime}(3) and the result is inserted
6182 into the prompt string; an empty @var{format} results in a locale-specific
6183 time representation.  The braces are required.
6184 @item \e
6185 An escape character.
6186 @item \h
6187 The hostname, up to the first `.'.
6188 @item \H
6189 The hostname.
6190 @item \j
6191 The number of jobs currently managed by the shell.
6192 @item \l
6193 The basename of the shell's terminal device name.
6194 @item \n
6195 A newline.
6196 @item \r
6197 A carriage return.
6198 @item \s
6199 The name of the shell, the basename of @code{$0} (the portion
6200 following the final slash).
6201 @item \t
6202 The time, in 24-hour HH:MM:SS format.
6203 @item \T
6204 The time, in 12-hour HH:MM:SS format.
6205 @item \@@
6206 The time, in 12-hour am/pm format.
6207 @item \A
6208 The time, in 24-hour HH:MM format.
6209 @item \u
6210 The username of the current user.
6211 @item \v
6212 The version of Bash (e.g., 2.00)          
6213 @item \V
6214 The release of Bash, version + patchlevel (e.g., 2.00.0)
6215 @item \w
6216 The current working directory, with @env{$HOME} abbreviated with a tilde
6217 (uses the @env{$PROMPT_DIRTRIM} variable).
6218 @item \W
6219 The basename of @env{$PWD}, with @env{$HOME} abbreviated with a tilde.
6220 @item \!
6221 The history number of this command.
6222 @item \#
6223 The command number of this command.
6224 @item \$
6225 If the effective uid is 0, @code{#}, otherwise @code{$}.
6226 @item \@var{nnn}
6227 The character whose ASCII code is the octal value @var{nnn}.
6228 @item \\
6229 A backslash.
6230 @item \[
6231 Begin a sequence of non-printing characters.  This could be used to
6232 embed a terminal control sequence into the prompt.
6233 @item \]
6234 End a sequence of non-printing characters.
6235 @end table
6236
6237 The command number and the history number are usually different:
6238 the history number of a command is its position in the history
6239 list, which may include commands restored from the history file
6240 (@pxref{Bash History Facilities}), while the command number is
6241 the position in the sequence of commands executed during the current
6242 shell session.
6243
6244 After the string is decoded, it is expanded via
6245 parameter expansion, command substitution, arithmetic
6246 expansion, and quote removal, subject to the value of the
6247 @code{promptvars} shell option (@pxref{Bash Builtins}).
6248
6249 @node The Restricted Shell
6250 @section The Restricted Shell
6251 @cindex restricted shell
6252
6253 If Bash is started with the name @code{rbash}, or the
6254 @option{--restricted}
6255 or
6256 @option{-r}
6257 option is supplied at invocation, the shell becomes restricted.
6258 A restricted shell is used to
6259 set up an environment more controlled than the standard shell.
6260 A restricted shell behaves identically to @code{bash}
6261 with the exception that the following are disallowed or not performed:
6262
6263 @itemize @bullet
6264 @item
6265 Changing directories with the @code{cd} builtin.
6266 @item
6267 Setting or unsetting the values of the @env{SHELL}, @env{PATH},
6268 @env{ENV}, or @env{BASH_ENV} variables.
6269 @item
6270 Specifying command names containing slashes.
6271 @item
6272 Specifying a filename containing a slash as an argument to the @code{.}
6273 builtin command.
6274 @item
6275 Specifying a filename containing a slash as an argument to the @option{-p}
6276 option to the @code{hash} builtin command.
6277 @item
6278 Importing function definitions from the shell environment at startup.
6279 @item
6280 Parsing the value of @env{SHELLOPTS} from the shell environment at startup.
6281 @item
6282 Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&},
6283 @samp{&>}, and @samp{>>} redirection operators.
6284 @item
6285 Using the @code{exec} builtin to replace the shell with another command.
6286 @item
6287 Adding or deleting builtin commands with the
6288 @option{-f} and @option{-d} options to the @code{enable} builtin.
6289 @item
6290 Using the @code{enable} builtin command to enable disabled shell builtins.
6291 @item
6292 Specifying the @option{-p} option to the @code{command} builtin.
6293 @item
6294 Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}.
6295 @end itemize
6296
6297 These restrictions are enforced after any startup files are read.
6298
6299 When a command that is found to be a shell script is executed
6300 (@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in
6301 the shell spawned to execute the script.
6302
6303 @node Bash POSIX Mode
6304 @section Bash POSIX Mode
6305 @cindex POSIX Mode
6306
6307 Starting Bash with the @option{--posix} command-line option or executing
6308 @samp{set -o posix} while Bash is running will cause Bash to conform more
6309 closely to the @sc{posix} standard by changing the behavior to
6310 match that specified by @sc{posix} in areas where the Bash default differs.
6311
6312 When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the
6313 startup files.
6314
6315 The following list is what's changed when `@sc{posix} mode' is in effect:
6316
6317 @enumerate
6318 @item
6319 When a command in the hash table no longer exists, Bash will re-search
6320 @env{$PATH} to find the new location.  This is also available with
6321 @samp{shopt -s checkhash}.
6322
6323 @item
6324 The message printed by the job control code and builtins when a job
6325 exits with a non-zero status is `Done(status)'.
6326
6327 @item
6328 The message printed by the job control code and builtins when a job
6329 is stopped is `Stopped(@var{signame})', where @var{signame} is, for
6330 example, @code{SIGTSTP}.
6331
6332 @item
6333 The @code{bg} builtin uses the required format to describe each job placed
6334 in the background, which does not include an indication of whether the job
6335 is the current or previous job.
6336
6337 @item
6338 Reserved words appearing in a context where reserved words are recognized
6339 do not undergo alias expansion.
6340
6341 @item
6342 The @sc{posix} @env{PS1} and @env{PS2} expansions of @samp{!} to
6343 the history number and @samp{!!} to @samp{!} are enabled,
6344 and parameter expansion is performed on the values of @env{PS1} and
6345 @env{PS2} regardless of the setting of the @code{promptvars} option.
6346
6347 @item
6348 The @sc{posix} startup files are executed (@env{$ENV}) rather than
6349 the normal Bash files.
6350
6351 @item
6352 Tilde expansion is only performed on assignments preceding a command
6353 name, rather than on all assignment statements on the line.
6354
6355 @item
6356 The default history file is @file{~/.sh_history} (this is the
6357 default value of @env{$HISTFILE}).
6358
6359 @item
6360 The output of @samp{kill -l} prints all the signal names on a single line,
6361 separated by spaces, without the @samp{SIG} prefix.
6362
6363 @item
6364 The @code{kill} builtin does not accept signal names with a @samp{SIG}
6365 prefix.
6366
6367 @item
6368 Non-interactive shells exit if @var{filename} in @code{.} @var{filename}
6369 is not found.
6370
6371 @item
6372 Non-interactive shells exit if a syntax error in an arithmetic expansion
6373 results in an invalid expression.
6374
6375 @item
6376 Redirection operators do not perform filename expansion on the word
6377 in the redirection unless the shell is interactive.
6378
6379 @item
6380 Redirection operators do not perform word splitting on the word in the
6381 redirection.
6382
6383 @item
6384 Function names must be valid shell @code{name}s.  That is, they may not
6385 contain characters other than letters, digits, and underscores, and
6386 may not start with a digit.  Declaring a function with an invalid name
6387 causes a fatal syntax error in non-interactive shells.
6388
6389 @item
6390 @sc{posix} special builtins are found before shell functions
6391 during command lookup.
6392
6393 @item
6394 If a @sc{posix} special builtin returns an error status, a
6395 non-interactive shell exits.  The fatal errors are those listed in
6396 the POSIX standard, and include things like passing incorrect options,
6397 redirection errors, variable assignment errors for assignments preceding
6398 the command name, and so on.
6399
6400 @item
6401 If @env{CDPATH} is set, the @code{cd} builtin will not implicitly
6402 append the current directory to it.  This means that @code{cd} will
6403 fail if no valid directory name can be constructed from
6404 any of the entries in @env{$CDPATH}, even if the a directory with
6405 the same name as the name given as an argument to @code{cd} exists
6406 in the current directory.
6407
6408 @item
6409 A non-interactive shell exits with an error status if a variable
6410 assignment error occurs when no command name follows the assignment
6411 statements.
6412 A variable assignment error occurs, for example, when trying to assign
6413 a value to a readonly variable.
6414
6415 @item
6416 A non-interactive shell exits with an error status if the iteration
6417 variable in a @code{for} statement or the selection variable in a
6418 @code{select} statement is a readonly variable.
6419
6420 @item
6421 Process substitution is not available.
6422
6423 @item
6424 Assignment statements preceding @sc{posix} special builtins
6425 persist in the shell environment after the builtin completes.
6426
6427 @item
6428 Assignment statements preceding shell function calls persist in the
6429 shell environment after the function returns, as if a @sc{posix}
6430 special builtin command had been executed.
6431
6432 @item
6433 The @code{export} and @code{readonly} builtin commands display their
6434 output in the format required by @sc{posix}.
6435
6436 @item
6437 The @code{trap} builtin displays signal names without the leading
6438 @code{SIG}.
6439
6440 @item
6441 The @code{trap} builtin doesn't check the first argument for a possible
6442 signal specification and revert the signal handling to the original
6443 disposition if it is, unless that argument consists solely of digits and
6444 is a valid signal number.  If users want to reset the handler for a given
6445 signal to the original disposition, they should use @samp{-} as the
6446 first argument.
6447
6448 @item
6449 The @code{.} and @code{source} builtins do not search the current directory
6450 for the filename argument if it is not found by searching @env{PATH}.
6451
6452 @item
6453 Subshells spawned to execute command substitutions inherit the value of
6454 the @option{-e} option from the parent shell.  When not in @sc{posix} mode,
6455 Bash clears the @option{-e} option in such subshells.
6456
6457 @item
6458 Alias expansion is always enabled, even in non-interactive shells.
6459
6460 @item
6461 When the @code{alias} builtin displays alias definitions, it does not
6462 display them with a leading @samp{alias } unless the @option{-p} option
6463 is supplied.
6464
6465 @item
6466 When the @code{set} builtin is invoked without options, it does not display
6467 shell function names and definitions.
6468
6469 @item
6470 When the @code{set} builtin is invoked without options, it displays
6471 variable values without quotes, unless they contain shell metacharacters,
6472 even if the result contains nonprinting characters.
6473
6474 @item
6475 When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
6476 constructed from @code{$PWD} and the directory name supplied as an argument
6477 does not refer to an existing directory, @code{cd} will fail instead of
6478 falling back to @var{physical} mode.
6479
6480 @item
6481 When the @code{pwd} builtin is supplied the @option{-P} option, it resets
6482 @code{$PWD} to a pathname containing no symlinks.
6483
6484 @item
6485 The @code{pwd} builtin verifies that the value it prints is the same as the
6486 current directory, even if it is not asked to check the file system with the
6487 @option{-P} option.
6488
6489 @item
6490 When listing the history, the @code{fc} builtin does not include an
6491 indication of whether or not a history entry has been modified.
6492
6493 @item
6494 The default editor used by @code{fc} is @code{ed}.
6495
6496 @item
6497 The @code{type} and @code{command} builtins will not report a non-executable
6498 file as having been found, though the shell will attempt to execute such a
6499 file if it is the only so-named file found in @code{$PATH}.
6500
6501 @item
6502 The @code{vi} editing mode will invoke the @code{vi} editor directly when
6503 the @samp{v} command is run, instead of checking @code{$VISUAL} and
6504 @code{$EDITOR}.
6505
6506 @item
6507 When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret
6508 any arguments to @code{echo} as options.  Each argument is displayed, after
6509 escape characters are converted.
6510
6511 @item
6512 The @code{ulimit} builtin uses a block size of 512 bytes for the @option{-c}
6513 and @option{-f} options.
6514
6515 @end enumerate
6516
6517 There is other @sc{posix} behavior that Bash does not implement by
6518 default even when in @sc{posix} mode.
6519 Specifically:
6520
6521 @enumerate
6522
6523 @item
6524 The @code{fc} builtin checks @code{$EDITOR} as a program to edit history
6525 entries if @code{FCEDIT} is unset, rather than defaulting directly to
6526 @code{ed}.  @code{fc} uses @code{ed} if @code{EDITOR} is unset.
6527
6528 @item
6529 As noted above, Bash requires the @code{xpg_echo} option to be enabled for
6530 the @code{echo} builtin to be fully conformant.
6531
6532 @end enumerate
6533
6534 Bash can be configured to be @sc{posix}-conformant by default, by specifying
6535 the @option{--enable-strict-posix-default} to @code{configure} when building
6536 (@pxref{Optional Features}).
6537
6538 @node Job Control
6539 @chapter Job Control
6540
6541 This chapter discusses what job control is, how it works, and how
6542 Bash allows you to access its facilities.
6543
6544 @menu
6545 * Job Control Basics::          How job control works.
6546 * Job Control Builtins::        Bash builtin commands used to interact
6547                                 with job control.
6548 * Job Control Variables::       Variables Bash uses to customize job
6549                                 control.
6550 @end menu
6551
6552 @node Job Control Basics
6553 @section Job Control Basics
6554 @cindex job control
6555 @cindex foreground
6556 @cindex background
6557 @cindex suspending jobs
6558
6559 Job control
6560 refers to the ability to selectively stop (suspend)
6561 the execution of processes and continue (resume)
6562 their execution at a later point.  A user typically employs
6563 this facility via an interactive interface supplied jointly
6564 by the system's terminal driver and Bash.
6565
6566 The shell associates a @var{job} with each pipeline.  It keeps a
6567 table of currently executing jobs, which may be listed with the
6568 @code{jobs} command.  When Bash starts a job
6569 asynchronously, it prints a line that looks
6570 like:
6571 @example
6572 [1] 25647
6573 @end example
6574 @noindent
6575 indicating that this job is job number 1 and that the process @sc{id}
6576 of the last process in the pipeline associated with this job is
6577 25647.  All of the processes in a single pipeline are members of
6578 the same job.  Bash uses the @var{job} abstraction as the
6579 basis for job control. 
6580
6581 To facilitate the implementation of the user interface to job
6582 control, the operating system maintains the notion of a current terminal
6583 process group @sc{id}.  Members of this process group (processes whose
6584 process group @sc{id} is equal to the current terminal process group
6585 @sc{id}) receive keyboard-generated signals such as @code{SIGINT}. 
6586 These processes are said to be in the foreground.  Background
6587 processes are those whose process group @sc{id} differs from the
6588 terminal's; such processes are immune to keyboard-generated
6589 signals.  Only foreground processes are allowed to read from or
6590 write to the terminal.  Background processes which attempt to
6591 read from (write to) the terminal are sent a @code{SIGTTIN}
6592 (@code{SIGTTOU}) signal by the terminal driver, which, unless
6593 caught, suspends the process. 
6594
6595 If the operating system on which Bash is running supports
6596 job control, Bash contains facilities to use it.  Typing the
6597 @var{suspend} character (typically @samp{^Z}, Control-Z) while a
6598 process is running causes that process to be stopped and returns
6599 control to Bash.  Typing the @var{delayed suspend} character
6600 (typically @samp{^Y}, Control-Y) causes the process to be stopped
6601 when it attempts to read input from the terminal, and control to
6602 be returned to Bash.  The user then manipulates the state of
6603 this job, using the @code{bg} command to continue it in the
6604 background, the @code{fg} command to continue it in the
6605 foreground, or the @code{kill} command to kill it.  A @samp{^Z}
6606 takes effect immediately, and has the additional side effect of
6607 causing pending output and typeahead to be discarded. 
6608
6609 There are a number of ways to refer to a job in the shell.  The
6610 character @samp{%} introduces a job specification (@var{jobspec}).
6611
6612 Job number @code{n} may be referred to as @samp{%n}.
6613 The symbols @samp{%%} and  @samp{%+} refer to the shell's notion of the
6614 current job, which is the last job stopped while it was in the foreground
6615 or started in the background.
6616 A single @samp{%} (with no accompanying job specification) also refers
6617 to the current job.
6618 The previous job may be referenced using @samp{%-}.
6619 If there is only a single job, @samp{%+} and @samp{%-} can both be used
6620 to refer to that job.
6621 In output pertaining to jobs (e.g., the output of the @code{jobs}
6622 command), the current job is always flagged with a @samp{+}, and the
6623 previous job with a @samp{-}. 
6624
6625 A job may also be referred to
6626 using a prefix of the name used to start it, or using a substring
6627 that appears in its command line.  For example, @samp{%ce} refers
6628 to a stopped @code{ce} job. Using @samp{%?ce}, on the
6629 other hand, refers to any job containing the string @samp{ce} in
6630 its command line.  If the prefix or substring matches more than one job,
6631 Bash reports an error.
6632
6633 Simply naming a job can be used to bring it into the foreground:
6634 @samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the
6635 background into the foreground.  Similarly, @samp{%1 &} resumes
6636 job 1 in the background, equivalent to @samp{bg %1}
6637
6638 The shell learns immediately whenever a job changes state. 
6639 Normally, Bash waits until it is about to print a prompt
6640 before reporting changes in a job's status so as to not interrupt
6641 any other output.
6642 If the @option{-b} option to the @code{set} builtin is enabled,
6643 Bash reports such changes immediately (@pxref{The Set Builtin}).
6644 Any trap on @code{SIGCHLD} is executed for each child process
6645 that exits.
6646
6647 If an attempt to exit Bash is made while jobs are stopped, (or running, if
6648 the @code{checkjobs} option is enabled -- see @ref{The Shopt Builtin}), the
6649 shell prints a warning message, and if the @code{checkjobs} option is
6650 enabled, lists the jobs and their statuses.
6651 The @code{jobs} command may then be used to inspect their status.
6652 If a second attempt to exit is made without an intervening command,
6653 Bash does not print another warning, and any stopped jobs are terminated.
6654
6655 @node Job Control Builtins
6656 @section Job Control Builtins
6657
6658 @table @code
6659
6660 @item bg
6661 @btindex bg
6662 @example
6663 bg [@var{jobspec} @dots{}]
6664 @end example
6665 Resume each suspended job @var{jobspec} in the background, as if it
6666 had been started with @samp{&}.
6667 If @var{jobspec} is not supplied, the current job is used.
6668 The return status is zero unless it is run when job control is not
6669 enabled, or, when run with job control enabled, any
6670 @var{jobspec} was not found or specifies a job
6671 that was started without job control.
6672
6673 @item fg
6674 @btindex fg
6675 @example
6676 fg [@var{jobspec}]
6677 @end example
6678 Resume the job @var{jobspec} in the foreground and make it the current job.
6679 If @var{jobspec} is not supplied, the current job is used.
6680 The return status is that of the command placed into the foreground,
6681 or non-zero if run when job control is disabled or, when run with
6682 job control enabled, @var{jobspec} does not specify a valid job or
6683 @var{jobspec} specifies a job that was started without job control.
6684
6685 @item jobs
6686 @btindex jobs
6687 @example
6688 jobs [-lnprs] [@var{jobspec}]
6689 jobs -x @var{command} [@var{arguments}]
6690 @end example
6691
6692 The first form lists the active jobs.  The options have the
6693 following meanings:
6694
6695 @table @code
6696 @item -l
6697 List process @sc{id}s in addition to the normal information.
6698
6699 @item -n
6700 Display information only about jobs that have changed status since
6701 the user was last notified of their status.
6702
6703 @item -p
6704 List only the process @sc{id} of the job's process group leader.
6705
6706 @item -r
6707 Restrict output to running jobs.
6708
6709 @item -s
6710 Restrict output to stopped jobs.
6711 @end table
6712
6713 If @var{jobspec} is given,
6714 output is restricted to information about that job. 
6715 If @var{jobspec} is not supplied, the status of all jobs is
6716 listed.
6717
6718 If the @option{-x} option is supplied, @code{jobs} replaces any
6719 @var{jobspec} found in @var{command} or @var{arguments} with the
6720 corresponding process group @sc{id}, and executes @var{command},
6721 passing it @var{argument}s, returning its exit status. 
6722
6723 @item kill
6724 @btindex kill
6725 @example
6726 kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid}
6727 kill -l [@var{exit_status}]
6728 @end example
6729 Send a signal specified by @var{sigspec} or @var{signum} to the process
6730 named by job specification @var{jobspec} or process @sc{id} @var{pid}.
6731 @var{sigspec} is either a case-insensitive signal name such as
6732 @code{SIGINT} (with or without the @code{SIG} prefix)
6733 or a signal number; @var{signum} is a signal number.
6734 If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used.
6735 The @option{-l} option lists the signal names.
6736 If any arguments are supplied when @option{-l} is given, the names of the
6737 signals corresponding to the arguments are listed, and the return status
6738 is zero.
6739 @var{exit_status} is a number specifying a signal number or the exit
6740 status of a process terminated by a signal.
6741 The return status is zero if at least one signal was successfully sent,
6742 or non-zero if an error occurs or an invalid option is encountered.
6743
6744 @item wait
6745 @btindex wait
6746 @example
6747 wait [@var{jobspec} or @var{pid} ...]
6748 @end example
6749 Wait until the child process specified by each process @sc{id} @var{pid}
6750 or job specification @var{jobspec} exits and return the exit status of the
6751 last command waited for.
6752 If a job spec is given, all processes in the job are waited for.
6753 If no arguments are given, all currently active child processes are
6754 waited for, and the return status is zero.
6755 If neither @var{jobspec} nor @var{pid} specifies an active child process
6756 of the shell, the return status is 127.
6757
6758 @item disown
6759 @btindex disown
6760 @example
6761 disown [-ar] [-h] [@var{jobspec} @dots{}]
6762 @end example
6763 Without options, each @var{jobspec} is removed from the table of
6764 active jobs.
6765 If the @option{-h} option is given, the job is not removed from the table,
6766 but is marked so that @code{SIGHUP} is not sent to the job if the shell
6767 receives a @code{SIGHUP}.
6768 If @var{jobspec} is not present, and neither the @option{-a} nor @option{-r}
6769 option is supplied, the current job is used.
6770 If no @var{jobspec} is supplied, the @option{-a} option means to remove or
6771 mark all jobs; the @option{-r} option without a @var{jobspec}
6772 argument restricts operation to running jobs.
6773
6774 @item suspend
6775 @btindex suspend
6776 @example
6777 suspend [-f]
6778 @end example
6779 Suspend the execution of this shell until it receives a
6780 @code{SIGCONT} signal.
6781 A login shell cannot be suspended; the @option{-f}
6782 option can be used to override this and force the suspension.
6783
6784 @end table
6785
6786 When job control is not active, the @code{kill} and @code{wait}
6787 builtins do not accept @var{jobspec} arguments.  They must be
6788 supplied process @sc{id}s.
6789
6790 @node Job Control Variables
6791 @section Job Control Variables
6792
6793 @vtable @code
6794
6795 @item auto_resume
6796 This variable controls how the shell interacts with the user and
6797 job control.  If this variable exists then single word simple
6798 commands without redirections are treated as candidates for resumption
6799 of an existing job.  There is no ambiguity allowed; if there is
6800 more than one job beginning with the string typed, then
6801 the most recently accessed job will be selected.
6802 The name of a stopped job, in this context, is the command line
6803 used to start it.  If this variable is set to the value @samp{exact},
6804 the string supplied must match the name of a stopped job exactly;
6805 if set to @samp{substring},
6806 the string supplied needs to match a substring of the name of a
6807 stopped job.  The @samp{substring} value provides functionality
6808 analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}).
6809 If set to any other value, the supplied string must
6810 be a prefix of a stopped job's name; this provides functionality
6811 analogous to the @samp{%} job @sc{id}.
6812
6813 @end vtable
6814
6815 @set readline-appendix
6816 @set history-appendix
6817 @cindex Readline, how to use
6818 @include rluser.texi
6819 @cindex History, how to use
6820 @include hsuser.texi
6821 @clear readline-appendix
6822 @clear history-appendix
6823
6824 @node Installing Bash
6825 @chapter Installing Bash
6826
6827 This chapter provides basic instructions for installing Bash on
6828 the various supported platforms.  The distribution supports the
6829 @sc{gnu} operating systems, nearly every version of Unix, and several
6830 non-Unix systems such as BeOS and Interix.
6831 Other independent ports exist for
6832 @sc{ms-dos}, @sc{os/2}, and Windows platforms.
6833
6834 @menu
6835 * Basic Installation::  Installation instructions.
6836 * Compilers and Options::       How to set special options for various
6837                                 systems.
6838 * Compiling For Multiple Architectures::        How to compile Bash for more
6839                                                 than one kind of system from
6840                                                 the same source tree.
6841 * Installation Names::  How to set the various paths used by the installation.
6842 * Specifying the System Type::  How to configure Bash for a particular system.
6843 * Sharing Defaults::    How to share default configuration values among GNU
6844                         programs.
6845 * Operation Controls::  Options recognized by the configuration program.
6846 * Optional Features::   How to enable and disable optional features when
6847                         building Bash.
6848 @end menu
6849
6850 @node Basic Installation
6851 @section Basic Installation
6852 @cindex installation
6853 @cindex configuration
6854 @cindex Bash installation
6855 @cindex Bash configuration
6856
6857 These are installation instructions for Bash.
6858
6859 The simplest way to compile Bash is:
6860
6861 @enumerate
6862 @item
6863 @code{cd} to the directory containing the source code and type
6864 @samp{./configure} to configure Bash for your system.  If you're
6865 using @code{csh} on an old version of System V, you might need to
6866 type @samp{sh ./configure} instead to prevent @code{csh} from trying
6867 to execute @code{configure} itself.
6868
6869 Running @code{configure} takes some time.
6870 While running, it prints messages telling which features it is
6871 checking for.
6872
6873 @item
6874 Type @samp{make} to compile Bash and build the @code{bashbug} bug
6875 reporting script.
6876
6877 @item
6878 Optionally, type @samp{make tests} to run the Bash test suite.
6879
6880 @item
6881 Type @samp{make install} to install @code{bash} and @code{bashbug}.
6882 This will also install the manual pages and Info file.
6883
6884 @end enumerate
6885
6886 The @code{configure} shell script attempts to guess correct
6887 values for various system-dependent variables used during
6888 compilation.  It uses those values to create a @file{Makefile} in
6889 each directory of the package (the top directory, the
6890 @file{builtins}, @file{doc}, and @file{support} directories,
6891 each directory under @file{lib}, and several others).  It also creates a
6892 @file{config.h} file containing system-dependent definitions. 
6893 Finally, it creates a shell script named @code{config.status} that you
6894 can run in the future to recreate the current configuration, a
6895 file @file{config.cache} that saves the results of its tests to
6896 speed up reconfiguring, and a file @file{config.log} containing
6897 compiler output (useful mainly for debugging @code{configure}). 
6898 If at some point
6899 @file{config.cache} contains results you don't want to keep, you
6900 may remove or edit it. 
6901
6902 To find out more about the options and arguments that the
6903 @code{configure} script understands, type 
6904
6905 @example
6906 bash-2.04$ ./configure --help
6907 @end example
6908
6909 @noindent
6910 at the Bash prompt in your Bash source directory.
6911
6912 If you need to do unusual things to compile Bash, please
6913 try to figure out how @code{configure} could check whether or not
6914 to do them, and mail diffs or instructions to
6915 @email{bash-maintainers@@gnu.org} so they can be
6916 considered for the next release.
6917
6918 The file @file{configure.in} is used to create @code{configure}
6919 by a program called Autoconf.  You only need
6920 @file{configure.in} if you want to change it or regenerate
6921 @code{configure} using a newer version of Autoconf.  If
6922 you do this, make sure you are using Autoconf version 2.50 or
6923 newer.
6924
6925 You can remove the program binaries and object files from the
6926 source code directory by typing @samp{make clean}.  To also remove the
6927 files that @code{configure} created (so you can compile Bash for
6928 a different kind of computer), type @samp{make distclean}.
6929
6930 @node Compilers and Options
6931 @section Compilers and Options
6932
6933 Some systems require unusual options for compilation or linking
6934 that the @code{configure} script does not know about.  You can
6935 give @code{configure} initial values for variables by setting
6936 them in the environment.  Using a Bourne-compatible shell, you
6937 can do that on the command line like this:
6938
6939 @example
6940 CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
6941 @end example
6942
6943 On systems that have the @code{env} program, you can do it like this:
6944
6945 @example
6946 env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
6947 @end example
6948
6949 The configuration process uses GCC to build Bash if it
6950 is available.
6951
6952 @node Compiling For Multiple Architectures
6953 @section Compiling For Multiple Architectures
6954
6955 You can compile Bash for more than one kind of computer at the
6956 same time, by placing the object files for each architecture in their
6957 own directory.  To do this, you must use a version of @code{make} that
6958 supports the @code{VPATH} variable, such as GNU @code{make}.
6959 @code{cd} to the
6960 directory where you want the object files and executables to go and run
6961 the @code{configure} script from the source directory.  You may need to
6962 supply the @option{--srcdir=PATH} argument to tell @code{configure} where the
6963 source files are.  @code{configure} automatically checks for the
6964 source code in the directory that @code{configure} is in and in `..'.
6965
6966 If you have to use a @code{make} that does not supports the @code{VPATH}
6967 variable, you can compile Bash for one architecture at a
6968 time in the source code directory.  After you have installed
6969 Bash for one architecture, use @samp{make distclean} before
6970 reconfiguring for another architecture.
6971
6972 Alternatively, if your system supports symbolic links, you can use the
6973 @file{support/mkclone} script to create a build tree which has
6974 symbolic links back to each file in the source directory.  Here's an
6975 example that creates a build directory in the current directory from a
6976 source directory @file{/usr/gnu/src/bash-2.0}:
6977
6978 @example
6979 bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
6980 @end example
6981
6982 @noindent
6983 The @code{mkclone} script requires Bash, so you must have already built
6984 Bash for at least one architecture before you can create build
6985 directories for other architectures.
6986
6987 @node Installation Names
6988 @section Installation Names
6989
6990 By default, @samp{make install} will install into
6991 @file{/usr/local/bin}, @file{/usr/local/man}, etc.  You can
6992 specify an installation prefix other than @file{/usr/local} by
6993 giving @code{configure} the option @option{--prefix=@var{PATH}},
6994 or by specifying a value for the @code{DESTDIR} @samp{make}
6995 variable when running @samp{make install}.
6996
6997 You can specify separate installation prefixes for
6998 architecture-specific files and architecture-independent files. 
6999 If you give @code{configure} the option
7000 @option{--exec-prefix=@var{PATH}}, @samp{make install} will use
7001 @var{PATH} as the prefix for installing programs and libraries.
7002 Documentation and other data files will still use the regular prefix. 
7003
7004 @node Specifying the System Type
7005 @section Specifying the System Type
7006
7007 There may be some features @code{configure} can not figure out
7008 automatically, but need to determine by the type of host Bash
7009 will run on.  Usually @code{configure} can figure that
7010 out, but if it prints a message saying it can not guess the host
7011 type, give it the @option{--host=TYPE} option.  @samp{TYPE} can
7012 either be a short name for the system type, such as @samp{sun4},
7013 or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
7014 (e.g., @samp{i386-unknown-freebsd4.2}).
7015
7016 See the file @file{support/config.sub} for the possible
7017 values of each field. 
7018
7019 @node Sharing Defaults
7020 @section Sharing Defaults
7021
7022 If you want to set default values for @code{configure} scripts to
7023 share, you can create a site shell script called
7024 @code{config.site} that gives default values for variables like
7025 @code{CC}, @code{cache_file}, and @code{prefix}.  @code{configure}
7026 looks for @file{PREFIX/share/config.site} if it exists, then
7027 @file{PREFIX/etc/config.site} if it exists.  Or, you can set the
7028 @code{CONFIG_SITE} environment variable to the location of the site
7029 script.  A warning: the Bash @code{configure} looks for a site script,
7030 but not all @code{configure} scripts do.
7031
7032 @node Operation Controls
7033 @section Operation Controls
7034
7035 @code{configure} recognizes the following options to control how it
7036 operates.
7037
7038 @table @code
7039
7040 @item --cache-file=@var{file}
7041 Use and save the results of the tests in
7042 @var{file} instead of @file{./config.cache}.  Set @var{file} to
7043 @file{/dev/null} to disable caching, for debugging
7044 @code{configure}. 
7045
7046 @item --help
7047 Print a summary of the options to @code{configure}, and exit.
7048
7049 @item --quiet
7050 @itemx --silent
7051 @itemx -q
7052 Do not print messages saying which checks are being made.
7053
7054 @item --srcdir=@var{dir}
7055 Look for the Bash source code in directory @var{dir}.  Usually
7056 @code{configure} can determine that directory automatically.
7057
7058 @item --version
7059 Print the version of Autoconf used to generate the @code{configure}
7060 script, and exit.
7061 @end table
7062
7063 @code{configure} also accepts some other, not widely used, boilerplate
7064 options.  @samp{configure --help} prints the complete list.
7065
7066 @node Optional Features
7067 @section Optional Features
7068
7069 The Bash @code{configure} has a number of @option{--enable-@var{feature}}
7070 options, where @var{feature} indicates an optional part of Bash.
7071 There are also several @option{--with-@var{package}} options,
7072 where @var{package} is something like @samp{bash-malloc} or @samp{purify}.
7073 To turn off the default use of a package, use
7074 @option{--without-@var{package}}.  To configure Bash without a feature
7075 that is enabled by default, use @option{--disable-@var{feature}}.
7076
7077 Here is a complete list of the @option{--enable-} and
7078 @option{--with-} options that the Bash @code{configure} recognizes. 
7079
7080 @table @code
7081 @item --with-afs
7082 Define if you are using the Andrew File System from Transarc.
7083
7084 @item --with-bash-malloc
7085 Use the Bash version of
7086 @code{malloc} in the directory @file{lib/malloc}.  This is not the same
7087 @code{malloc} that appears in @sc{gnu} libc, but an older version
7088 originally derived from the 4.2 @sc{bsd} @code{malloc}.  This @code{malloc}
7089 is very fast, but wastes some space on each allocation.
7090 This option is enabled by default.
7091 The @file{NOTES} file contains a list of systems for
7092 which this should be turned off, and @code{configure} disables this
7093 option automatically for a number of systems.
7094
7095 @item --with-curses
7096 Use the curses library instead of the termcap library.  This should
7097 be supplied if your system has an inadequate or incomplete termcap
7098 database.
7099
7100 @item --with-gnu-malloc
7101 A synonym for @code{--with-bash-malloc}.
7102
7103 @item --with-installed-readline[=@var{PREFIX}]
7104 Define this to make Bash link with a locally-installed version of Readline
7105 rather than the version in @file{lib/readline}.  This works only with
7106 Readline 5.0 and later versions.  If @var{PREFIX} is @code{yes} or not
7107 supplied, @code{configure} uses the values of the make variables
7108 @code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
7109 by default, to find the installed version of Readline if it is not in
7110 the standard system include and library directories.
7111 If @var{PREFIX} is @code{no}, Bash links with the version in
7112 @file{lib/readline}.
7113 If @var{PREFIX} is set to any other value, @code{configure} treats it as
7114 a directory pathname and looks for
7115 the installed version of Readline in subdirectories of that directory
7116 (include files in @var{PREFIX}/@code{include} and the library in
7117 @var{PREFIX}/@code{lib}).
7118
7119 @item --with-purify
7120 Define this to use the Purify memory allocation checker from Rational
7121 Software.
7122
7123 @item --enable-minimal-config
7124 This produces a shell with minimal features, close to the historical
7125 Bourne shell.
7126 @end table
7127
7128 There are several @option{--enable-} options that alter how Bash is
7129 compiled and linked, rather than changing run-time features.
7130
7131 @table @code
7132 @item --enable-largefile
7133 Enable support for @uref{http://www.sas.com/standards/large_file/x_open.20Mar96.html,
7134 large files} if the operating system requires special compiler options
7135 to build programs which can access large files.  This is enabled by
7136 default, if the operating system provides large file support.
7137
7138 @item --enable-profiling
7139 This builds a Bash binary that produces profiling information to be
7140 processed by @code{gprof} each time it is executed.
7141
7142 @item --enable-static-link
7143 This causes Bash to be linked statically, if @code{gcc} is being used.
7144 This could be used to build a version to use as root's shell.
7145 @end table
7146
7147 The @samp{minimal-config} option can be used to disable all of
7148 the following options, but it is processed first, so individual
7149 options may be enabled using @samp{enable-@var{feature}}. 
7150
7151 All of the following options except for @samp{disabled-builtins} and
7152 @samp{xpg-echo-default} are
7153 enabled by default, unless the operating system does not provide the
7154 necessary support.
7155
7156 @table @code
7157 @item --enable-alias
7158 Allow alias expansion and include the @code{alias} and @code{unalias}
7159 builtins (@pxref{Aliases}).
7160
7161 @item --enable-arith-for-command
7162 Include support for the alternate form of the @code{for} command
7163 that behaves like the C language @code{for} statement
7164 (@pxref{Looping Constructs}).
7165
7166 @item --enable-array-variables
7167 Include support for one-dimensional array shell variables
7168 (@pxref{Arrays}).
7169
7170 @item --enable-bang-history
7171 Include support for @code{csh}-like history substitution
7172 (@pxref{History Interaction}).
7173
7174 @item --enable-brace-expansion
7175 Include @code{csh}-like brace expansion
7176 ( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
7177 See @ref{Brace Expansion}, for a complete description.
7178
7179 @item --enable-casemod-attributes
7180 Include support for case-modifying attributes in the @code{declare} builtin
7181 and assignment statements.  Variables with the @var{uppercase} attribute,
7182 for example, will have their values converted to uppercase upon assignment.
7183
7184 @item --enable-casemod-expansion
7185 Include support for case-modifying word expansions.
7186
7187 @item --enable-command-timing
7188 Include support for recognizing @code{time} as a reserved word and for
7189 displaying timing statistics for the pipeline following @code{time}
7190 (@pxref{Pipelines}).
7191 This allows pipelines as well as shell builtins and functions to be timed.
7192
7193 @item --enable-cond-command
7194 Include support for the @code{[[} conditional command.
7195 (@pxref{Conditional Constructs}).
7196
7197 @item --enable-cond-regexp
7198 Include support for matching POSIX regular expressions using the
7199 @samp{=~} binary operator in the @code{[[} conditional command.
7200 (@pxref{Conditional Constructs}).
7201
7202 @item --enable-coprocesses
7203 Include support for coprocesses and the @code{coproc} reserved word
7204 (@pxref{Pipelines}).
7205
7206 @item --enable-debugger
7207 Include support for the bash debugger (distributed separately).
7208
7209 @item --enable-directory-stack
7210 Include support for a @code{csh}-like directory stack and the
7211 @code{pushd}, @code{popd}, and @code{dirs} builtins
7212 (@pxref{The Directory Stack}).
7213
7214 @item --enable-disabled-builtins
7215 Allow builtin commands to be invoked via @samp{builtin xxx}
7216 even after @code{xxx} has been disabled using @samp{enable -n xxx}.
7217 See @ref{Bash Builtins}, for details of the @code{builtin} and
7218 @code{enable} builtin commands.
7219
7220 @item --enable-dparen-arithmetic
7221 Include support for the @code{((@dots{}))} command
7222 (@pxref{Conditional Constructs}).
7223
7224 @item --enable-extended-glob
7225 Include support for the extended pattern matching features described
7226 above under @ref{Pattern Matching}.
7227
7228 @item --enable-help-builtin
7229 Include the @code{help} builtin, which displays help on shell builtins and
7230 variables (@pxref{Bash Builtins}).
7231
7232 @item --enable-history
7233 Include command history and the @code{fc} and @code{history}
7234 builtin commands (@pxref{Bash History Facilities}).
7235
7236 @item --enable-job-control
7237 This enables the job control features (@pxref{Job Control}),
7238 if the operating system supports them.
7239
7240 @item --enable-multibyte
7241 This enables support for multibyte characters if the operating
7242 system provides the necessary support.
7243
7244 @item --enable-net-redirections
7245 This enables the special handling of filenames of the form
7246 @code{/dev/tcp/@var{host}/@var{port}} and
7247 @code{/dev/udp/@var{host}/@var{port}}
7248 when used in redirections (@pxref{Redirections}).
7249
7250 @item --enable-process-substitution
7251 This enables process substitution (@pxref{Process Substitution}) if
7252 the operating system provides the necessary support.
7253
7254 @item --enable-progcomp
7255 Enable the programmable completion facilities
7256 (@pxref{Programmable Completion}).
7257 If Readline is not enabled, this option has no effect.
7258
7259 @item --enable-prompt-string-decoding
7260 Turn on the interpretation of a number of backslash-escaped characters
7261 in the @env{$PS1}, @env{$PS2}, @env{$PS3}, and @env{$PS4} prompt
7262 strings.  See @ref{Printing a Prompt}, for a complete list of prompt
7263 string escape sequences.
7264
7265 @item --enable-readline
7266 Include support for command-line editing and history with the Bash
7267 version of the Readline library (@pxref{Command Line Editing}).
7268
7269 @item --enable-restricted
7270 Include support for a @dfn{restricted shell}.  If this is enabled, Bash,
7271 when called as @code{rbash}, enters a restricted mode.  See
7272 @ref{The Restricted Shell}, for a description of restricted mode.
7273
7274 @item --enable-select
7275 Include the @code{select} builtin, which allows the generation of simple
7276 menus (@pxref{Conditional Constructs}).
7277
7278 @item --enable-separate-helpfiles
7279 Use external files for the documentation displayed by the @code{help} builtin
7280 instead of storing the text internally.
7281
7282 @item --enable-single-help-strings
7283 Store the text displayed by the @code{help} builtin as a single string for
7284 each help topic.  This aids in translating the text to different languages.
7285 You may need to disable this if your compiler cannot handle very long string
7286 literals.
7287
7288 @item --enable-strict-posix-default
7289 Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}).
7290
7291 @item --enable-usg-echo-default
7292 A synonym for @code{--enable-xpg-echo-default}.
7293
7294 @item --enable-xpg-echo-default
7295 Make the @code{echo} builtin expand backslash-escaped characters by default,
7296 without requiring the @option{-e} option.
7297 This sets the default value of the @code{xpg_echo} shell option to @code{on},
7298 which makes the Bash @code{echo} behave more like the version specified in
7299 the Single Unix Specification, version 3.
7300 @xref{Bash Builtins}, for a description of the escape sequences that
7301 @code{echo} recognizes.
7302
7303 @end table
7304
7305 The file @file{config-top.h} contains C Preprocessor
7306 @samp{#define} statements for options which are not settable from
7307 @code{configure}.
7308 Some of these are not meant to be changed; beware of the consequences if
7309 you do.
7310 Read the comments associated with each definition for more
7311 information about its effect.
7312
7313 @node Reporting Bugs
7314 @appendix Reporting Bugs
7315
7316 Please report all bugs you find in Bash.
7317 But first, you should
7318 make sure that it really is a bug, and that it appears in the latest
7319 version of Bash.
7320 The latest version of Bash is always available for FTP from
7321 @uref{ftp://ftp.gnu.org/pub/bash/}.
7322
7323 Once you have determined that a bug actually exists, use the
7324 @code{bashbug} command to submit a bug report.
7325 If you have a fix, you are encouraged to mail that as well!
7326 Suggestions and `philosophical' bug reports may be mailed
7327 to @email{bug-bash@@gnu.org} or posted to the Usenet
7328 newsgroup @code{gnu.bash.bug}.
7329
7330 All bug reports should include:
7331 @itemize @bullet
7332 @item
7333 The version number of Bash.
7334 @item
7335 The hardware and operating system.
7336 @item
7337 The compiler used to compile Bash.
7338 @item
7339 A description of the bug behaviour.
7340 @item
7341 A short script or `recipe' which exercises the bug and may be used
7342 to reproduce it.
7343 @end itemize
7344
7345 @noindent
7346 @code{bashbug} inserts the first three items automatically into
7347 the template it provides for filing a bug report.
7348
7349 Please send all reports concerning this manual to
7350 @email{chet.ramey@@case.edu}.
7351
7352 @node Major Differences From The Bourne Shell
7353 @appendix Major Differences From The Bourne Shell
7354
7355 Bash implements essentially the same grammar, parameter and
7356 variable expansion, redirection, and quoting as the Bourne Shell. 
7357 Bash uses the @sc{posix} standard as the specification of
7358 how these features are to be implemented.  There are some
7359 differences between the traditional Bourne shell and Bash; this
7360 section quickly details the differences of significance.  A
7361 number of these differences are explained in greater depth in
7362 previous sections.
7363 This section uses the version of @code{sh} included in SVR4.2 (the
7364 last version of the historical Bourne shell) as the baseline reference.
7365
7366 @itemize @bullet
7367
7368 @item
7369 Bash is @sc{posix}-conformant, even where the @sc{posix} specification
7370 differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}).
7371
7372 @item
7373 Bash has multi-character invocation options (@pxref{Invoking Bash}).
7374
7375 @item
7376 Bash has command-line editing (@pxref{Command Line Editing}) and
7377 the @code{bind} builtin.
7378
7379 @item
7380 Bash provides a programmable word completion mechanism
7381 (@pxref{Programmable Completion}), and builtin commands
7382 @code{complete}, @code{compgen}, and @code{compopt}, to
7383 manipulate it.
7384
7385 @item
7386 Bash has command history (@pxref{Bash History Facilities}) and the
7387 @code{history} and @code{fc} builtins to manipulate it.
7388 The Bash history list maintains timestamp information and uses the
7389 value of the @code{HISTTIMEFORMAT} variable to display it.
7390
7391 @item
7392 Bash implements @code{csh}-like history expansion
7393 (@pxref{History Interaction}).
7394
7395 @item
7396 Bash has one-dimensional array variables (@pxref{Arrays}), and the
7397 appropriate variable expansions and assignment syntax to use them.
7398 Several of the Bash builtins take options to act on arrays.
7399 Bash provides a number of built-in array variables.
7400
7401 @item
7402 The @code{$'@dots{}'} quoting syntax, which expands ANSI-C
7403 backslash-escaped characters in the text between the single quotes,
7404 is supported (@pxref{ANSI-C Quoting}).
7405
7406 @item
7407 Bash supports the @code{$"@dots{}"} quoting syntax to do
7408 locale-specific translation of the characters between the double
7409 quotes.  The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings}
7410 invocation options list the translatable strings found in a script
7411 (@pxref{Locale Translation}).
7412
7413 @item
7414 Bash implements the @code{!} keyword to negate the return value of
7415 a pipeline (@pxref{Pipelines}).
7416 Very useful when an @code{if} statement needs to act only if a test fails.
7417 The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to
7418 return a failure status if any command fails.
7419
7420 @item
7421 Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}).
7422 The display of the timing statistics may be controlled with the
7423 @env{TIMEFORMAT} variable.
7424
7425 @item
7426 Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))}
7427 arithmetic for command, similar to the C language (@pxref{Looping Constructs}).
7428
7429 @item
7430 Bash includes the @code{select} compound command, which allows the
7431 generation of simple menus (@pxref{Conditional Constructs}).
7432
7433 @item
7434 Bash includes the @code{[[} compound command, which makes conditional
7435 testing part of the shell grammar (@pxref{Conditional Constructs}), including
7436 optional regular expression matching.
7437
7438 @item
7439 Bash provides optional case-insensitive matching for the @code{case} and
7440 @code{[[} constructs.
7441
7442 @item
7443 Bash includes brace expansion (@pxref{Brace Expansion}) and tilde
7444 expansion (@pxref{Tilde Expansion}).
7445
7446 @item
7447 Bash implements command aliases and the @code{alias} and @code{unalias}
7448 builtins (@pxref{Aliases}).
7449
7450 @item
7451 Bash provides shell arithmetic, the @code{((} compound command
7452 (@pxref{Conditional Constructs}),
7453 and arithmetic expansion (@pxref{Shell Arithmetic}).
7454
7455 @item
7456 Variables present in the shell's initial environment are automatically
7457 exported to child processes.  The Bourne shell does not normally do
7458 this unless the variables are explicitly marked using the @code{export}
7459 command.
7460
7461 @item
7462 Bash supports the @samp{+=} assignment operator, which appends to the value
7463 of the variable named on the left hand side.
7464
7465 @item
7466 Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%}
7467 and @samp{##} expansions to remove leading or trailing substrings from
7468 variable values (@pxref{Shell Parameter Expansion}).
7469
7470 @item
7471 The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}},
7472 is supported (@pxref{Shell Parameter Expansion}).
7473
7474 @item
7475 The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}},
7476 which expands to the substring of @code{var}'s value of length
7477 @var{length}, beginning at @var{offset}, is present
7478 (@pxref{Shell Parameter Expansion}).
7479
7480 @item
7481 The expansion
7482 @code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
7483 which matches @var{pattern} and replaces it with @var{replacement} in
7484 the value of @code{var}, is available (@pxref{Shell Parameter Expansion}).
7485
7486 @item
7487 The expansion @code{$@{!@var{prefix@}*}} expansion, which expands to
7488 the names of all shell variables whose names begin with @var{prefix},
7489 is available (@pxref{Shell Parameter Expansion}).
7490
7491 @item
7492 Bash has @var{indirect} variable expansion using @code{$@{!word@}}
7493 (@pxref{Shell Parameter Expansion}).
7494
7495 @item
7496 Bash can expand positional parameters beyond @code{$9} using
7497 @code{$@{@var{num}@}}.
7498
7499 @item
7500 The @sc{posix} @code{$()} form of command substitution
7501 is implemented (@pxref{Command Substitution}),
7502 and preferred to the Bourne shell's @code{``} (which
7503 is also implemented for backwards compatibility).
7504
7505 @item
7506 Bash has process substitution (@pxref{Process Substitution}).
7507
7508 @item
7509 Bash automatically assigns variables that provide information about the
7510 current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host
7511 (@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}),
7512 and the instance of Bash that is running (@env{BASH},
7513 @env{BASH_VERSION}, and @env{BASH_VERSINFO}).  @xref{Bash Variables},
7514 for details.
7515
7516 @item
7517 The @env{IFS} variable is used to split only the results of expansion,
7518 not all words (@pxref{Word Splitting}).
7519 This closes a longstanding shell security hole.
7520
7521 @item
7522 Bash implements the full set of @sc{posix} filename expansion operators,
7523 including @var{character classes}, @var{equivalence classes}, and
7524 @var{collating symbols} (@pxref{Filename Expansion}).
7525
7526 @item
7527 Bash implements extended pattern matching features when the @code{extglob}
7528 shell option is enabled (@pxref{Pattern Matching}).
7529
7530 @item
7531 It is possible to have a variable and a function with the same name;
7532 @code{sh} does not separate the two name spaces.
7533
7534 @item
7535 Bash functions are permitted to have local variables using the
7536 @code{local} builtin, and thus useful recursive functions may be written
7537 (@pxref{Bash Builtins}).
7538
7539 @item
7540 Variable assignments preceding commands affect only that command, even
7541 builtins and functions (@pxref{Environment}).
7542 In @code{sh}, all variable assignments 
7543 preceding commands are global unless the command is executed from the
7544 file system.
7545
7546 @item
7547 Bash performs filename expansion on filenames specified as operands
7548 to input and output redirection operators (@pxref{Redirections}).
7549
7550 @item
7551 Bash contains the @samp{<>} redirection operator, allowing a file to be
7552 opened for both reading and writing, and the @samp{&>} redirection
7553 operator, for directing standard output and standard error to the same
7554 file (@pxref{Redirections}).
7555
7556 @item
7557 Bash includes the @samp{<<<} redirection operator, allowing a string to
7558 be used as the standard input to a command.
7559
7560 @item
7561 Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}}
7562 redirection operators, which move one file descriptor to another.
7563
7564 @item
7565 Bash treats a number of filenames specially when they are
7566 used in redirection operators (@pxref{Redirections}).
7567
7568 @item
7569 Bash can open network connections to arbitrary machines and services
7570 with the redirection operators (@pxref{Redirections}).
7571
7572 @item
7573 The @code{noclobber} option is available to avoid overwriting existing
7574 files with output redirection (@pxref{The Set Builtin}).
7575 The @samp{>|} redirection operator may be used to override @code{noclobber}.
7576
7577 @item
7578 The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins})
7579 each take @option{-L} and @option{-P} options to switch between logical and
7580 physical modes.
7581
7582 @item
7583 Bash allows a function to override a builtin with the same name, and provides
7584 access to that builtin's functionality within the function via the
7585 @code{builtin} and @code{command} builtins (@pxref{Bash Builtins}).
7586
7587 @item
7588 The @code{command} builtin allows selective disabling of functions
7589 when command lookup is performed (@pxref{Bash Builtins}).
7590
7591 @item
7592 Individual builtins may be enabled or disabled using the @code{enable}
7593 builtin (@pxref{Bash Builtins}).
7594
7595 @item
7596 The Bash @code{exec} builtin takes additional options that allow users
7597 to control the contents of the environment passed to the executed
7598 command, and what the zeroth argument to the command is to be
7599 (@pxref{Bourne Shell Builtins}).
7600
7601 @item
7602 Shell functions may be exported to children via the environment
7603 using @code{export -f} (@pxref{Shell Functions}).
7604
7605 @item
7606 The Bash @code{export}, @code{readonly}, and @code{declare} builtins can
7607 take a @option{-f} option to act on shell functions, a @option{-p} option to
7608 display variables with various attributes set in a format that can be
7609 used as shell input, a @option{-n} option to remove various variable
7610 attributes, and @samp{name=value} arguments to set variable attributes
7611 and values simultaneously.
7612
7613 @item
7614 The Bash @code{hash} builtin allows a name to be associated with
7615 an arbitrary filename, even when that filename cannot be found by
7616 searching the @env{$PATH}, using @samp{hash -p}
7617 (@pxref{Bourne Shell Builtins}).
7618
7619 @item
7620 Bash includes a @code{help} builtin for quick reference to shell
7621 facilities (@pxref{Bash Builtins}).
7622
7623 @item
7624 The @code{printf} builtin is available to display formatted output
7625 (@pxref{Bash Builtins}).
7626
7627 @item
7628 The Bash @code{read} builtin (@pxref{Bash Builtins})
7629 will read a line ending in @samp{\} with
7630 the @option{-r} option, and will use the @env{REPLY} variable as a
7631 default if no non-option arguments are supplied.
7632 The Bash @code{read} builtin
7633 also accepts a prompt string with the @option{-p} option and will use
7634 Readline to obtain the line when given the @option{-e} option.
7635 The @code{read} builtin also has additional options to control input:
7636 the @option{-s} option will turn off echoing of input characters as
7637 they are read, the @option{-t} option will allow @code{read} to time out
7638 if input does not arrive within a specified number of seconds, the
7639 @option{-n} option will allow reading only a specified number of
7640 characters rather than a full line, and the @option{-d} option will read
7641 until a particular character rather than newline.
7642
7643 @item
7644 The @code{return} builtin may be used to abort execution of scripts
7645 executed with the @code{.} or @code{source} builtins
7646 (@pxref{Bourne Shell Builtins}).
7647
7648 @item
7649 Bash includes the @code{shopt} builtin, for finer control of shell
7650 optional capabilities (@pxref{The Shopt Builtin}), and allows these options
7651 to be set and unset at shell invocation (@pxref{Invoking Bash}).
7652
7653 @item
7654 Bash has much more optional behavior controllable with the @code{set}
7655 builtin (@pxref{The Set Builtin}).
7656
7657 @item
7658 The @samp{-x} (@code{xtrace}) option displays commands other than
7659 simple commands when performing an execution trace
7660 (@pxref{The Set Builtin}).
7661
7662 @item
7663 The @code{test} builtin (@pxref{Bourne Shell Builtins})
7664 is slightly different, as it implements the @sc{posix} algorithm,
7665 which specifies the behavior based on the number of arguments.
7666
7667 @item
7668 Bash includes the @code{caller} builtin, which displays the context of
7669 any active subroutine call (a shell function or a script executed with
7670 the @code{.} or @code{source} builtins).  This supports the bash
7671 debugger.
7672
7673 @item
7674 The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
7675 @code{DEBUG} pseudo-signal specification, similar to @code{EXIT}.
7676 Commands specified with a @code{DEBUG} trap are executed before every
7677 simple command, @code{for} command, @code{case} command,
7678 @code{select} command, every arithmetic @code{for} command, and before
7679 the first command executes in a shell function.
7680 The @code{DEBUG} trap is not inherited by shell functions unless the
7681 function has been given the @code{trace} attribute or the
7682 @code{functrace} option has been enabled using the @code{shopt} builtin.
7683 The @code{extdebug} shell option has additional effects on the
7684 @code{DEBUG} trap.
7685
7686 The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an
7687 @code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}.
7688 Commands specified with an @code{ERR} trap are executed after a simple
7689 command fails, with a few exceptions.
7690 The @code{ERR} trap is not inherited by shell functions unless the
7691 @code{-o errtrace} option to the @code{set} builtin is enabled.
7692
7693 The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
7694 @code{RETURN} pseudo-signal specification, similar to
7695 @code{EXIT} and @code{DEBUG}.
7696 Commands specified with an @code{RETURN} trap are executed before
7697 execution resumes after a shell function or a shell script executed with
7698 @code{.} or @code{source} returns.
7699 The @code{RETURN} trap is not inherited by shell functions unless the
7700 function has been given the @code{trace} attribute or the
7701 @code{functrace} option has been enabled using the @code{shopt} builtin.
7702
7703 @item
7704 The Bash @code{type} builtin is more extensive and gives more information
7705 about the names it finds (@pxref{Bash Builtins}).
7706
7707 @item
7708 The Bash @code{umask} builtin permits a @option{-p} option to cause
7709 the output to be displayed in the form of a @code{umask} command
7710 that may be reused as input (@pxref{Bourne Shell Builtins}).
7711
7712 @item
7713 Bash implements a @code{csh}-like directory stack, and provides the
7714 @code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it
7715 (@pxref{The Directory Stack}).
7716 Bash also makes the directory stack visible as the value of the
7717 @env{DIRSTACK} shell variable.
7718
7719 @item
7720 Bash interprets special backslash-escaped characters in the prompt
7721 strings when interactive (@pxref{Printing a Prompt}).
7722
7723 @item
7724 The Bash restricted mode is more useful (@pxref{The Restricted Shell});
7725 the SVR4.2 shell restricted mode is too limited.
7726
7727 @item
7728 The @code{disown} builtin can remove a job from the internal shell
7729 job table (@pxref{Job Control Builtins}) or suppress the sending
7730 of @code{SIGHUP} to a job when the shell exits as the result of a
7731 @code{SIGHUP}.
7732
7733 @item
7734 Bash includes a number of features to support a separate debugger for
7735 shell scripts.
7736
7737 @item
7738 The SVR4.2 shell has two privilege-related builtins
7739 (@code{mldmode} and @code{priv}) not present in Bash.
7740
7741 @item
7742 Bash does not have the @code{stop} or @code{newgrp} builtins.
7743
7744 @item
7745 Bash does not use the @env{SHACCT} variable or perform shell accounting.
7746
7747 @item
7748 The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses
7749 @env{TMOUT}.
7750
7751 @end itemize
7752
7753 @noindent
7754 More features unique to Bash may be found in @ref{Bash Features}.
7755
7756
7757 @appendixsec Implementation Differences From The SVR4.2 Shell
7758
7759 Since Bash is a completely new implementation, it does not suffer from
7760 many of the limitations of the SVR4.2 shell.  For instance:
7761
7762 @itemize @bullet
7763
7764 @item
7765 Bash does not fork a subshell when redirecting into or out of
7766 a shell control structure such as  an @code{if} or @code{while}
7767 statement.
7768
7769 @item
7770 Bash does not allow unbalanced quotes.  The SVR4.2 shell will silently
7771 insert a needed closing quote at @code{EOF} under certain circumstances.
7772 This can be the cause of some hard-to-find errors.
7773
7774 @item
7775 The SVR4.2 shell uses a baroque memory management scheme based on
7776 trapping @code{SIGSEGV}.  If the shell is started from a process with
7777 @code{SIGSEGV} blocked (e.g., by using the @code{system()} C library
7778 function call), it misbehaves badly.
7779
7780 @item
7781 In a questionable attempt at security, the SVR4.2 shell,
7782 when invoked without the @option{-p} option, will alter its real
7783 and effective @sc{uid} and @sc{gid} if they are less than some
7784 magic threshold value, commonly 100.
7785 This can lead to unexpected results.
7786
7787 @item
7788 The SVR4.2 shell does not allow users to trap @code{SIGSEGV},
7789 @code{SIGALRM}, or @code{SIGCHLD}.
7790
7791 @item
7792 The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK},
7793 @env{PATH}, @env{PS1}, or @env{PS2} variables to be unset.
7794
7795 @item
7796 The SVR4.2 shell treats @samp{^} as the undocumented equivalent of
7797 @samp{|}.
7798
7799 @item
7800 Bash allows multiple option arguments when it is invoked (@code{-x -v});
7801 the SVR4.2 shell allows only one option argument (@code{-xv}).  In
7802 fact, some versions of the shell dump core if the second argument begins
7803 with a @samp{-}.
7804
7805 @item
7806 The SVR4.2 shell exits a script if any builtin fails; Bash exits
7807 a script only if one of the @sc{posix} special builtins fails, and
7808 only for certain failures, as enumerated in the @sc{posix} standard.
7809
7810 @item 
7811 The SVR4.2 shell behaves differently when invoked as @code{jsh}
7812 (it turns on job control).
7813 @end itemize
7814
7815 @node GNU Free Documentation License
7816 @appendix GNU Free Documentation License
7817
7818 @include fdl.texi
7819
7820 @node Indexes
7821 @appendix Indexes
7822
7823 @menu
7824 * Builtin Index::               Index of Bash builtin commands.
7825 * Reserved Word Index::         Index of Bash reserved words.
7826 * Variable Index::              Quick reference helps you find the
7827                                 variable you want.
7828 * Function Index::              Index of bindable Readline functions.
7829 * Concept Index::               General index for concepts described in
7830                                 this manual.
7831 @end menu
7832
7833 @node Builtin Index
7834 @appendixsec Index of Shell Builtin Commands
7835 @printindex bt
7836
7837 @node Reserved Word Index
7838 @appendixsec Index of Shell Reserved Words
7839 @printindex rw
7840
7841 @node Variable Index
7842 @appendixsec Parameter and Variable Index
7843 @printindex vr
7844
7845 @node Function Index
7846 @appendixsec Function Index
7847 @printindex fn
7848
7849 @node Concept Index
7850 @appendixsec Concept Index
7851 @printindex cp
7852
7853 @bye