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