]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
bash-4.2 stray file cleanup
authorChet Ramey <chet.ramey@case.edu>
Tue, 13 Dec 2011 03:36:21 +0000 (22:36 -0500)
committerChet Ramey <chet.ramey@case.edu>
Tue, 13 Dec 2011 03:36:21 +0000 (22:36 -0500)
13 files changed:
CHANGES-4.0-beta2 [deleted file]
CHANGES-4.1 [deleted file]
COPYING.v2 [deleted file]
NEWS-3.0 [deleted file]
NEWS-4.0 [deleted file]
NEWS-4.1 [deleted file]
ddd1 [deleted file]
doc/b.html [deleted file]
fdprintf.c [deleted file]
lib/readline/copyright-comment [deleted file]
lib/readline/copyright-history [deleted file]
parse.y.yacc [deleted file]
tests/run-histexpand.debug [deleted file]

diff --git a/CHANGES-4.0-beta2 b/CHANGES-4.0-beta2
deleted file mode 100644 (file)
index d5dfa73..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-This document details the changes between this version, bash-4.0-beta2,
-and the previous version, bash-4.0-alpha.
-
-1.  Changes to Bash
-
-a.  Fixed a bug that caused failed word expansions to set $? but not
-    PIPESTATUS.
-
-b.  Changed filename completion to quote the tilde in a filename with a
-    leading tilde that exists in the current directory.
-
-c.  Fixed a bug that caused a file descriptor leak when performing
-    redirections attached to a compound command.
-
-d.  Fixed a bug that caused expansions of $@ and $* to not exit the shell if
-    the -u option was enabled and there were no posititional parameters.
-
-e.  Fixed a bug that resulted in bash not terminating immediately if a
-    terminating signal was received while performing output.
-
-f.  Fixed a bug that caused the shell to crash after creating 256 process
-    substitutions during word completion.
-
-2.  Changes to Readline
-
-a.  Fixed a bug that caused redisplay errors when using prompts with invisible
-    characters and numeric arguments to a command in a multibyte locale.
-
-b.  Fixed a bug that caused redisplay errors when using prompts with invisible
-    characters spanning more than two physical screen lines.
-
-------------------------------------------------------------------------------
diff --git a/CHANGES-4.1 b/CHANGES-4.1
deleted file mode 100644 (file)
index 1df7758..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-This document details the changes between this version, bash-4.1-alpha,
-and the previous version, bash-4.0-release.
-
-1.  Changes to Bash
-
-a.  Fixed bugs in the parser involving new parsing of the commands contained
-    in command substitution when the substitution is read.
-
-b.  Fixed a bug that caused the shell to dump core when performing programmable
-    completion using a shell function.
-
-c.  Fixed a bug in `mapfile' that caused it to invoke callbacks at the wrong
-    time.
-
-d.  Fixed a bug that caused the shell to dump core when listing jobs in the
-    `exit' builtin.
-
-e.  Fixed several bugs encountered when reading subscripts in associative
-    array assignments and expansions.
-
-f.  Fixed a bug that under some circumstances caused an associative array to
-    be converted to an indexed array.
-
-g.  Fixed a bug that caused syntax errors and SIGINT interrupts to not set
-    $? to a value > 128.
-
-h.  Fixed a bug that caused the shell to remove FIFOs associated with process
-    substitution inside shell functions.
-
-i.  Fixed a bug that caused terminal attributes to not be reset when the
-    `read' builtin timed out.
-
-j.  Fixed a bug in brace expansion that caused unwanted zero padding of the
-    expanded terms.
-
-k.  Fixed a bug that prevented the |& construct from working as intended when
-    used with a simple command with additional redirections.
-
-l.  Fixed a bug with the case statment ;& terminator that caused the shell to
-    dereference a NULL pointer.
-
-m.  Fixed a bug that caused assignment statements or redirections preceding
-    a simple command name to inhibit alias expansion.
-
-n.  Fixed the behavior of `set -u' to conform to the latest Posix interpretation:
-    every expansion of an unset variable except $@ and $* will cause the
-    shell to exit.
-
-o.  Fixed a bug that caused double-quoted expansions of $* inside word
-    expansions like ${x#$*} to not expand properly when $IFS is empty.
-
-p.  Fixed a bug that caused traps to set $LINENO to the wrong value when they
-    execute.
-
-q.  Fixed a bug that caused off-by-one errors when computing history lines in
-    the `fc' builtin.
-
-r.  Fixed a bug that caused some terminating signals to not exit the shell
-    quickly enough, forcing the kernel to send the signal (e.g., SIGSEGV)
-    multiple times.
-
-s.  Fixed a bug that caused the shell to attempt to add empty lines to the
-    history list when reading here documents.
-
-t.  Made some internal changes that dramatically speeds up sequential indexed
-    array access.
-
-u.  Fixed a bug that caused the shell to write past the end of a string when
-    completing a double-quoted string ending in a backslash.
-
-v.  Fixed a bug that caused the shell to replace too many characters when a
-    pattern match was null in a ${foo//bar} expansion.
-
-w.  Fixed bugs in the expansion of ** that caused duplicate directory names
-    and the contents of the current directory to be omitted.
-
-x.  Fixed a bug that caused $? to not be set correctly when referencing an
-    unset variable with set -u and set -e enabled.
-
-y.  Fixed a bug caused by executing an external program from the DEBUG trap
-    while a pipeline was running.  The effect was to disturb the pipeline
-    state, occasionally causing it to hang.
-
-z.  Fixed a bug that caused the ** glob expansion to dump core if it
-    encountered an unsearchable directory.
-
-aa. Fixed a bug that caused `command -v' and `command -V' to not honor the
-    path set by the -p option.
-
-bb. Fixed a bug that caused brace expansion to take place too soon in some
-    compound array assignments.
-
-cc. Fixed a bug that caused programmable completion functions' changes to
-    READLINE_POINT to not be reflected back to readline.
-
-dd. Fixed a bug that caused the shell to dump core if a trap was executed
-    during a shell assignment statement.
-
-ee. Fixed an off-by-one error when computing the number of positional
-    parameters for the ${@:0:n} expansion.
-
-ff. Fixed a problem with setting COMP_CWORD for programmable completion
-    functions that could leave it set to -1.
-
-gg. Fixed a bug that caused the ERR trap to be triggered in some cases where
-    `set -e' would not have caused the shell to exit.
-
-hh. Fixed a bug that caused changes made by `compopt' to not persist past the
-    completion function in which compopt was executed.
-
-ii. Fixed a bug that caused the list of hostname completions to not be cleared
-    when HOSTNAME was unset.
-
-jj. Fixed a bug that caused variable expansion in here documents to look in
-    any temporary environment.
-
-kk. Bash and readline can now convert file names between precomposed and
-    decomposed Unicode on Mac OS X ("keyboard" and file system forms,
-    respectively).  This affects filename completion (using new
-    rl_filename_rewrite_hook), globbing, and readline redisplay.
-
-ll. The ERR and EXIT traps now see a non-zero value for $? when a parser
-    error after set -e has been enabled causes the shell to exit.
-
-mm. Fixed a bug that in brace expansion that caused zero-prefixed terms to
-    not contain the correct number of digits.
-
-nn. Fixed a bug that caused the shell to free non-allocated memory when
-    unsetting an associative array which had had a value implicitly assigned
-    to index "0".
-
-oo. Fixed a memory leak in the ${!prefix@} expansion.
-
-pp. Fixed a bug that caused printf to not correctly report all write errors.
-
-qq. Fixed a bug that caused single and double quotes to act as delimiters
-    when splitting a command line into words for programmable completion.
-
-rr. Fixed a bug that caused ** globbing that caused **/path/* to match every
-    directory, not just those matching `path'.
-
-ss. Fixed a bug that caused the shell to dump core when running `help' without
-    arguments if the terminal width was fewer than 7 characters.
-
-2.  Changes to Readline
-
-a.  The SIGWINCH signal handler now avoids calling the redisplay code if
-    one arrives while in the middle of redisplay.
-
-b.  Changes to the timeout code to make sure that timeout values greater
-    than one second are handled better.
-
-c.  Fixed a bug in the redisplay code that was triggered by a prompt
-    containing invisible characters exactly the width of the screen.
-
-d.  Fixed a bug in the redisplay code encountered when running in horizontal
-    scroll mode.
-
-e.  Fixed a bug that prevented menu completion from properly completing
-    filenames.
-
-f.  Fixed a redisplay bug caused by a multibyte character causing a line to
-    wrap.
-
-g.  Fixed a bug that caused key sequences of two characters to not be
-    recognized when a longer sequence identical in the first two characters
-    was bound.
-
-h.  Fixed a bug that caused history expansion to be attempted on $'...'
-    single-quoted strings.
-
-i.  Fixed a bug that caused incorrect redisplay when the prompt contained
-    multibyte characters in an `invisible' sequence bracketed by \[ and
-    \].
-
-j.  Fixed a bug that caused history expansion to short-circuit after
-    encountering a multibyte character.
-
-3.  New Features in Bash
-
-a.  Here-documents within $(...) command substitutions may once more be
-    delimited by the closing right paren, instead of requiring a newline.
-
-b.  Bash's file status checks (executable, readable, etc.) now take file
-    system ACLs into account on file systems that support them.
-
-c.  Bash now passes environment variables with names that are not valid
-    shell variable names through into the environment passed to child
-    processes.
-
-d.  The `execute-unix-command' readline function now attempts to clear and
-    reuse the current line rather than move to a new one after the command
-    executes.
-
-e.  `printf -v' can now assign values to array indices.
-
-f.  New `complete -E' and `compopt -E' options that work on the "empty"
-    completion: completion attempted on an empty command line.
-
-g.  New complete/compgen/compopt -D option to define a `default' completion:
-    a completion to be invoked on command for which no completion has been
-    defined.  If this function returns 124, programmable completion is
-    attempted again, allowing a user to dynamically build a set of completions
-    as completion is attempted by having the default completion function
-    install individual completion functions each time it is invoked.
-
-h.  When displaying associative arrays, subscripts are now quoted.
-
-i.  Changes to dabbrev-expand to make it more `emacs-like': no space appended
-    after matches, completions are not sorted, and most recent history entries
-    are presented first.
-
-j.  The [[ and (( commands are now subject to the setting of `set -e' and the
-    ERR trap.
-
-k.  The source/. builtin now removes NUL bytes from the file before attempting
-    to parse commands.
-
-l.  There is a new configuration option (in config-top.h) that forces bash to
-    forward all history entries to syslog.
-
-m.  A new variable $BASHOPTS to export shell options settable using `shopt' to
-    child processes.
-
-n.  There is a new confgure option that forces the extglob option to be
-    enabled by default.
-
-o.  New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
-    output to that file descriptor.
-
-p.  If the optional left-hand-side of a redirection is of the form {var}, the
-    shell assigns the file descriptor used to $var or uses $var as the file
-    descriptor to move or close, depending on the redirection operator.
-
-q.  The < and > operators to the [[ conditional command now do string
-    comparison according to the current locale.
-
-r.  Programmable completion now uses the completion for `b' instead of `a'
-    when completion is attempted on a line like: a $(b c.
-
-s.  Force extglob on temporarily when parsing the pattern argument to
-    the == and != operators to the [[ command, for compatibility.
-
-t.  Changed the behavior of interrupting the wait builtin when a SIGCHLD is
-    received and a trap on SIGCHLD is set to be Posix-mode only.
-
-u.  The read builtin has a new `-N nchars' option, which reads exactly NCHARS
-    characters, ignoring delimiters like newline.
-
-4.  New Features in Readline
-
-a.  New bindable function: menu-complete-backward.
-
-b.  In the vi insertion keymap, C-n is now bound to menu-complete by default,
-    and C-p to menu-complete-backward.
-
-c.  When in vi command mode, repeatedly hitting ESC now does nothing, even
-    when ESC introduces a bound key sequence.  This is closer to how
-    historical vi behaves.
-
-d.  New bindable function: skip-csi-sequence.  Can be used as a default to
-    consume key sequences generated by keys like Home and End without having
-    to bind all keys.
-
-e.  New application-settable function: rl_filename_rewrite_hook.  Can be used
-    to rewite or modify filenames read from the file system before they are
-    compared to the word to be completed.
-
-f.  New bindable variable: skip-completed-text, active when completing in the
-    middle of a word.  If enabled, it means that characters in the completion
-    that match characters in the remainder of the word are "skipped" rather
-    than inserted into the line.
-
-g.  The pre-readline-6.0 version of menu completion is available as
-    "old-menu-complete" for users who do not like the readline-6.0 version.
-
-h.  New bindable variable: echo-control-characters.  If enabled, and the
-    tty ECHOCTL bit is set, controls the echoing of characters corresponding
-    to keyboard-generated signals.
-
-i.  New bindable variable: enable-meta-key.  Controls whether or not readline
-    sends the smm/rmm sequences if the terminal indicates it has a meta key
-    that enables eight-bit characters.
diff --git a/COPYING.v2 b/COPYING.v2
deleted file mode 100644 (file)
index 2b940a4..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-The Free Software Foundation has exempted Bash from the requirement of
-Paragraph 2c of the General Public License.  This is to say, there is
-no requirement for Bash to print a notice when it is started
-interactively in the usual way.  We made this exception because users
-and standards expect shells not to print such messages.  This
-exception applies to any program that serves as a shell and that is
-based primarily on Bash as opposed to other GNU software.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-       Appendix: How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/NEWS-3.0 b/NEWS-3.0
deleted file mode 100644 (file)
index 46a5073..0000000
--- a/NEWS-3.0
+++ /dev/null
@@ -1,196 +0,0 @@
-This is a terse description of the new features added to bash-3.0 since
-the release of bash-2.05b.  As always, the manual page (doc/bash.1) is
-the place to look for complete descriptions.
-
-1.  New Features in Bash
-
-a.  ANSI string expansion now implements the \x{hexdigits} escape.
-
-b.  There is a new loadable `strftime' builtin.
-
-c.  New variable, COMP_WORDBREAKS, which controls the readline completer's
-    idea of word break characters.
-
-d.  The `type' builtin no longer reports on aliases unless alias expansion
-    will actually be performed.    
-
-e.  HISTCONTROL is now a colon-separated list of values, which permits
-    more extensibility and backwards compatibility.
-
-f.  HISTCONTROL may now include the `erasedups' option, which causes all lines
-    matching a line being added to be removed from the history list.
-
-g.  `configure' has a new `--enable-multibyte' argument that permits multibyte
-    character support to be disabled even on systems that support it.
-
-h.  New variables to support the bash debugger:  BASH_ARGC, BASH_ARGV,
-    BASH_SOURCE, BASH_LINENO, BASH_SUBSHELL, BASH_EXECUTION_STRING,
-    BASH_COMMAND
-
-i.  FUNCNAME has been changed to support the debugger: it's now an array
-    variable.
-
-j.  for, case, select, arithmetic commands now keep line number information
-    for the debugger.
-
-k.  There is a new `RETURN' trap executed when a function or sourced script
-    returns (not inherited child processes; inherited by command substitution
-    if function tracing is enabled and the debugger is active).
-
-l.  New invocation option:  --debugger.  Enables debugging and turns on new
-    `extdebug' shell option.
-
-m.  New `functrace' and `errtrace' options to `set -o' cause DEBUG and ERR
-    traps, respectively, to be inherited by shell functions.  Equivalent to
-    `set -T' and `set -E' respectively.  The `functrace' option also controls
-    whether or not the DEBUG trap is inherited by sourced scripts.
-
-n.  The DEBUG trap is run before binding the variable and running the action
-    list in a `for' command, binding the selection variable and running the
-    query in a `select' command, and before attempting a match in a `case'
-    command.
-
-o.  New `--enable-debugger' option to `configure' to compile in the debugger
-    support code.
-
-p.  `declare -F' now prints out extra line number and source file information
-    if the `extdebug' option is set.
-
-q.  If `extdebug' is enabled, a non-zero return value from a DEBUG trap causes
-    the next command to be skipped, and a return value of 2 while in a
-    function or sourced script forces a `return'.
-
-r.  New `caller' builtin to provide a call stack for the bash debugger.
-
-s.  The DEBUG trap is run just before the first command in a function body is
-    executed, for the debugger.
-
-t.  `for', `select', and `case' command heads are printed when `set -x' is
-    enabled.
-
-u.  There is a new {x..y} brace expansion, which is shorthand for {x.x+1,
-    x+2,...,y}.  x and y can be integers or single characters; the sequence
-    may ascend or descend; the increment is always 1.
-
-v.  New ksh93-like ${!array[@]} expansion, expands to all the keys (indices)
-    of array.
-
-w.  New `force_fignore' shopt option; if enabled, suffixes specified by
-    FIGNORE cause words to be ignored when performing word completion even
-    if they're the only possibilities.
-
-x.  New `gnu_errfmt' shopt option; if enabled, error messages follow the `gnu
-    style' (filename:lineno:message) format.
-
-y.  New `-o bashdefault' option to complete and compgen; if set, causes the
-    whole set of bash completions to be performed if the compspec doesn't
-    result in a match.
-
-z.  New `-o plusdirs' option to complete and compgen; if set, causes directory
-    name completion to be performed and the results added to the rest of the
-    possible completions.
-
-aa. `kill' is available as a builtin even when the shell is built without
-    job control.
-
-bb. New HISTTIMEFORMAT variable; value is a format string to pass to
-    strftime(3).  If set and not null, the `history' builtin prints out
-    timestamp information according to the specified format when displaying
-    history entries.  If set, bash tells the history library to write out
-    timestamp information when the history file is written.
-
-cc. The [[ ... ]] command has a new binary `=~' operator that performs
-    extended regular expression (egrep-like) matching.
-
-dd. `configure' has a new `--enable-cond-regexp' option (enabled by default)
-    to enable the =~ operator and regexp matching in [[ ... ]].
-
-ee. Subexpressions matched by the =~ operator are placed in the new
-    BASH_REMATCH array variable.
-
-ff. New `failglob' option that causes an expansion error when pathname
-    expansion fails to produce a match.
-
-gg. New `set -o pipefail' option that causes a pipeline to return a failure
-    status if any of the processes in the pipeline fail, not just the last
-    one.
-
-hh. printf builtin understands two new escape sequences:  \" and \?.
-
-ii. `echo -e' understands two new escape sequences:  \" and \?.
-
-jj. The GNU `gettext' package and libintl have been integrated; the shell's
-    messages can be translated into different languages.
-
-kk. The `\W' prompt expansion now abbreviates $HOME as `~', like `\w'.
-
-ll. The error message printed when bash cannot open a shell script supplied
-    as argument 1 now includes the name of the shell, to better identify
-    the error as coming from bash.
-
-mm. A bug that caused here documents to not work if the directory the shell
-    used for the temporary files was not writable has been fixed.
-
-nn. The parameter pattern removal and substitution expansions are now much
-    faster and more efficient when using multibyte characters.
-
-oo. Fixed a bug in the `shift' builtin that could cause core dumps when
-    reporting an out-of-range argument.
-
-pp. The `jobs', `kill', and `wait' builtins now accept job control notation
-    even if job control is not enabled.
-
-qq. The historical behavior of `trap' that allows a missing `action' argument
-    to cause each specified signal's handling to be reset to its default is
-    now only supported when `trap' is given a single non-option argument.
-
-2.  New Features in Readline
-
-a.  History expansion has a new `a' modifier equivalent to the `g' modifier
-    for compatibility with the BSD csh.
-
-b.  History expansion has a new `G' modifier equivalent to the BSD csh `g'
-    modifier, which performs a substitution once per word.
-
-c.  All non-incremental search operations may now undo the operation of
-    replacing the current line with the history line.
-
-d.  The text inserted by an `a' command in vi mode can be reinserted with
-    `.'.
-
-e.  New bindable variable, `show-all-if-unmodified'.  If set, the readline
-    completer will list possible completions immediately if there is more
-    than one completion and partial completion cannot be performed.
-
-f.  There is a new application-callable `free_history_entry()' function.
-
-g.  History list entries now contain timestamp information; the history file
-    functions know how to read and write timestamp information associated
-    with each entry.
-
-h.  Four new key binding functions have been added:
-
-       rl_bind_key_if_unbound()
-       rl_bind_key_if_unbound_in_map()
-       rl_bind_keyseq_if_unbound()
-       rl_bind_keyseq_if_unbound_in_map()
-
-i.  New application variable, rl_completion_quote_character, set to any
-    quote character readline finds before it calls the application completion
-    function.
-
-j.  New application variable, rl_completion_suppress_quote, settable by an
-    application completion function.  If set to non-zero, readline does not
-    attempt to append a closing quote to a completed word.
-
-k.  New application variable, rl_completion_found_quote, set to a non-zero
-    value if readline determines that the word to be completed is quoted.
-    Set before readline calls any application completion function.
-
-l.  New function hook, rl_completion_word_break_hook, called when readline
-    needs to break a line into words when completion is attempted.  Allows
-    the word break characters to vary based on position in the line.
-
-m.  New bindable command: unix-filename-rubout.  Does the same thing as
-    unix-word-rubout, but adds `/' to the set of word delimiters.
-
diff --git a/NEWS-4.0 b/NEWS-4.0
deleted file mode 100644 (file)
index bbde634..0000000
--- a/NEWS-4.0
+++ /dev/null
@@ -1,138 +0,0 @@
-o   When using substring expansion on the positional parameters, a starting
-    index of 0 now causes $0 to be prefixed to the list.
-
-o   There is a new variable, $BASHPID, which always returns the process id of
-    the current shell.
-
-o   There is a new `autocd' option that, when enabled, causes bash to attempt
-    to `cd' to a directory name that is supplied as the first word of a
-    simple command.
-
-o   There is a new `checkjobs' option that causes the shell to check for and
-    report any running or stopped jobs at exit.
-
-o   The programmable completion code exports a new COMP_TYPE variable, set to
-    a character describing the type of completion being attempted.
-
-o   The programmable completion code exports a new COMP_KEY variable, set to
-    the character that caused the completion to be invoked (e.g., TAB).
-
-o   The programmable completion code now uses the same set of characters as
-    readline when breaking the command line into a list of words.
-
-o   The block multiplier for the ulimit -c and -f options is now 512 when in
-    Posix mode, as Posix specifies.
-
-o   Changed the behavior of the read builtin to save any partial input received
-    in the specified variable when the read builtin times out.  This also
-    results in variables specified as arguments to read to be set to the empty
-    string when there is no input available.  When the read builtin times out,
-    it returns an exit status greater than 128.
-
-o   The shell now has the notion of a `compatibility level', controlled by
-    new variables settable by `shopt'.  Setting this variable currently
-    restores the bash-3.1 behavior when processing quoted strings on the rhs
-    of the `=~' operator to the `[[' command.
-
-o   The `ulimit' builtin now has new -b (socket buffer size) and -T (number
-    of threads) options.
-
-o   There is a new `compopt' builtin that allows completion functions to modify
-    completion options for existing completions or the completion currently
-    being executed.
-
-o   The `read' builtin has a new -i option which inserts text into the reply
-    buffer when using readline.
-
-o   A new `-E' option to the complete builtin allows control of the default
-    behavior for completion on an empty line.
-
-o   There is now limited support for completing command name words containing
-    globbing characters.
-
-o   The `help' builtin now has a new -d option, to display a short description,
-    and a -m option, to print help information in a man page-like format.
-
-o   There is a new `mapfile' builtin to populate an array with lines from a
-    given file.
-
-o   If a command is not found, the shell attempts to execute a shell function
-    named `command_not_found_handle', supplying the command words as the
-    function arguments.
-
-o   There is a new shell option: `globstar'.  When enabled, the globbing code
-    treats `**' specially -- it matches all directories (and files within
-    them, when appropriate) recursively.
-
-o   There is a new shell option: `dirspell'.  When enabled, the filename
-    completion code performs spelling correction on directory names during
-    completion.
-
-o   The `-t' option to the `read' builtin now supports fractional timeout
-    values.
-
-o   Brace expansion now allows zero-padding of expanded numeric values and
-    will add the proper number of zeroes to make sure all values contain the
-    same number of digits.
-
-o   There is a new bash-specific bindable readline function: `dabbrev-expand'.
-    It uses menu completion on a set of words taken from the history list.
-
-o   The command assigned to a key sequence with `bind -x' now sets two new
-    variables in the environment of the executed command:  READLINE_LINE_BUFFER
-    and READLINE_POINT.  The command can change the current readline line
-    and cursor position by modifying READLINE_LINE_BUFFER and READLINE_POINT,
-    respectively.
-
-o   There is a new >>& redirection operator, which appends the standard output
-    and standard error to the named file.
-
-o   The parser now understands `|&' as a synonym for `2>&1 |', which redirects
-    the standard error for a command through a pipe.
-
-o   The new `;&' case statement action list terminator causes execution to
-    continue with the action associated with the next pattern in the
-    statement rather than terminating the command.
-
-o   The new `;;&' case statement action list terminator causes the shell to
-    test the next set of patterns after completing execution of the current
-    action, rather than terminating the command.
-
-o   The shell understands a new variable: PROMPT_DIRTRIM.  When set to an
-    integer value greater than zero, prompt expansion of \w and \W  will
-    retain only that number of trailing pathname components and replace
-    the intervening characters with `...'.
-
-o   There are new case-modifying word expansions: uppercase (^[^]) and
-    lowercase (,[,]).  They can work on either the first character or
-    array element, or globally.  They accept an optional shell pattern
-    that determines which characters to modify.  There is an optionally-
-    configured feature to include capitalization operators.
-
-o   The shell provides associative array variables, with the appropriate
-    support to create, delete, assign values to, and expand them.
-
-o   The `declare' builtin now has new -l (convert value to lowercase upon
-    assignment) and -u (convert value to uppercase upon assignment) options.
-    There is an optionally-configurable -c option to capitalize a value at
-    assignment.
-
-o   There is a new `coproc' reserved word that specifies a coprocess: an
-    asynchronous command run with two pipes connected to the creating shell.
-    Coprocs can be named.  The input and output file descriptors and the
-    PID of the coprocess are available to the calling shell in variables
-    with coproc-specific names.
-
-o   A value of 0 for the -t option to `read' now returns success if there is
-    input available to be read from the specified file descriptor.
-
-o   CDPATH and GLOBIGNORE are ignored when the shell is running in privileged
-    mode.
-
-o   New bindable readline functions shell-forward-word and shell-backward-word,
-    which move forward and backward words delimited by shell metacharacters
-    and honor shell quoting.
-
-o   New bindable readline functions shell-backward-kill-word and shell-kill-word
-    which kill words backward and forward, but use the same word boundaries
-    as shell-forward-word and shell-backward-word.
diff --git a/NEWS-4.1 b/NEWS-4.1
deleted file mode 100644 (file)
index bb155bf..0000000
--- a/NEWS-4.1
+++ /dev/null
@@ -1,105 +0,0 @@
-o   Here-documents within $(...) command substitutions may once more be
-    delimited by the closing right paren, instead of requiring a newline.
-
-o   Bash's file status checks (executable, readable, etc.) now take file
-    system ACLs into account on file systems that support them.
-
-o   Bash now passes environment variables with names that are not valid
-    shell variable names through into the environment passed to child
-    processes.
-
-o   The `execute-unix-command' readline function now attempts to clear and
-    reuse the current line rather than move to a new one after the command
-    executes.
-
-o   `printf -v' can now assign values to array indices.
-
-o   New `complete -E' and `compopt -E' options that work on the "empty"
-    completion: completion attempted on an empty command line.
-
-o   New complete/compgen/compopt -D option to define a `default' completion:
-    a completion to be invoked on command for which no completion has been
-    defined.  If this function returns 124, programmable completion is
-    attempted again, allowing a user to dynamically build a set of completions
-    as completion is attempted by having the default completion function
-    install individual completion functions each time it is invoked.
-
-o   When displaying associative arrays, subscripts are now quoted.
-
-o   Changes to dabbrev-expand to make it more `emacs-like': no space appended
-    after matches, completions are not sorted, and most recent history entries
-    are presented first.
-
-o   The [[ and (( commands are now subject to the setting of `set -e' and the
-    ERR trap.
-
-o   The source/. builtin now removes NUL bytes from the file before attempting
-    to parse commands.
-
-o   There is a new configuration option (in config-top.h) that forces bash to
-    forward all history entries to syslog.
-
-o   A new variable $BASHOPTS to export shell options settable using `shopt' to
-    child processes.
-
-o   There is a new confgure option that forces the extglob option to be
-    enabled by default.
-
-o   New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
-    output to that file descriptor.
-
-o   If the optional left-hand-side of a redirection is of the form {var}, the
-    shell assigns the file descriptor used to $var or uses $var as the file
-    descriptor to move or close, depending on the redirection operator.
-
-o   The < and > operators to the [[ conditional command now do string
-    comparison according to the current locale.
-
-o   Programmable completion now uses the completion for `b' instead of `a'
-    when completion is attempted on a line like: a $(b c.
-
-o   Force extglob on temporarily when parsing the pattern argument to
-    the == and != operators to the [[ command, for compatibility.
-
-o   Changed the behavior of interrupting the wait builtin when a SIGCHLD is
-    received and a trap on SIGCHLD is set to be Posix-mode only.
-
-o   The read builtin has a new `-N nchars' option, which reads exactly NCHARS
-    characters, ignoring delimiters like newline.
-
-o   The mapfile/readarray builtin no longer stores the commands it invokes via
-    callbacks in the history list.
-
-o   There is a new `compat40' shopt option.
-
-o   The < and > operators to [[ do string comparisons using the current locale
-    only if the compatibility level is greater than 40 (set to 41 by default).
-
-o   New bindable readline function: menu-complete-backward.
-
-o   In the readline vi-mode insertion keymap, C-n is now bound to menu-complete
-    by default, and C-p to menu-complete-backward.
-
-o   When in readline vi command mode, repeatedly hitting ESC now does nothing,
-    even when ESC introduces a bound key sequence.  This is closer to how
-    historical vi behaves.
-
-o   New bindable readline function: skip-csi-sequence.  Can be used as a
-    default to consume key sequences generated by keys like Home and End
-    without having to bind all keys.
-
-o   New bindable readline variable: skip-completed-text, active when
-    completing in the middle of a word.  If enabled, it means that characters
-    in the completion that match characters in the remainder of the word are
-    "skipped" rather than inserted into the line.
-
-o   The pre-readline-6.0 version of menu completion is available as
-    "old-menu-complete" for users who do not like the readline-6.0 version.
-
-o   New bindable readline variable: echo-control-characters.  If enabled, and
-    the tty ECHOCTL bit is set, controls the echoing of characters
-    corresponding to keyboard-generated signals.
-
-o   New bindable readline variable: enable-meta-key.  Controls whether or not
-    readline sends the smm/rmm sequences if the terminal indicates it has a
-    meta key that enables eight-bit characters.
diff --git a/ddd1 b/ddd1
deleted file mode 100644 (file)
index 44bf7be..0000000
--- a/ddd1
+++ /dev/null
@@ -1,135 +0,0 @@
-*** ../bash-20101015/redir.c   2009-09-17 10:04:18.000000000 -0400
---- redir.c    2010-11-06 13:38:22.000000000 -0400
-***************
-*** 63,73 ****
-  
-  extern int posixly_correct;
-  extern REDIRECT *redirection_undo_list;
-  extern REDIRECT *exec_redirection_undo_list;
-  
-  /* Static functions defined and used in this file. */
-- static void add_undo_close_redirect __P((int));
-  static void add_exec_redirect __P((REDIRECT *));
-  static int add_undo_redirect __P((int, enum r_instruction, int));
-  static int expandable_redirection_filename __P((REDIRECT *));
-  static int stdin_redirection __P((enum r_instruction, int));
---- 63,74 ----
-  
-  extern int posixly_correct;
-+ extern int last_command_exit_value;
-  extern REDIRECT *redirection_undo_list;
-  extern REDIRECT *exec_redirection_undo_list;
-  
-  /* Static functions defined and used in this file. */
-  static void add_exec_redirect __P((REDIRECT *));
-  static int add_undo_redirect __P((int, enum r_instruction, int));
-+ static int add_undo_close_redirect __P((int));
-  static int expandable_redirection_filename __P((REDIRECT *));
-  static int stdin_redirection __P((enum r_instruction, int));
-***************
-*** 94,97 ****
---- 95,105 ----
-  static int heredoc_errno;
-  
-+ #define REDIRECTION_ERROR(r, e) \
-+   if ((r) != 0) \
-+     { \
-+       last_command_exit_value = EXECUTION_FAILURE;\
-+       return ((e) == 0 ? EINVAL : (e));\
-+     }
-+ 
-  void
-  redirection_error (temp, error)
-***************
-*** 814,820 ****
-             /* Only setup to undo it if the thing to undo is active. */
-             if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
-!              add_undo_redirect (redirector, ri, -1);
-             else
-!              add_undo_close_redirect (redirector);
-           }
-  
---- 822,829 ----
-             /* Only setup to undo it if the thing to undo is active. */
-             if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
-!              r = add_undo_redirect (redirector, ri, -1);
-             else
-!              r = add_undo_close_redirect (redirector);
-!            REDIRECTION_ERROR (r, errno);
-           }
-  
-***************
-*** 919,925 ****
-                 /* Only setup to undo it if the thing to undo is active. */
-                 if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
-!                  add_undo_redirect (redirector, ri, -1);
-                 else
-!                  add_undo_close_redirect (redirector);
-               }
-  
---- 928,935 ----
-                 /* Only setup to undo it if the thing to undo is active. */
-                 if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
-!                  r = add_undo_redirect (redirector, ri, -1);
-                 else
-!                  r = add_undo_close_redirect (redirector);
-!                REDIRECTION_ERROR(r, errno);
-               }
-  
-***************
-*** 973,979 ****
-             /* Only setup to undo it if the thing to undo is active. */
-             if (fcntl (redirector, F_GETFD, 0) != -1)
-!              add_undo_redirect (redirector, ri, redir_fd);
-             else
-!              add_undo_close_redirect (redirector);
-           }
-  #if defined (BUFFERED_INPUT)
---- 983,990 ----
-             /* Only setup to undo it if the thing to undo is active. */
-             if (fcntl (redirector, F_GETFD, 0) != -1)
-!              r = add_undo_redirect (redirector, ri, redir_fd);
-             else
-!              r = add_undo_close_redirect (redirector);
-!            REDIRECTION_ERROR(r, errno);
-           }
-  #if defined (BUFFERED_INPUT)
-***************
-*** 1047,1052 ****
-           }
-  
-         if ((flags & RX_UNDOABLE) && (fcntl (redirector, F_GETFD, 0) != -1))
-!          add_undo_redirect (redirector, ri, -1);
-  
-  #if defined (COPROCESS_SUPPORT)
---- 1058,1065 ----
-           }
-  
-+        r = 0;
-         if ((flags & RX_UNDOABLE) && (fcntl (redirector, F_GETFD, 0) != -1))
-!          r = add_undo_redirect (redirector, ri, -1);
-!        REDIRECTION_ERROR (r, errno);
-  
-  #if defined (COPROCESS_SUPPORT)
-***************
-*** 1165,1169 ****
-  /* Set up to close FD when we are finished with the current command
-     and its redirections. */
-! static void
-  add_undo_close_redirect (fd)
-       int fd;
---- 1178,1182 ----
-  /* Set up to close FD when we are finished with the current command
-     and its redirections. */
-! static int
-  add_undo_close_redirect (fd)
-       int fd;
-***************
-*** 1178,1181 ****
---- 1191,1196 ----
-    closer->next = redirection_undo_list;
-    redirection_undo_list = closer;
-+ 
-+   return 0;
-  }
-  
diff --git a/doc/b.html b/doc/b.html
deleted file mode 100644 (file)
index 29b0da6..0000000
+++ /dev/null
@@ -1,15448 +0,0 @@
-<HTML>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on January, 11  2007 by texi2html 1.64 -->
-<!-- 
-Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
-            Karl Berry  <karl@freefriends.org>
-            Olaf Bachmann <obachman@mathematik.uni-kl.de>
-            and many others.
-Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
--->
-<HEAD>
-<TITLE>Bash Reference Manual: </TITLE>
-
-<META NAME="description" CONTENT="Bash Reference Manual: ">
-<META NAME="keywords" CONTENT="Bash Reference Manual: ">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="texi2html 1.64">
-
-</HEAD>
-
-<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-
-<A NAME="SEC_Top"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1>Bash Reference Manual</H1></P><P>
-
-This text is a brief description of the features that are present in
-the Bash shell (version 3.2, 30 December 2006).
-</P><P>
-
-This is Edition 3.2, last updated 30 December 2006,
-of <CITE>The GNU Bash Reference Manual</CITE>,
-for <CODE>Bash</CODE>, Version 3.2.
-</P><P>
-
-Bash contains features that appear in other popular shells, and some
-features that only appear in Bash.  Some of the shells that Bash has
-borrowed concepts from are the Bourne Shell (<TT>`sh'</TT>), the Korn Shell
-(<TT>`ksh'</TT>), and the C-shell (<TT>`csh'</TT> and its successor,
-<TT>`tcsh'</TT>). The following menu breaks the features up into
-categories based upon which one of these other shells inspired the
-feature.
-</P><P>
-
-This manual is meant as a brief introduction to features found in
-Bash.  The Bash manual page should be used as the definitive
-reference on shell behavior.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC1">1. Introduction</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An introduction to the shell.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC4">2. Definitions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Some definitions used in the rest of this
-                               manual.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC5">3. Basic Shell Features</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The shell "building blocks".</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC56">4. Shell Builtin Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands that are a part of the shell.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC63">5. Shell Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables used or set by Bash.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC66">6. Bash Features</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Features found only in Bash.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC89">7. Job Control</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What job control is and how Bash allows you
-                               to use it.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC117">9. Using History Interactively</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Command History Expansion</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC93">8. Command Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Chapter describing the command line
-                               editing features.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC124">10. Installing Bash</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to build and install Bash on your system.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC133">A. Reporting Bugs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to report bugs in Bash.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC134">B. Major Differences From The Bourne Shell</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A terse list of the differences
-                                               between Bash and historical
-                                               versions of /bin/sh.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC136">C. Copying This Manual</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Copying this manual.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC139">D. Indexes</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Various indexes for this manual.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<HR SIZE=1>
-<A NAME="SEC1"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC2"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC4"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<A NAME="Introduction"></A>
-<H1> 1. Introduction </H1>
-<!--docid::SEC1::-->
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC2">1.1 What is Bash?</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A short description of Bash.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC3">1.2 What is a shell?</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A brief introduction to shells.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="What is Bash?"></A>
-<HR SIZE="6">
-<A NAME="SEC2"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC1"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC3"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC1"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC4"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 1.1 What is Bash? </H2>
-<!--docid::SEC2::-->
-<P>
-
-Bash is the shell, or command language interpreter,
-for the GNU operating system.
-The name is an acronym for the <SAMP>`Bourne-Again SHell'</SAMP>,
-a pun on Stephen Bourne, the author of the direct ancestor of
-the current Unix shell <CODE>sh</CODE>, 
-which appeared in the Seventh Edition Bell Labs Research version
-of Unix.
-</P><P>
-
-Bash is largely compatible with <CODE>sh</CODE> and incorporates useful
-features from the Korn shell <CODE>ksh</CODE> and the C shell <CODE>csh</CODE>.
-It is intended to be a conformant implementation of the IEEE
-POSIX Shell and Tools portion of the IEEE POSIX
-specification (IEEE Standard 1003.1).
-It offers functional improvements over <CODE>sh</CODE> for both interactive and
-programming use.
-</P><P>
-
-While the GNU operating system provides other shells, including
-a version of <CODE>csh</CODE>, Bash is the default shell.
-Like other GNU software, Bash is quite portable.  It currently runs
-on nearly every version of Unix and a few other operating systems -
-independently-supported ports exist for MS-DOS, OS/2,
-and Windows platforms.
-</P><P>
-
-<A NAME="What is a shell?"></A>
-<HR SIZE="6">
-<A NAME="SEC3"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC2"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC4"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC1"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC4"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 1.2 What is a shell? </H2>
-<!--docid::SEC3::-->
-<P>
-
-At its base, a shell is simply a macro processor that executes
-commands.  The term macro processor means functionality where text
-and symbols are expanded to create larger expressions.
-</P><P>
-
-A Unix shell is both a command interpreter and a programming
-language.  As a command interpreter, the shell provides the user
-interface to the rich set of GNU utilities.  The programming
-language features allow these utilities to be combined.
-Files containing commands can be created, and become
-commands themselves.  These new commands have the same status as
-system commands in directories such as <TT>`/bin'</TT>, allowing users
-or groups to establish custom environments to automate their common
-tasks.
-</P><P>
-
-Shells may be used interactively or non-interactively.  In
-interactive mode, they accept input typed from the keyboard.
-When executing non-interactively, shells execute commands read
-from a file.
-</P><P>
-
-A shell allows execution of GNU commands, both synchronously and
-asynchronously.
-The shell waits for synchronous commands to complete before accepting
-more input; asynchronous commands continue to execute in parallel
-with the shell while it reads and executes additional commands.
-The <EM>redirection</EM> constructs permit
-fine-grained control of the input and output of those commands.
-Moreover, the shell allows control over the contents of commands'
-environments.
-</P><P>
-
-Shells also provide a small set of built-in
-commands (<EM>builtins</EM>) implementing functionality impossible
-or inconvenient to obtain via separate utilities.
-For example, <CODE>cd</CODE>, <CODE>break</CODE>, <CODE>continue</CODE>, and
-<CODE>exec</CODE>) cannot be implemented outside of the shell because
-they directly manipulate the shell itself.
-The <CODE>history</CODE>, <CODE>getopts</CODE>, <CODE>kill</CODE>, or <CODE>pwd</CODE>
-builtins, among others, could be implemented in separate utilities,
-but they are more convenient to use as builtin commands.
-All of the shell builtins are described in
-subsequent sections.
-</P><P>
-
-While executing commands is essential, most of the power (and
-complexity) of shells is due to their embedded programming
-languages.  Like any high-level language, the shell provides
-variables, flow control constructs, quoting, and functions. 
-</P><P>
-
-Shells offer features geared specifically for
-interactive use rather than to augment the programming language. 
-These interactive features include job control, command line
-editing, command history and aliases.  Each of these features is
-described in this manual.
-</P><P>
-
-<A NAME="Definitions"></A>
-<HR SIZE="6">
-<A NAME="SEC4"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC3"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 2. Definitions </H1>
-<!--docid::SEC4::-->
-These definitions are used throughout the remainder of this manual.
-<P>
-
-<DL COMPACT>
-
-<DT><CODE>POSIX</CODE>
-<DD><A NAME="IDX1"></A>
-A family of open system standards based on Unix.  Bash
-is primarily concerned with the Shell and Utilities portion of the
-POSIX 1003.1 standard. 
-<P>
-
-<DT><CODE>blank</CODE>
-<DD>A space or tab character.
-<P>
-
-<DT><CODE>builtin</CODE>
-<DD><A NAME="IDX2"></A>
-A command that is implemented internally by the shell itself, rather
-than by an executable program somewhere in the file system.
-<P>
-
-<DT><CODE>control operator</CODE>
-<DD><A NAME="IDX3"></A>
-A <CODE>word</CODE> that performs a control function.  It is a <CODE>newline</CODE>
-or one of the following:
-<SAMP>`||'</SAMP>, <SAMP>`&#38;&#38;'</SAMP>, <SAMP>`&#38;'</SAMP>, <SAMP>`;'</SAMP>, <SAMP>`;;'</SAMP>,
-<SAMP>`|'</SAMP>, <SAMP>`('</SAMP>, or <SAMP>`)'</SAMP>.
-<P>
-
-<DT><CODE>exit status</CODE>
-<DD><A NAME="IDX4"></A>
-The value returned by a command to its caller.  The value is restricted
-to eight bits, so the maximum value is 255.
-<P>
-
-<DT><CODE>field</CODE>
-<DD><A NAME="IDX5"></A>
-A unit of text that is the result of one of the shell expansions.  After
-expansion, when executing a command, the resulting fields are used as
-the command name and arguments.
-<P>
-
-<DT><CODE>filename</CODE>
-<DD><A NAME="IDX6"></A>
-A string of characters used to identify a file.
-<P>
-
-<DT><CODE>job</CODE>
-<DD><A NAME="IDX7"></A>
-A set of processes comprising a pipeline, and any processes descended
-from it, that are all in the same process group.
-<P>
-
-<DT><CODE>job control</CODE>
-<DD><A NAME="IDX8"></A>
-A mechanism by which users can selectively stop (suspend) and restart
-(resume) execution of processes.
-<P>
-
-<DT><CODE>metacharacter</CODE>
-<DD><A NAME="IDX9"></A>
-A character that, when unquoted, separates words.  A metacharacter is
-a <CODE>blank</CODE> or one of the following characters:
-<SAMP>`|'</SAMP>, <SAMP>`&#38;'</SAMP>, <SAMP>`;'</SAMP>, <SAMP>`('</SAMP>, <SAMP>`)'</SAMP>, <SAMP>`&#60;'</SAMP>, or
-<SAMP>`&#62;'</SAMP>.
-<P>
-
-<DT><CODE>name</CODE>
-<DD><A NAME="IDX10"></A>
-<A NAME="IDX11"></A>
-A <CODE>word</CODE> consisting solely of letters, numbers, and underscores,
-and beginning with a letter or underscore.  <CODE>Name</CODE>s are used as
-shell variable and function names.
-Also referred to as an <CODE>identifier</CODE>.
-<P>
-
-<DT><CODE>operator</CODE>
-<DD><A NAME="IDX12"></A>
-A <CODE>control operator</CODE> or a <CODE>redirection operator</CODE>.
-See section <A HREF="b.html#SEC38">3.6 Redirections</A>, for a list of redirection operators.
-<P>
-
-<DT><CODE>process group</CODE>
-<DD><A NAME="IDX13"></A>
-A collection of related processes each having the same process
-group ID.
-<P>
-
-<DT><CODE>process group ID</CODE>
-<DD><A NAME="IDX14"></A>
-A unique identifier that represents a <CODE>process group</CODE>
-during its lifetime.
-<P>
-
-<DT><CODE>reserved word</CODE>
-<DD><A NAME="IDX15"></A>
-A <CODE>word</CODE> that has a special meaning to the shell.  Most reserved
-words introduce shell flow control constructs, such as <CODE>for</CODE> and
-<CODE>while</CODE>.
-<P>
-
-<DT><CODE>return status</CODE>
-<DD><A NAME="IDX16"></A>
-A synonym for <CODE>exit status</CODE>.
-<P>
-
-<DT><CODE>signal</CODE>
-<DD><A NAME="IDX17"></A>
-A mechanism by which a process may be notified by the kernel
-of an event occurring in the system.
-<P>
-
-<DT><CODE>special builtin</CODE>
-<DD><A NAME="IDX18"></A>
-A shell builtin command that has been classified as special by the
-POSIX standard.
-<P>
-
-<DT><CODE>token</CODE>
-<DD><A NAME="IDX19"></A>
-A sequence of characters considered a single unit by the shell.  It is
-either a <CODE>word</CODE> or an <CODE>operator</CODE>.
-<P>
-
-<DT><CODE>word</CODE>
-<DD><A NAME="IDX20"></A>
-A <CODE>token</CODE> that is not an <CODE>operator</CODE>.
-</DL>
-<P>
-
-<A NAME="Basic Shell Features"></A>
-<HR SIZE="6">
-<A NAME="SEC5"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC4"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC6"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 3. Basic Shell Features </H1>
-<!--docid::SEC5::-->
-<P>
-
-Bash is an acronym for <SAMP>`Bourne-Again SHell'</SAMP>.
-The Bourne shell is
-the traditional Unix shell originally written by Stephen Bourne.
-All of the Bourne shell builtin commands are available in Bash,
-The rules for evaluation and quoting are taken from the POSIX
-specification for the `standard' Unix shell.
-</P><P>
-
-This chapter briefly summarizes the shell's `building blocks':
-commands, control structures, shell functions, shell <I>parameters</I>,
-shell expansions,
-<I>redirections</I>, which are a way to direct input and output from
-and to named files, and how the shell executes commands.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC6">3.1 Shell Syntax</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What your input means to the shell.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC15">3.2 Shell Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The types of commands you can use.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC23">3.3 Shell Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Grouping commands by name.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC24">3.4 Shell Parameters</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How the shell stores values.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC27">3.5 Shell Expansions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Bash expands parameters and the various
-                               expansions available.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC38">3.6 Redirections</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A way to control where input and output go.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC48">3.7 Executing Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What happens when you run a command.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC55">3.8 Shell Scripts</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Executing files of shell commands.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Shell Syntax"></A>
-<HR SIZE="6">
-<A NAME="SEC6"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC7"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.1 Shell Syntax </H2>
-<!--docid::SEC6::-->
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC7">3.1.1 Shell Operation</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The basic operation of the shell.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC8">3.1.2 Quoting</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to remove the special meaning from characters.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC14">3.1.3 Comments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to specify comments.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-When the shell reads input, it proceeds through a
-sequence of operations.  If the input indicates the beginning of a
-comment, the shell ignores the comment symbol (<SAMP>`#'</SAMP>), and the rest
-of that line.
-                                
-Otherwise, roughly speaking,  the shell reads its input and
-divides the input into words and operators, employing the quoting rules
-to select which meanings to assign various words and characters.
-</P><P>
-
-The shell then parses these tokens into commands and other constructs,
-removes the special meaning of certain words or characters, expands
-others, redirects input and output as needed, executes the specified
-command, waits for the command's exit status, and makes that exit status
-available for further inspection or processing.
-</P><P>
-
-<A NAME="Shell Operation"></A>
-<HR SIZE="6">
-<A NAME="SEC7"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC6"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.1.1 Shell Operation </H3>
-<!--docid::SEC7::-->
-<P>
-
-The following is a brief description of the shell's operation when it
-reads and executes a command.  Basically, the shell does the
-following:
-</P><P>
-
-<OL>
-<LI>
-Reads its input from a file (see section <A HREF="b.html#SEC55">3.8 Shell Scripts</A>), from a string
-supplied as an argument to the <SAMP>`-c'</SAMP> invocation option
-(see section <A HREF="b.html#SEC67">6.1 Invoking Bash</A>), or from the user's terminal.
-<P>
-
-<LI>
-Breaks the input into words and operators, obeying the quoting rules
-described in <A HREF="b.html#SEC8">3.1.2 Quoting</A>.  These tokens are separated by
-<CODE>metacharacters</CODE>.  Alias expansion is performed by this step
-(see section <A HREF="b.html#SEC82">6.6 Aliases</A>).
-<P>
-
-<LI>
-Parses the tokens into simple and compound commands
-(see section <A HREF="b.html#SEC15">3.2 Shell Commands</A>).
-<P>
-
-<LI>
-Performs the various shell expansions (see section <A HREF="b.html#SEC27">3.5 Shell Expansions</A>), breaking
-the expanded tokens into lists of filenames (see section <A HREF="b.html#SEC35">3.5.8 Filename Expansion</A>)
-and commands and arguments.
-<P>
-
-<LI>
-Performs any necessary redirections (see section <A HREF="b.html#SEC38">3.6 Redirections</A>) and removes
-the redirection operators and their operands from the argument list.
-<P>
-
-<LI>
-Executes the command (see section <A HREF="b.html#SEC48">3.7 Executing Commands</A>).
-<P>
-
-<LI>
-Optionally waits for the command to complete and collects its exit
-status (see section <A HREF="b.html#SEC53">3.7.5 Exit Status</A>).
-<P>
-
-</OL>
-<P>
-
-<A NAME="Quoting"></A>
-<HR SIZE="6">
-<A NAME="SEC8"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC7"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC9"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.1.2 Quoting </H3>
-<!--docid::SEC8::-->
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC9">3.1.2.1 Escape Character</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to remove the special meaning from a single
-                       character.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC10">3.1.2.2 Single Quotes</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to inhibit all interpretation of a sequence
-                       of characters.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC11">3.1.2.3 Double Quotes</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to suppress most of the interpretation of a
-                       sequence of characters.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC12">3.1.2.4 ANSI-C Quoting</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to expand ANSI-C sequences in quoted strings.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to translate strings into different languages.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-Quoting is used to remove the special meaning of certain
-characters or words to the shell.  Quoting can be used to
-disable special treatment for special characters, to prevent
-reserved words from being recognized as such, and to prevent
-parameter expansion.
-</P><P>
-
-Each of the shell metacharacters (see section <A HREF="b.html#SEC4">2. Definitions</A>)
-has special meaning to the shell and must be quoted if it is to
-represent itself.
-When the command history expansion facilities are being used
-(see section <A HREF="b.html#SEC120">9.3 History Expansion</A>), the
-<VAR>history expansion</VAR> character, usually <SAMP>`!'</SAMP>, must be quoted
-to prevent history expansion.  See section <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>, for
-more details concerning history expansion.
-</P><P>
-
-There are three quoting mechanisms: the
-<VAR>escape character</VAR>, single quotes, and double quotes.
-</P><P>
-
-<A NAME="Escape Character"></A>
-<HR SIZE="6">
-<A NAME="SEC9"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC10"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.1.2.1 Escape Character </H4>
-<!--docid::SEC9::-->
-A non-quoted backslash <SAMP>`\'</SAMP> is the Bash escape character.
-It preserves the literal value of the next character that follows,
-with the exception of <CODE>newline</CODE>.  If a <CODE>\newline</CODE> pair
-appears, and the backslash itself is not quoted, the <CODE>\newline</CODE>
-is treated as a line continuation (that is, it is removed from
-the input stream and effectively ignored).
-<P>
-
-<A NAME="Single Quotes"></A>
-<HR SIZE="6">
-<A NAME="SEC10"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC9"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC11"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC11"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.1.2.2 Single Quotes </H4>
-<!--docid::SEC10::-->
-<P>
-
-Enclosing characters in single quotes (<SAMP>`''</SAMP>) preserves the literal value
-of each character within the quotes.  A single quote may not occur
-between single quotes, even when preceded by a backslash.
-</P><P>
-
-<A NAME="Double Quotes"></A>
-<HR SIZE="6">
-<A NAME="SEC11"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC10"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC12"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC12"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.1.2.3 Double Quotes </H4>
-<!--docid::SEC11::-->
-<P>
-
-Enclosing characters in double quotes (<SAMP>`"'</SAMP>) preserves the literal value
-of all characters within the quotes, with the exception of
-<SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, <SAMP>`\'</SAMP>,
-and, when history expansion is enabled, <SAMP>`!'</SAMP>.
-The characters <SAMP>`$'</SAMP> and <SAMP>``'</SAMP>
-retain their special meaning within double quotes (see section <A HREF="b.html#SEC27">3.5 Shell Expansions</A>).
-The backslash retains its special meaning only when followed by one of
-the following characters:
-<SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, <SAMP>`"'</SAMP>, <SAMP>`\'</SAMP>, or <CODE>newline</CODE>.
-Within double quotes, backslashes that are followed by one of these
-characters are removed.  Backslashes preceding characters without a
-special meaning are left unmodified.
-A double quote may be quoted within double quotes by preceding it with
-a backslash.
-If enabled, history expansion will be performed unless an <SAMP>`!'</SAMP>
-appearing in double quotes is escaped using a backslash.
-The backslash preceding the <SAMP>`!'</SAMP> is not removed.
-</P><P>
-
-The special parameters <SAMP>`*'</SAMP> and <SAMP>`@'</SAMP> have special meaning
-when in double quotes (see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-</P><P>
-
-<A NAME="ANSI-C Quoting"></A>
-<HR SIZE="6">
-<A NAME="SEC12"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC11"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC13"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC13"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.1.2.4 ANSI-C Quoting </H4>
-<!--docid::SEC12::-->
-<P>
-
-Words of the form <CODE>$'<VAR>string</VAR>'</CODE> are treated specially.  The
-word expands to <VAR>string</VAR>, with backslash-escaped characters replaced
-as specified by the ANSI C standard.  Backslash escape sequences, if
-present, are decoded as follows:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>\a</CODE>
-<DD>alert (bell)
-<DT><CODE>\b</CODE>
-<DD>backspace
-<DT><CODE>\e</CODE>
-<DD>an escape character (not ANSI C)
-<DT><CODE>\f</CODE>
-<DD>form feed
-<DT><CODE>\n</CODE>
-<DD>newline
-<DT><CODE>\r</CODE>
-<DD>carriage return
-<DT><CODE>\t</CODE>
-<DD>horizontal tab
-<DT><CODE>\v</CODE>
-<DD>vertical tab
-<DT><CODE>\\</CODE>
-<DD>backslash
-<DT><CODE>\'</CODE>
-<DD>single quote
-<DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
-(one to three digits)
-<DT><CODE>\x<VAR>HH</VAR></CODE>
-<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
-(one or two hex digits)
-<DT><CODE>\c<VAR>x</VAR></CODE>
-<DD>a control-<VAR>x</VAR> character
-</DL>
-<P>
-
-The expanded result is single-quoted, as if the dollar sign had not
-been present.
-</P><P>
-
-<A NAME="Locale Translation"></A>
-<HR SIZE="6">
-<A NAME="SEC13"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC12"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC8"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.1.2.5 Locale-Specific Translation </H4>
-<!--docid::SEC13::-->
-<P>
-
-A double-quoted string preceded by a dollar sign (<SAMP>`$'</SAMP>) will cause
-the string to be translated according to the current locale.
-If the current locale is <CODE>C</CODE> or <CODE>POSIX</CODE>, the dollar sign
-is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
-</P><P>
-
-<A NAME="IDX21"></A>
-<A NAME="IDX22"></A>
-<A NAME="IDX23"></A>
-Some systems use the message catalog selected by the <CODE>LC_MESSAGES</CODE>
-shell variable.  Others create the name of the message catalog from the
-value of the <CODE>TEXTDOMAIN</CODE> shell variable, possibly adding a
-suffix of <SAMP>`.mo'</SAMP>.  If you use the <CODE>TEXTDOMAIN</CODE> variable, you
-may need to set the <CODE>TEXTDOMAINDIR</CODE> variable to the location of
-the message catalog files.  Still others use both variables in this
-fashion:
-<CODE>TEXTDOMAINDIR</CODE>/<CODE>LC_MESSAGES</CODE>/LC_MESSAGES/<CODE>TEXTDOMAIN</CODE>.mo.
-</P><P>
-
-<A NAME="Comments"></A>
-<HR SIZE="6">
-<A NAME="SEC14"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC13"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC6"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.1.3 Comments </H3>
-<!--docid::SEC14::-->
-<P>
-
-In a non-interactive shell, or an interactive shell in which the
-<CODE>interactive_comments</CODE> option to the <CODE>shopt</CODE>
-builtin is enabled (see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>),
-a word beginning with <SAMP>`#'</SAMP>
-causes that word and all remaining characters on that line to
-be ignored.  An interactive shell without the <CODE>interactive_comments</CODE>
-option enabled does not allow comments.  The <CODE>interactive_comments</CODE>
-option is on by default in interactive shells.
-See section <A HREF="b.html#SEC76">6.3 Interactive Shells</A>, for a description of what makes
-a shell interactive.
-</P><P>
-
-<A NAME="Shell Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC15"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC14"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC16"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.2 Shell Commands </H2>
-<!--docid::SEC15::-->
-<P>
-
-A simple shell command such as <CODE>echo a b c</CODE> consists of the command
-itself followed by arguments, separated by spaces.
-</P><P>
-
-More complex shell commands are composed of simple commands arranged together
-in a variety of ways: in a pipeline in which the output of one command
-becomes the input of a second, in a loop or conditional construct, or in
-some other grouping.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC16">3.2.1 Simple Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The most common type of command.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC17">3.2.2 Pipelines</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Connecting the input and output of several
-                               commands.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC18">3.2.3 Lists of Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to execute commands sequentially.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC19">3.2.4 Compound Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Shell commands for control flow.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Simple Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC16"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC17"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.2.1 Simple Commands </H3>
-<!--docid::SEC16::-->
-<P>
-
-A simple command is the kind of command encountered most often.
-It's just a sequence of words separated by <CODE>blank</CODE>s, terminated
-by one of the shell's control operators (see section <A HREF="b.html#SEC4">2. Definitions</A>).  The
-first word generally specifies a command to be executed, with the
-rest of the words being that command's arguments.
-</P><P>
-
-The return status (see section <A HREF="b.html#SEC53">3.7.5 Exit Status</A>) of a simple command is
-its exit status as provided
-by the POSIX 1003.1 <CODE>waitpid</CODE> function, or 128+<VAR>n</VAR> if
-the command was terminated by signal <VAR>n</VAR>.
-</P><P>
-
-<A NAME="Pipelines"></A>
-<HR SIZE="6">
-<A NAME="SEC17"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC16"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC18"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC18"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.2.2 Pipelines </H3>
-<!--docid::SEC17::-->
-<P>
-
-A <CODE>pipeline</CODE> is a sequence of simple commands separated by
-<SAMP>`|'</SAMP>.
-</P><P>
-
-<A NAME="IDX24"></A>
-<A NAME="IDX25"></A>
-<A NAME="IDX26"></A>
-The format for a pipeline is
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<CODE>time</CODE> [<CODE>-p</CODE>]] [<CODE>!</CODE>] <VAR>command1</VAR> [<CODE>|</CODE> <VAR>command2</VAR> <small>...</small>]
-</pre></td></tr></table></P><P>
-
-The output of each command in the pipeline is connected via a pipe
-to the input of the next command.
-That is, each command reads the previous command's output.
-</P><P>
-
-The reserved word <CODE>time</CODE> causes timing statistics
-to be printed for the pipeline once it finishes.
-The statistics currently consist of elapsed (wall-clock) time and
-user and system time consumed by the command's execution.
-The <SAMP>`-p'</SAMP> option changes the output format to that specified
-by POSIX.
-The <CODE>TIMEFORMAT</CODE> variable may be set to a format string that
-specifies how the timing information should be displayed.
-See section <A HREF="b.html#SEC65">5.2 Bash Variables</A>, for a description of the available formats.
-The use of <CODE>time</CODE> as a reserved word permits the timing of
-shell builtins, shell functions, and pipelines.  An external
-<CODE>time</CODE> command cannot time these easily.
-</P><P>
-
-If the pipeline is not executed asynchronously (see section <A HREF="b.html#SEC18">3.2.3 Lists of Commands</A>), the
-shell waits for all commands in the pipeline to complete.
-</P><P>
-
-Each command in a pipeline is executed in its own subshell
-(see section <A HREF="b.html#SEC51">3.7.3 Command Execution Environment</A>).  The exit
-status of a pipeline is the exit status of the last command in the
-pipeline, unless the <CODE>pipefail</CODE> option is enabled
-(see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-If <CODE>pipefail</CODE> is enabled, the pipeline's return status is the
-value of the last (rightmost) command to exit with a non-zero status,
-or zero if all commands exit successfully.
-If the reserved word <SAMP>`!'</SAMP> precedes the pipeline, the
-exit status is the logical negation of the exit status as described
-above.
-The shell waits for all commands in the pipeline to terminate before
-returning a value.
-</P><P>
-
-<A NAME="Lists"></A>
-<HR SIZE="6">
-<A NAME="SEC18"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC17"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC19"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC19"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.2.3 Lists of Commands </H3>
-<!--docid::SEC18::-->
-<P>
-
-A <CODE>list</CODE> is a sequence of one or more pipelines separated by one
-of the operators <SAMP>`;'</SAMP>, <SAMP>`&#38;'</SAMP>, <SAMP>`&#38;&#38;'</SAMP>, or <SAMP>`||'</SAMP>,
-and optionally terminated by one of <SAMP>`;'</SAMP>, <SAMP>`&#38;'</SAMP>, or a
-<CODE>newline</CODE>.
-</P><P>
-
-Of these list operators, <SAMP>`&#38;&#38;'</SAMP> and <SAMP>`||'</SAMP>
-have equal precedence, followed by <SAMP>`;'</SAMP> and <SAMP>`&#38;'</SAMP>,
-which have equal precedence.
-</P><P>
-
-A sequence of one or more newlines may appear in a <CODE>list</CODE>
-to delimit commands, equivalent to a semicolon.
-</P><P>
-
-If a command is terminated by the control operator <SAMP>`&#38;'</SAMP>,
-the shell executes the command asynchronously in a subshell.
-This is known as executing the command in the <VAR>background</VAR>.
-The shell does not wait for the command to finish, and the return
-status is 0 (true).
-When job control is not active (see section <A HREF="b.html#SEC89">7. Job Control</A>),
-the standard input for asynchronous commands, in the absence of any
-explicit redirections, is redirected from <CODE>/dev/null</CODE>.
-</P><P>
-
-Commands separated by a <SAMP>`;'</SAMP> are executed sequentially; the shell
-waits for each command to terminate in turn.  The return status is the
-exit status of the last command executed.
-</P><P>
-
-The control operators <SAMP>`&#38;&#38;'</SAMP> and <SAMP>`||'</SAMP>
-denote AND lists and OR lists, respectively.
-An AND list has the form
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><VAR>command1</VAR> &#38;&#38; <VAR>command2</VAR>
-</pre></td></tr></table></P><P>
-
-<VAR>command2</VAR> is executed if, and only if, <VAR>command1</VAR>
-returns an exit status of zero.
-</P><P>
-
-An OR list has the form
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><VAR>command1</VAR> || <VAR>command2</VAR>
-</pre></td></tr></table></P><P>
-
-<VAR>command2</VAR> is executed if, and only if, <VAR>command1</VAR>
-returns a non-zero exit status.
-</P><P>
-
-The return status of
-AND and OR lists is the exit status of the last command
-executed in the list.
-</P><P>
-
-<A NAME="Compound Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC19"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC18"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC20"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC15"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.2.4 Compound Commands </H3>
-<!--docid::SEC19::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Shell commands for iterative action.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Shell commands for conditional execution.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC22">3.2.4.3 Grouping Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Ways to group commands.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-Compound commands are the shell programming constructs.
-Each construct begins with a reserved word or control operator and is
-terminated by a corresponding reserved word or operator.
-Any redirections (see section <A HREF="b.html#SEC38">3.6 Redirections</A>) associated with a compound command
-apply to all commands within that compound command unless explicitly overridden.
-</P><P>
-
-Bash provides looping constructs, conditional commands, and mechanisms
-to group commands and execute them as a unit.
-</P><P>
-
-<A NAME="Looping Constructs"></A>
-<HR SIZE="6">
-<A NAME="SEC20"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC19"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC21"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC19"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.2.4.1 Looping Constructs </H4>
-<!--docid::SEC20::-->
-<P>
-
-Bash supports the following looping constructs.
-</P><P>
-
-Note that wherever a <SAMP>`;'</SAMP> appears in the description of a
-command's syntax, it may be replaced with one or more newlines.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>until</CODE>
-<DD><A NAME="IDX27"></A>
-<A NAME="IDX28"></A>
-<A NAME="IDX29"></A>
-The syntax of the <CODE>until</CODE> command is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>until <VAR>test-commands</VAR>; do <VAR>consequent-commands</VAR>; done
-</pre></td></tr></table>Execute <VAR>consequent-commands</VAR> as long as
-<VAR>test-commands</VAR> has an exit status which is not zero.
-The return status is the exit status of the last command executed
-in <VAR>consequent-commands</VAR>, or zero if none was executed.
-<P>
-
-<DT><CODE>while</CODE>
-<DD><A NAME="IDX30"></A>
-The syntax of the <CODE>while</CODE> command is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>while <VAR>test-commands</VAR>; do <VAR>consequent-commands</VAR>; done
-</pre></td></tr></table><P>
-
-Execute <VAR>consequent-commands</VAR> as long as
-<VAR>test-commands</VAR> has an exit status of zero.
-The return status is the exit status of the last command executed
-in <VAR>consequent-commands</VAR>, or zero if none was executed.
-</P><P>
-
-<DT><CODE>for</CODE>
-<DD><A NAME="IDX31"></A>
-The syntax of the <CODE>for</CODE> command is:
-<P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>for <VAR>name</VAR> [in <VAR>words</VAR> <small>...</small>]; do <VAR>commands</VAR>; done
-</pre></td></tr></table>Expand <VAR>words</VAR>, and execute <VAR>commands</VAR> once for each member
-in the resultant list, with <VAR>name</VAR> bound to the current member.
-If <SAMP>`in <VAR>words</VAR>'</SAMP> is not present, the <CODE>for</CODE> command
-executes the <VAR>commands</VAR> once for each positional parameter that is
-set, as if <SAMP>`in "$@"'</SAMP> had been specified
-(see section <A HREF="b.html#SEC26">3.4.2 Special Parameters</A>).
-The return status is the exit status of the last command that executes.
-If there are no items in the expansion of <VAR>words</VAR>, no commands are
-executed, and the return status is zero.
-</P><P>
-
-An alternate form of the <CODE>for</CODE> command is also supported:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>for (( <VAR>expr1</VAR> ; <VAR>expr2</VAR> ; <VAR>expr3</VAR> )) ; do <VAR>commands</VAR> ; done
-</pre></td></tr></table>First, the arithmetic expression <VAR>expr1</VAR> is evaluated according
-to the rules described below (see section <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>).
-The arithmetic expression <VAR>expr2</VAR> is then evaluated repeatedly
-until it evaluates to zero.   
-Each time <VAR>expr2</VAR> evaluates to a non-zero value, <VAR>commands</VAR> are
-executed and the arithmetic expression <VAR>expr3</VAR> is evaluated.       
-If any expression is omitted, it behaves as if it evaluates to 1.
-The return value is the exit status of the last command in <VAR>list</VAR>
-that is executed, or false if any of the expressions is invalid.
-</P><P>
-
-</DL>
-<P>
-
-The <CODE>break</CODE> and <CODE>continue</CODE> builtins (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>)
-may be used to control loop execution.
-</P><P>
-
-<A NAME="Conditional Constructs"></A>
-<HR SIZE="6">
-<A NAME="SEC21"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC20"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC22"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC22"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC19"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.2.4.2 Conditional Constructs </H4>
-<!--docid::SEC21::-->
-<P>
-
-<DL COMPACT>
-<DT><CODE>if</CODE>
-<DD><A NAME="IDX32"></A>
-<A NAME="IDX33"></A>
-<A NAME="IDX34"></A>
-<A NAME="IDX35"></A>
-<A NAME="IDX36"></A>
-The syntax of the <CODE>if</CODE> command is:
-<P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>if <VAR>test-commands</VAR>; then
-  <VAR>consequent-commands</VAR>;
-[elif <VAR>more-test-commands</VAR>; then
-  <VAR>more-consequents</VAR>;]
-[else <VAR>alternate-consequents</VAR>;]
-fi
-</pre></td></tr></table></P><P>
-
-The <VAR>test-commands</VAR> list is executed, and if its return status is zero,
-the <VAR>consequent-commands</VAR> list is executed.
-If <VAR>test-commands</VAR> returns a non-zero status, each <CODE>elif</CODE> list
-is executed in turn, and if its exit status is zero,
-the corresponding <VAR>more-consequents</VAR> is executed and the   
-command completes.
-If <SAMP>`else <VAR>alternate-consequents</VAR>'</SAMP> is present, and
-the final command in the final <CODE>if</CODE> or <CODE>elif</CODE> clause
-has a non-zero exit status, then <VAR>alternate-consequents</VAR> is executed.
-The return status is the exit status of the last command executed, or
-zero if no condition tested true.
-</P><P>
-
-<DT><CODE>case</CODE>
-<DD><A NAME="IDX37"></A>
-<A NAME="IDX38"></A>
-<A NAME="IDX39"></A>
-The syntax of the <CODE>case</CODE> command is:
-<P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>case <VAR>word</VAR> in [ [(] <VAR>pattern</VAR> [| <VAR>pattern</VAR>]<small>...</small>) <VAR>command-list</VAR> ;;]<small>...</small> esac</CODE>
-</pre></td></tr></table></P><P>
-
-<CODE>case</CODE> will selectively execute the <VAR>command-list</VAR> corresponding to
-the first <VAR>pattern</VAR> that matches <VAR>word</VAR>.
-If the shell option <CODE>nocasematch</CODE>
-(see the description of <CODE>shopt</CODE> in <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>)
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-The <SAMP>`|'</SAMP> is used to separate multiple patterns, and the <SAMP>`)'</SAMP>
-operator terminates a pattern list.
-A list of patterns and an associated command-list is known
-as a <VAR>clause</VAR>.  Each clause must be terminated with <SAMP>`;;'</SAMP>.
-The <VAR>word</VAR> undergoes tilde expansion, parameter expansion, command
-substitution, arithmetic expansion, and quote removal before matching is
-attempted.  Each <VAR>pattern</VAR> undergoes tilde expansion, parameter
-expansion, command substitution, and arithmetic expansion.
-</P><P>
-
-There may be an arbitrary number of <CODE>case</CODE> clauses, each terminated
-by a <SAMP>`;;'</SAMP>.  The first pattern that matches determines the
-command-list that is executed.
-</P><P>
-
-Here is an example using <CODE>case</CODE> in a script that could be used to
-describe one interesting feature of an animal:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>echo -n "Enter the name of an animal: "
-read ANIMAL
-echo -n "The $ANIMAL has "
-case $ANIMAL in
-  horse | dog | cat) echo -n "four";;
-  man | kangaroo ) echo -n "two";;
-  *) echo -n "an unknown number of";;
-esac
-echo " legs."
-</pre></td></tr></table></P><P>
-
-The return status is zero if no <VAR>pattern</VAR> is matched.  Otherwise, the
-return status is the exit status of the <VAR>command-list</VAR> executed.
-</P><P>
-
-<DT><CODE>select</CODE>
-<DD><A NAME="IDX40"></A>
-<P>
-
-The <CODE>select</CODE> construct allows the easy generation of menus.
-It has almost the same syntax as the <CODE>for</CODE> command:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>select <VAR>name</VAR> [in <VAR>words</VAR> <small>...</small>]; do <VAR>commands</VAR>; done
-</pre></td></tr></table></P><P>
-
-The list of words following <CODE>in</CODE> is expanded, generating a list
-of items.  The set of expanded words is printed on the standard
-error output stream, each preceded by a number.  If the
-<SAMP>`in <VAR>words</VAR>'</SAMP> is omitted, the positional parameters are printed,
-as if <SAMP>`in "$@"'</SAMP> had been specified.
-The <CODE>PS3</CODE> prompt is then displayed and a line is read from the
-standard input.
-If the line consists of a number corresponding to one of the displayed
-words, then the value of <VAR>name</VAR> is set to that word.
-If the line is empty, the words and prompt are displayed again.
-If <CODE>EOF</CODE> is read, the <CODE>select</CODE> command completes.
-Any other value read causes <VAR>name</VAR> to be set to null.
-The line read is saved in the variable <CODE>REPLY</CODE>.
-</P><P>
-
-The <VAR>commands</VAR> are executed after each selection until a
-<CODE>break</CODE> command is executed, at which
-point the <CODE>select</CODE> command completes.
-</P><P>
-
-Here is an example that allows the user to pick a filename from the
-current directory, and displays the name and index of the file
-selected.
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>select fname in *;
-do
-       echo you picked $fname \($REPLY\)
-       break;
-done
-</pre></td></tr></table></P><P>
-
-<DT><CODE>((<small>...</small>))</CODE>
-<DD><TABLE><tr><td>&nbsp;</td><td class=example><pre>(( <VAR>expression</VAR> ))
-</pre></td></tr></table><P>
-
-The arithmetic <VAR>expression</VAR> is evaluated according to the rules
-described below (see section <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>).
-If the value of the expression is non-zero, the return status is 0;
-otherwise the return status is 1.  This is exactly equivalent to
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>let "<VAR>expression</VAR>"
-</pre></td></tr></table>See section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>, for a full description of the <CODE>let</CODE> builtin.
-</P><P>
-
-<DT><CODE>[[<small>...</small>]]</CODE>
-<DD><A NAME="IDX41"></A>
-<A NAME="IDX42"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[[ <VAR>expression</VAR> ]]
-</pre></td></tr></table><P>
-
-Return a status of 0 or 1 depending on the evaluation of
-the conditional expression <VAR>expression</VAR>.
-Expressions are composed of the primaries described below in
-<A HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A>.
-Word splitting and filename expansion are not performed on the words
-between the <SAMP>`[['</SAMP> and <SAMP>`]]'</SAMP>; tilde expansion, parameter and
-variable expansion, arithmetic expansion, command substitution, process
-substitution, and quote removal are performed.
-Conditional operators such as <SAMP>`-f'</SAMP> must be unquoted to be recognized
-as primaries.
-</P><P>
-
-When the <SAMP>`=='</SAMP> and <SAMP>`!='</SAMP> operators are used, the string to the
-right of the operator is considered a pattern and matched according
-to the rules described below in <A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A>.
-If the shell option <CODE>nocasematch</CODE>
-(see the description of <CODE>shopt</CODE> in <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>)
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-The return value is 0 if the string matches (<SAMP>`=='</SAMP>) or does not
-match (<SAMP>`!='</SAMP>)the pattern, and 1 otherwise.
-Any part of the pattern may be quoted to force it to be matched as a
-string.
-</P><P>
-
-An additional binary operator, <SAMP>`=~'</SAMP>, is available, with the same
-precedence as <SAMP>`=='</SAMP> and <SAMP>`!='</SAMP>.
-When it is used, the string to the right of the operator is considered
-an extended regular expression and matched accordingly (as in <I>regex</I>3)).  
-The return value is 0 if the string matches
-the pattern, and 1 otherwise.
-If the regular expression is syntactically incorrect, the conditional
-expression's return value is 2.
-If the shell option <CODE>nocasematch</CODE>
-(see the description of <CODE>shopt</CODE> in <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>)
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-Substrings matched by parenthesized subexpressions within the regular
-expression are saved in the array variable <CODE>BASH_REMATCH</CODE>.
-The element of <CODE>BASH_REMATCH</CODE> with index 0 is the portion of the string
-matching the entire regular expression.
-The element of <CODE>BASH_REMATCH</CODE> with index <VAR>n</VAR> is the portion of the
-string matching the <VAR>n</VAR>th parenthesized subexpression.
-</P><P>
-
-Expressions may be combined using the following operators, listed
-in decreasing order of precedence:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>( <VAR>expression</VAR> )</CODE>
-<DD>Returns the value of <VAR>expression</VAR>.
-This may be used to override the normal precedence of operators.
-<P>
-
-<DT><CODE>! <VAR>expression</VAR></CODE>
-<DD>True if <VAR>expression</VAR> is false.
-<P>
-
-<DT><CODE><VAR>expression1</VAR> &#38;&#38; <VAR>expression2</VAR></CODE>
-<DD>True if both <VAR>expression1</VAR> and <VAR>expression2</VAR> are true.
-<P>
-
-<DT><CODE><VAR>expression1</VAR> || <VAR>expression2</VAR></CODE>
-<DD>True if either <VAR>expression1</VAR> or <VAR>expression2</VAR> is true.
-</DL>
-The <CODE>&#38;&#38;</CODE> and <CODE>||</CODE> operators do not evaluate <VAR>expression2</VAR> if the
-value of <VAR>expression1</VAR> is sufficient to determine the return
-value of the entire conditional expression.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Command Grouping"></A>
-<HR SIZE="6">
-<A NAME="SEC22"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC21"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC19"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.2.4.3 Grouping Commands </H4>
-<!--docid::SEC22::-->
-<P>
-
-Bash provides two ways to group a list of commands to be executed
-as a unit.  When commands are grouped, redirections may be applied
-to the entire command list.  For example, the output of all the
-commands in the list may be redirected to a single stream.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>()</CODE>
-<DD><TABLE><tr><td>&nbsp;</td><td class=example><pre>( <VAR>list</VAR> )
-</pre></td></tr></table><P>
-
-Placing a list of commands between parentheses causes a subshell
-environment to be created (see section <A HREF="b.html#SEC51">3.7.3 Command Execution Environment</A>), and each
-of the commands in <VAR>list</VAR> to be executed in that subshell.  Since the
-<VAR>list</VAR> is executed in a subshell, variable assignments do not remain in
-effect after the subshell completes. 
-</P><P>
-
-<DT><CODE>{}</CODE>
-<DD><A NAME="IDX43"></A>
-<A NAME="IDX44"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>{ <VAR>list</VAR>; }
-</pre></td></tr></table><P>
-
-Placing a list of commands between curly braces causes the list to
-be executed in the current shell context.  No subshell is created.
-The semicolon (or newline) following <VAR>list</VAR> is required.
-</DL>
-<P>
-
-In addition to the creation of a subshell, there is a subtle difference
-between these two constructs due to historical reasons.  The braces
-are <CODE>reserved words</CODE>, so they must be separated from the <VAR>list</VAR>
-by <CODE>blank</CODE>s.  The parentheses are <CODE>operators</CODE>, and are
-recognized as separate tokens by the shell even if they are not separated
-from the <VAR>list</VAR> by whitespace.
-</P><P>
-
-The exit status of both of these constructs is the exit status of
-<VAR>list</VAR>.
-</P><P>
-
-<A NAME="Shell Functions"></A>
-<HR SIZE="6">
-<A NAME="SEC23"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC22"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC24"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC24"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.3 Shell Functions </H2>
-<!--docid::SEC23::-->
-<P>
-
-Shell functions are a way to group commands for later execution
-using a single name for the group.  They are executed just like
-a "regular" command.
-When the name of a shell function is used as a simple command name,
-the list of commands associated with that function name is executed.
-Shell functions are executed in the current
-shell context; no new process is created to interpret them.
-</P><P>
-
-Functions are declared using this syntax:
-<A NAME="IDX45"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[ <CODE>function</CODE> ] <VAR>name</VAR> () <VAR>compound-command</VAR> [ <VAR>redirections</VAR> ]
-</pre></td></tr></table></P><P>
-
-This defines a shell function named <VAR>name</VAR>.  The reserved
-word <CODE>function</CODE> is optional.
-If the <CODE>function</CODE> reserved
-word is supplied, the parentheses are optional.
-The <VAR>body</VAR> of the function is the compound command
-<VAR>compound-command</VAR> (see section <A HREF="b.html#SEC19">3.2.4 Compound Commands</A>).
-That command is usually a <VAR>list</VAR> enclosed between { and }, but
-may be any compound command listed above.
-<VAR>compound-command</VAR> is executed whenever <VAR>name</VAR> is specified as the
-name of a command.
-Any redirections (see section <A HREF="b.html#SEC38">3.6 Redirections</A>) associated with the shell function
-are performed when the function is executed.
-</P><P>
-
-A function definition may be deleted using the <SAMP>`-f'</SAMP> option to the
-<CODE>unset</CODE> builtin (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-</P><P>
-
-The exit status of a function definition is zero unless a syntax error
-occurs or a readonly function with the same name already exists.
-When executed, the exit status of a function is the exit status of the
-last command executed in the body.
-</P><P>
-
-Note that for historical reasons, in the most common usage the curly braces
-that surround the body of the function must be separated from the body by
-<CODE>blank</CODE>s or newlines.
-This is because the braces are reserved words and are only recognized
-as such when they are separated by whitespace.
-Also, when using the braces, the <VAR>list</VAR> must be terminated by a semicolon,
-a <SAMP>`&#38;'</SAMP>, or a newline.
-</P><P>
-
-When a function is executed, the arguments to the
-function become the positional parameters
-during its execution (see section <A HREF="b.html#SEC25">3.4.1 Positional Parameters</A>).
-The special parameter <SAMP>`#'</SAMP> that expands to the number of
-positional parameters is updated to reflect the change.
-Special parameter <CODE>0</CODE> is unchanged.
-The first element of the <CODE>FUNCNAME</CODE> variable is set to the
-name of the function while the function is executing.
-All other aspects of the shell execution
-environment are identical between a function and its caller
-with the exception that the <CODE>DEBUG</CODE> and <CODE>RETURN</CODE> traps
-are not inherited unless the function has been given the
-<CODE>trace</CODE> attribute using the <CODE>declare</CODE> builtin or
-the <CODE>-o functrace</CODE> option has been enabled with
-the <CODE>set</CODE> builtin,
-(in which case all functions inherit the <CODE>DEBUG</CODE> and <CODE>RETURN</CODE> traps).
-See section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>, for the description of the
-<CODE>trap</CODE> builtin.
-</P><P>
-
-If the builtin command <CODE>return</CODE>
-is executed in a function, the function completes and
-execution resumes with the next command after the function
-call.
-Any command associated with the <CODE>RETURN</CODE> trap is executed
-before execution resumes.
-When a function completes, the values of the
-positional parameters and the special parameter <SAMP>`#'</SAMP>
-are restored to the values they had prior to the function's
-execution.  If a numeric argument is given to <CODE>return</CODE>,
-that is the function's return status; otherwise the function's
-return status is the exit status of the last command executed
-before the <CODE>return</CODE>.
-</P><P>
-
-Variables local to the function may be declared with the
-<CODE>local</CODE> builtin.  These variables are visible only to
-the function and the commands it invokes.
-</P><P>
-
-Function names and definitions may be listed with the
-<SAMP>`-f'</SAMP> option to the <CODE>declare</CODE> or <CODE>typeset</CODE>
-builtin commands (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-The <SAMP>`-F'</SAMP> option to <CODE>declare</CODE> or <CODE>typeset</CODE>
-will list the function names only
-(and optionally the source file and line number, if the <CODE>extdebug</CODE>
-shell option is enabled).
-Functions may be exported so that subshells
-automatically have them defined with the
-<SAMP>`-f'</SAMP> option to the <CODE>export</CODE> builtin
-(see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-Note that shell functions and variables with the same name may result
-in multiple identically-named entries in the environment passed to the
-shell's children.
-Care should be taken in cases where this may cause a problem.
-</P><P>
-
-Functions may be recursive.  No limit is placed on the number of
-recursive  calls.
-</P><P>
-
-<A NAME="Shell Parameters"></A>
-<HR SIZE="6">
-<A NAME="SEC24"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC23"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC25"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.4 Shell Parameters </H2>
-<!--docid::SEC24::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC25">3.4.1 Positional Parameters</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The shell's command-line arguments.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Parameters denoted by special characters.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-A <VAR>parameter</VAR> is an entity that stores values.
-It can be a <CODE>name</CODE>, a number, or one of the special characters
-listed below.
-A <VAR>variable</VAR> is a parameter denoted by a <CODE>name</CODE>.
-A variable has a <VAR>value</VAR> and zero or more <VAR>attributes</VAR>.
-Attributes are assigned using the <CODE>declare</CODE> builtin command
-(see the description of the <CODE>declare</CODE> builtin in <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-</P><P>
-
-A parameter is set if it has been assigned a value.  The null string is
-a valid value.  Once a variable is set, it may be unset only by using
-the <CODE>unset</CODE> builtin command.
-</P><P>
-
-A variable may be assigned to by a statement of the form
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><VAR>name</VAR>=[<VAR>value</VAR>]
-</pre></td></tr></table>If <VAR>value</VAR>
-is not given, the variable is assigned the null string.  All
-<VAR>value</VAR>s undergo tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote
-removal (detailed below).  If the variable has its <CODE>integer</CODE>
-attribute set, then <VAR>value</VAR> 
-is evaluated as an arithmetic expression even if the <CODE>$((<small>...</small>))</CODE>
-expansion is not used (see section <A HREF="b.html#SEC32">3.5.5 Arithmetic Expansion</A>).
-Word splitting is not performed, with the exception
-of <CODE>"$@"</CODE> as explained below.
-Filename expansion is not performed.
-Assignment statements may also appear as arguments to the
-<CODE>alias</CODE>, 
-<CODE>declare</CODE>, <CODE>typeset</CODE>, <CODE>export</CODE>, <CODE>readonly</CODE>,
-and <CODE>local</CODE> builtin commands.
-</P><P>
-
-In the context where an assignment statement is assigning a value  
-to a shell variable or array index (see section <A HREF="b.html#SEC83">6.7 Arrays</A>), the <SAMP>`+='</SAMP>
-operator can be used to   
-append to or add to the variable's previous value.
-When <SAMP>`+='</SAMP> is applied to a variable for which the integer attribute
-has been set, <VAR>value</VAR> is evaluated as an arithmetic expression and
-added to the variable's current value, which is also evaluated.
-When <SAMP>`+='</SAMP> is applied to an array variable using compound assignment
-(see section <A HREF="b.html#SEC83">6.7 Arrays</A>), the
-variable's value is not unset (as it is when using <SAMP>`='</SAMP>), and new
-values are appended to the array beginning at one greater than the array's
-maximum index.
-When applied to a string-valued variable, <VAR>value</VAR> is expanded and
-appended to the variable's value.
-</P><P>
-
-<A NAME="Positional Parameters"></A>
-<HR SIZE="6">
-<A NAME="SEC25"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC24"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC26"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC24"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.4.1 Positional Parameters </H3>
-<!--docid::SEC25::-->
-<P>
-
-A <VAR>positional parameter</VAR> is a parameter denoted by one or more
-digits, other than the single digit <CODE>0</CODE>.  Positional parameters are
-assigned from the shell's arguments when it is invoked,
-and may be reassigned using the <CODE>set</CODE> builtin command.
-Positional parameter <CODE>N</CODE> may be referenced as <CODE>${N}</CODE>, or
-as <CODE>$N</CODE> when <CODE>N</CODE> consists of a single digit.
-Positional parameters may not be assigned to with assignment statements.
-The <CODE>set</CODE> and <CODE>shift</CODE> builtins are used to set and
-unset them (see section <A HREF="b.html#SEC56">4. Shell Builtin Commands</A>).
-The positional parameters are
-temporarily replaced when a shell function is executed
-(see section <A HREF="b.html#SEC23">3.3 Shell Functions</A>).
-</P><P>
-
-When a positional parameter consisting of more than a single
-digit is expanded, it must be enclosed in braces.
-</P><P>
-
-<A NAME="Special Parameters"></A>
-<HR SIZE="6">
-<A NAME="SEC26"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC25"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC24"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.4.2 Special Parameters </H3>
-<!--docid::SEC26::-->
-<P>
-
-The shell treats several parameters specially.  These parameters may
-only be referenced; assignment to them is not allowed.
-</P><P>
-
-<DL COMPACT>
-
-<A NAME="IDX46"></A>
-<DT><CODE>*</CODE>
-<DD><A NAME="IDX47"></A>
-Expands to the positional parameters, starting from one.  When the
-expansion occurs within double quotes, it expands to a single word
-with the value of each parameter separated by the first character
-of the <CODE>IFS</CODE>
-special variable.  That is, <CODE>"$*"</CODE> is equivalent
-to <CODE>"$1<VAR>c</VAR>$2<VAR>c</VAR><small>...</small>"</CODE>, where <VAR>c</VAR>
-is the first character of the value of the <CODE>IFS</CODE>
-variable.
-If <CODE>IFS</CODE> is unset, the parameters are separated by spaces.
-If <CODE>IFS</CODE> is null, the parameters are joined without intervening
-separators.
-<P>
-
-<A NAME="IDX48"></A>
-<DT><CODE>@</CODE>
-<DD><A NAME="IDX49"></A>
-Expands to the positional parameters, starting from one.  When the
-expansion occurs within double quotes, each parameter expands to a
-separate word.  That is, <CODE>"$@"</CODE> is equivalent to
-<CODE>"$1" "$2" <small>...</small></CODE>.
-If the double-quoted expansion occurs within a word, the expansion of
-the first parameter is joined with the beginning part of the original
-word, and the expansion of the last parameter is joined with the last
-part of the original word.
-When there are no positional parameters, <CODE>"$@"</CODE> and
-<CODE>$@</CODE>
-expand to nothing (i.e., they are removed).
-<P>
-
-<A NAME="IDX50"></A>
-<DT><CODE>#</CODE>
-<DD><A NAME="IDX51"></A>
-Expands to the number of positional parameters in decimal.
-<P>
-
-<A NAME="IDX52"></A>
-<DT><CODE>?</CODE>
-<DD><A NAME="IDX53"></A>
-Expands to the exit status of the most recently executed foreground
-pipeline.
-<P>
-
-<A NAME="IDX54"></A>
-<DT><CODE>-</CODE>
-<DD><A NAME="IDX55"></A>
-(A hyphen.)  Expands to the current option flags as specified upon
-invocation, by the <CODE>set</CODE>
-builtin command, or those set by the shell itself
-(such as the <SAMP>`-i'</SAMP> option).
-<P>
-
-<A NAME="IDX56"></A>
-<DT><CODE>$</CODE>
-<DD><A NAME="IDX57"></A>
-Expands to the process ID of the shell.  In a <CODE>()</CODE> subshell, it
-expands to the process ID of the invoking shell, not the subshell.
-<P>
-
-<A NAME="IDX58"></A>
-<DT><CODE>!</CODE>
-<DD><A NAME="IDX59"></A>
-Expands to the process ID of the most recently executed background
-(asynchronous) command.
-<P>
-
-<A NAME="IDX60"></A>
-<DT><CODE>0</CODE>
-<DD><A NAME="IDX61"></A>
-Expands to the name of the shell or shell script.  This is set at
-shell initialization.  If Bash is invoked with a file of commands
-(see section <A HREF="b.html#SEC55">3.8 Shell Scripts</A>), <CODE>$0</CODE> is set to the name of that file.
-If Bash is started with the <SAMP>`-c'</SAMP> option (see section <A HREF="b.html#SEC67">6.1 Invoking Bash</A>),
-then <CODE>$0</CODE> is set to the first argument after the string to be
-executed, if one is present.  Otherwise, it is set
-to the filename used to invoke Bash, as given by argument zero.
-<P>
-
-<A NAME="IDX62"></A>
-<DT><CODE>_</CODE>
-<DD><A NAME="IDX63"></A>
-(An underscore.)
-At shell startup, set to the absolute pathname used to invoke the
-shell or shell script being executed as passed in the environment
-or argument list.
-Subsequently, expands to the last argument to the previous command,
-after expansion.   
-Also set to the full pathname used to invoke each command executed
-and placed in the environment exported to that command.
-When checking mail, this parameter holds the name of the mail file.
-</DL>
-<P>
-
-<A NAME="Shell Expansions"></A>
-<HR SIZE="6">
-<A NAME="SEC27"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC26"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC28"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.5 Shell Expansions </H2>
-<!--docid::SEC27::-->
-<P>
-
-Expansion is performed on the command line after it has been split into
-<CODE>token</CODE>s.  There are seven kinds of expansion performed:
-<UL>
-<LI>brace expansion
-<LI>tilde expansion
-<LI>parameter and variable expansion
-<LI>command substitution
-<LI>arithmetic expansion
-<LI>word splitting
-<LI>filename expansion
-</UL>
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC28">3.5.1 Brace Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Expansion of expressions within braces.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC29">3.5.2 Tilde Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Expansion of the ~ character.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Bash expands variables to their values.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC31">3.5.4 Command Substitution</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Using the output of a command as an argument.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC32">3.5.5 Arithmetic Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to use arithmetic in shell expansions.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC33">3.5.6 Process Substitution</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A way to write and read to and from a
-                               command.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC34">3.5.7 Word Splitting</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How the results of expansion are split into separate
-                       arguments.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC35">3.5.8 Filename Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A shorthand for specifying filenames matching patterns.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC37">3.5.9 Quote Removal</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How and when quote characters are removed from
-                       words.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-The order of expansions is: brace expansion, tilde expansion,
-parameter, variable, and arithmetic expansion and
-command substitution
-(done in a left-to-right fashion), word splitting, and filename
-expansion.
-</P><P>
-
-On systems that can support it, there is an additional expansion
-available: <VAR>process substitution</VAR>.  This is performed at the
-same time as parameter, variable, and arithmetic expansion and
-command substitution.
-</P><P>
-
-Only brace expansion, word splitting, and filename expansion
-can change the number of words of the expansion; other expansions
-expand a single word to a single word.
-The only exceptions to this are the expansions of
-<CODE>"$@"</CODE> (see section <A HREF="b.html#SEC26">3.4.2 Special Parameters</A>) and <CODE>"${<VAR>name</VAR>[@]}"</CODE>
-(see section <A HREF="b.html#SEC83">6.7 Arrays</A>).
-</P><P>
-
-After all expansions, <CODE>quote removal</CODE> (see section <A HREF="b.html#SEC37">3.5.9 Quote Removal</A>)
-is performed.
-</P><P>
-
-<A NAME="Brace Expansion"></A>
-<HR SIZE="6">
-<A NAME="SEC28"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC29"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.1 Brace Expansion </H3>
-<!--docid::SEC28::-->
-<P>
-
-Brace expansion is a mechanism by which arbitrary strings may be generated.
-This mechanism is similar to
-<VAR>filename expansion</VAR> (see section <A HREF="b.html#SEC35">3.5.8 Filename Expansion</A>),
-but the file names generated need not exist.
-Patterns to be brace expanded take the form of an optional <VAR>preamble</VAR>,
-followed by either a series of comma-separated strings or a seqeunce expression
-between a pair of braces,
-followed by an optional <VAR>postscript</VAR>.
-The preamble is prefixed to each string contained within the braces, and
-the postscript is then appended to each resulting string, expanding left
-to right.
-</P><P>
-
-Brace expansions may be nested.
-The results of each expanded string are not sorted; left to right order
-is preserved.
-For example,
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bash$ echo a{d,c,b}e
-ade ace abe
-</pre></td></tr></table></P><P>
-
-A sequence expression takes the form <CODE>{<VAR>x</VAR>..<VAR>y</VAR>}</CODE>,
-where <VAR>x</VAR> and <VAR>y</VAR> are either integers or single characters.
-When integers are supplied, the expression expands to each number between
-<VAR>x</VAR> and <VAR>y</VAR>, inclusive.
-When characters are supplied, the expression expands to each character
-lexicographically between <VAR>x</VAR> and <VAR>y</VAR>, inclusive.  Note that
-both <VAR>x</VAR> and <VAR>y</VAR> must be of the same type.
-</P><P>
-
-Brace expansion is performed before any other expansions,
-and any characters special to other expansions are preserved
-in the result.  It is strictly textual.  Bash
-does not apply any syntactic interpretation to the context of the
-expansion or the text between the braces.
-To avoid conflicts with parameter expansion, the string <SAMP>`${'</SAMP>
-is not considered eligible for brace expansion.
-</P><P>
-
-A correctly-formed brace expansion must contain unquoted opening
-and closing braces, and at least one unquoted comma or a valid
-sequence expression.
-Any incorrectly formed brace expansion is left unchanged.
-</P><P>
-
-A { or <SAMP>`,'</SAMP> may be quoted with a backslash to prevent its
-being considered part of a brace expression.
-To avoid conflicts with parameter expansion, the string <SAMP>`${'</SAMP>
-is not considered eligible for brace expansion.
-</P><P>
-
-This construct is typically used as shorthand when the common
-prefix of the strings to be generated is longer than in the
-above example:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>mkdir /usr/local/src/bash/{old,new,dist,bugs}
-</pre></td></tr></table>or
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
-</pre></td></tr></table></P><P>
-
-<A NAME="Tilde Expansion"></A>
-<HR SIZE="6">
-<A NAME="SEC29"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC28"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC30"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC30"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.2 Tilde Expansion </H3>
-<!--docid::SEC29::-->
-<P>
-
-If a word begins with an unquoted tilde character (<SAMP>`~'</SAMP>), all of the
-characters up to the first unquoted slash (or all characters,
-if there is no unquoted slash) are considered a <VAR>tilde-prefix</VAR>.
-If none of the characters in the tilde-prefix are quoted, the
-characters in the tilde-prefix following the tilde are treated as a
-possible <VAR>login name</VAR>.
-If this login name is the null string, the tilde is replaced with the
-value of the <CODE>HOME</CODE> shell variable.
-If <CODE>HOME</CODE> is unset, the home directory of the user executing the
-shell is substituted instead.
-Otherwise, the tilde-prefix is replaced with the home directory
-associated with the specified login name.
-</P><P>
-
-If the tilde-prefix is <SAMP>`~+'</SAMP>, the value of
-the shell variable <CODE>PWD</CODE> replaces the tilde-prefix.
-If the tilde-prefix is <SAMP>`~-'</SAMP>, the value of the shell variable
-<CODE>OLDPWD</CODE>, if it is set, is substituted.
-</P><P>
-
-If the characters following the tilde in the tilde-prefix consist of a
-number <VAR>N</VAR>, optionally prefixed by a <SAMP>`+'</SAMP> or a <SAMP>`-'</SAMP>,
-the tilde-prefix is replaced with the
-corresponding element from the directory stack, as it would be displayed
-by the <CODE>dirs</CODE> builtin invoked with the characters following tilde
-in the tilde-prefix as an argument (see section <A HREF="b.html#SEC84">6.8 The Directory Stack</A>).
-If the tilde-prefix, sans the tilde, consists of a number without a
-leading <SAMP>`+'</SAMP> or <SAMP>`-'</SAMP>, <SAMP>`+'</SAMP> is assumed.
-</P><P>
-
-If the login name is invalid, or the tilde expansion fails, the word is
-left unchanged.
-</P><P>
-
-Each variable assignment is checked for unquoted tilde-prefixes immediately
-following a <SAMP>`:'</SAMP> or the first <SAMP>`='</SAMP>.
-In these cases, tilde expansion is also performed.
-Consequently, one may use file names with tildes in assignments to
-<CODE>PATH</CODE>, <CODE>MAILPATH</CODE>, and <CODE>CDPATH</CODE>,
-and the shell assigns the expanded value.
-</P><P>
-
-The following table shows how Bash treats unquoted tilde-prefixes:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>~</CODE>
-<DD>The value of <CODE>$HOME</CODE>
-<DT><CODE>~/foo</CODE>
-<DD><TT>`$HOME/foo'</TT>
-<P>
-
-<DT><CODE>~fred/foo</CODE>
-<DD>The subdirectory <CODE>foo</CODE> of the home directory of the user
-<CODE>fred</CODE>
-<P>
-
-<DT><CODE>~+/foo</CODE>
-<DD><TT>`$PWD/foo'</TT>
-<P>
-
-<DT><CODE>~-/foo</CODE>
-<DD><TT>`${OLDPWD-'~-'}/foo'</TT>
-<P>
-
-<DT><CODE>~<VAR>N</VAR></CODE>
-<DD>The string that would be displayed by <SAMP>`dirs +<VAR>N</VAR>'</SAMP>
-<P>
-
-<DT><CODE>~+<VAR>N</VAR></CODE>
-<DD>The string that would be displayed by <SAMP>`dirs +<VAR>N</VAR>'</SAMP>
-<P>
-
-<DT><CODE>~-<VAR>N</VAR></CODE>
-<DD>The string that would be displayed by <SAMP>`dirs -<VAR>N</VAR>'</SAMP>
-<P>
-
-</DL>
-<P>
-
-<A NAME="Shell Parameter Expansion"></A>
-<HR SIZE="6">
-<A NAME="SEC30"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC29"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC31"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC31"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.3 Shell Parameter Expansion </H3>
-<!--docid::SEC30::-->
-<P>
-
-The <SAMP>`$'</SAMP> character introduces parameter expansion,
-command substitution, or arithmetic expansion.  The parameter name
-or symbol to be expanded may be enclosed in braces, which
-are optional but serve to protect the variable to be expanded from
-characters immediately following it which could be
-interpreted as part of the name.
-</P><P>
-
-When braces are used, the matching ending brace is the first <SAMP>`}'</SAMP>
-not escaped by a backslash or within a quoted string, and not within an
-embedded arithmetic expansion, command substitution, or parameter
-expansion.
-</P><P>
-
-The basic form of parameter expansion is ${<VAR>parameter</VAR>}.
-The value of <VAR>parameter</VAR> is substituted.  The braces are required
-when <VAR>parameter</VAR>
-is a positional parameter with more than one digit,
-or when <VAR>parameter</VAR>
-is followed by a character that is not to be
-interpreted as part of its name.
-</P><P>
-
-If the first character of <VAR>parameter</VAR> is an exclamation point,
-a level of variable indirection is introduced.
-Bash uses the value of the variable formed from the rest of
-<VAR>parameter</VAR> as the name of the variable; this variable is then
-expanded and that value is used in the rest of the substitution, rather
-than the value of <VAR>parameter</VAR> itself.
-This is known as <CODE>indirect expansion</CODE>.
-The exceptions to this are the expansions of ${!<VAR>prefix*</VAR>}
-and ${!<VAR>name</VAR>[@]}
-described below.
-The exclamation point must immediately follow the left brace in order to
-introduce indirection.
-</P><P>
-
-In each of the cases below, <VAR>word</VAR> is subject to tilde expansion,
-parameter expansion, command substitution, and arithmetic expansion.
-</P><P>
-
-When not performing substring expansion, Bash tests for a parameter
-that is unset or null; omitting the colon results in a test only for a
-parameter that is unset.  Put another way, if the colon is included,
-the operator tests for both existence and that the value is not null;
-if the colon is omitted, the operator tests only for existence.
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>${<VAR>parameter</VAR>:-<VAR>word</VAR>}</CODE>
-<DD>If <VAR>parameter</VAR> is unset or null, the expansion of
-<VAR>word</VAR> is substituted.  Otherwise, the value of
-<VAR>parameter</VAR> is substituted.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>:=<VAR>word</VAR>}</CODE>
-<DD>If <VAR>parameter</VAR>
-is unset or null, the expansion of <VAR>word</VAR>
-is assigned to <VAR>parameter</VAR>.
-The value of <VAR>parameter</VAR> is then substituted. 
-Positional parameters and special parameters may not be assigned to
-in this way.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>:?<VAR>word</VAR>}</CODE>
-<DD>If <VAR>parameter</VAR>
-is null or unset, the expansion of <VAR>word</VAR> (or a message
-to that effect if <VAR>word</VAR>
-is not present) is written to the standard error and the shell, if it
-is not interactive, exits.  Otherwise, the value of <VAR>parameter</VAR> is
-substituted.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>:+<VAR>word</VAR>}</CODE>
-<DD>If <VAR>parameter</VAR>
-is null or unset, nothing is substituted, otherwise the expansion of
-<VAR>word</VAR> is substituted.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>:<VAR>offset</VAR>}</CODE>
-<DD><DT><CODE>${<VAR>parameter</VAR>:<VAR>offset</VAR>:<VAR>length</VAR>}</CODE>
-<DD>Expands to up to <VAR>length</VAR> characters of <VAR>parameter</VAR>
-starting at the character specified by <VAR>offset</VAR>.
-If <VAR>length</VAR> is omitted, expands to the substring of
-<VAR>parameter</VAR> starting at the character specified by <VAR>offset</VAR>.
-<VAR>length</VAR> and <VAR>offset</VAR> are arithmetic expressions
-(see section <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>).
-This is referred to as Substring Expansion.
-<P>
-
-<VAR>length</VAR> must evaluate to a number greater than or equal to zero.
-If <VAR>offset</VAR> evaluates to a number less than zero, the value
-is used as an offset from the end of the value of <VAR>parameter</VAR>.
-If <VAR>parameter</VAR> is <SAMP>`@'</SAMP>, the result is <VAR>length</VAR> positional
-parameters beginning at <VAR>offset</VAR>.
-If <VAR>parameter</VAR> is an array name indexed by <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the result is the <VAR>length</VAR>
-members of the array beginning with <CODE>${<VAR>parameter</VAR>[<VAR>offset</VAR>]}</CODE>.
-A negative <VAR>offset</VAR> is taken relative to one greater than the maximum
-index of the specified array.
-Note that a negative offset must be separated from the colon by at least
-one space to avoid being confused with the <SAMP>`:-'</SAMP> expansion.
-Substring indexing is zero-based unless the positional parameters
-are used, in which case the indexing starts at 1 by default.
-If <VAR>offset</VAR> is 0, and the positional parameters are used, <CODE>$@</CODE> is
-prefixed to the list.
-</P><P>
-
-<DT><CODE>${!<VAR>prefix</VAR>*}</CODE>
-<DD><DT><CODE>${!<VAR>prefix</VAR>@}</CODE>
-<DD>Expands to the names of variables whose names begin with <VAR>prefix</VAR>,
-separated by the first character of the <CODE>IFS</CODE> special variable.
-When <SAMP>`@'</SAMP> is used and the expansion appears within double quotes, each
-variable name expands to a separate word.
-<P>
-
-<DT><CODE>${!<VAR>name</VAR>[@]}</CODE>
-<DD><DT><CODE>${!<VAR>name</VAR>[*]}</CODE>
-<DD>If <VAR>name</VAR> is an array variable, expands to the list of array indices
-(keys) assigned in <VAR>name</VAR>.
-If <VAR>name</VAR> is not an array, expands to 0 if <VAR>name</VAR> is set and null
-otherwise.
-When <SAMP>`@'</SAMP> is used and the expansion appears within double quotes, each
-key expands to a separate word.
-<P>
-
-<DT><CODE>${#<VAR>parameter</VAR>}</CODE>
-<DD>The length in characters of the expanded value of <VAR>parameter</VAR> is
-substituted.
-If <VAR>parameter</VAR> is <SAMP>`*'</SAMP> or <SAMP>`@'</SAMP>, the value substituted
-is the number of positional parameters.
-If <VAR>parameter</VAR> is an array name subscripted by <SAMP>`*'</SAMP> or <SAMP>`@'</SAMP>, 
-the value substituted is the number of elements in the array.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>#<VAR>word</VAR>}</CODE>
-<DD><DT><CODE>${<VAR>parameter</VAR>##<VAR>word</VAR>}</CODE>
-<DD>The <VAR>word</VAR>
-is expanded to produce a pattern just as in filename
-expansion (see section <A HREF="b.html#SEC35">3.5.8 Filename Expansion</A>).  If the pattern matches
-the beginning of the expanded value of <VAR>parameter</VAR>,
-then the result of the expansion is the expanded value of <VAR>parameter</VAR>
-with the shortest matching pattern (the <SAMP>`#'</SAMP> case) or the
-longest matching pattern (the <SAMP>`##'</SAMP> case) deleted.
-If <VAR>parameter</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the pattern removal operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If <VAR>parameter</VAR> is an array variable subscripted with
-<SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the pattern removal operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>%<VAR>word</VAR>}</CODE>
-<DD><DT><CODE>${<VAR>parameter</VAR>%%<VAR>word</VAR>}</CODE>
-<DD>The <VAR>word</VAR> is expanded to produce a pattern just as in
-filename expansion.
-If the pattern matches a trailing portion of the expanded value of
-<VAR>parameter</VAR>, then the result of the expansion is the value of
-<VAR>parameter</VAR> with the shortest matching pattern (the <SAMP>`%'</SAMP> case)
-or the longest matching pattern (the <SAMP>`%%'</SAMP> case) deleted.
-If <VAR>parameter</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the pattern removal operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If <VAR>parameter</VAR>
-is an array variable subscripted with <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the pattern removal operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-<P>
-
-<DT><CODE>${<VAR>parameter</VAR>/<VAR>pattern</VAR>/<VAR>string</VAR>}</CODE>
-<DD><P>
-
-The <VAR>pattern</VAR> is expanded to produce a pattern just as in
-filename expansion.
-<VAR>Parameter</VAR> is expanded and the longest match of <VAR>pattern</VAR>
-against its value is replaced with <VAR>string</VAR>.
-If <VAR>pattern</VAR> begins with <SAMP>`/'</SAMP>, all matches of <VAR>pattern</VAR> are
-replaced with <VAR>string</VAR>.  Normally only the first match is replaced.
-If <VAR>pattern</VAR> begins with <SAMP>`#'</SAMP>, it must match at the beginning
-of the expanded value of <VAR>parameter</VAR>.
-If <VAR>pattern</VAR> begins with <SAMP>`%'</SAMP>, it must match at the end
-of the expanded value of <VAR>parameter</VAR>.
-If <VAR>string</VAR> is null, matches of <VAR>pattern</VAR> are deleted
-and the <CODE>/</CODE> following <VAR>pattern</VAR> may be omitted.
-If <VAR>parameter</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the substitution operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If <VAR>parameter</VAR>
-is an array variable subscripted with <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
-the substitution operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-</P><P>
-
-</DL>
-<P>
-
-<A NAME="Command Substitution"></A>
-<HR SIZE="6">
-<A NAME="SEC31"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC30"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC32"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC32"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.4 Command Substitution </H3>
-<!--docid::SEC31::-->
-<P>
-
-Command substitution allows the output of a command to replace
-the command itself.
-Command substitution occurs when a command is enclosed as follows:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>$(<VAR>command</VAR>)
-</pre></td></tr></table>or
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>`<VAR>command</VAR>`
-</pre></td></tr></table></P><P>
-
-Bash performs the expansion by executing <VAR>command</VAR> and
-replacing the command substitution with the standard output of the
-command, with any trailing newlines deleted.
-Embedded newlines are not deleted, but they may be removed during
-word splitting.
-The command substitution <CODE>$(cat <VAR>file</VAR>)</CODE> can be
-replaced by the equivalent but faster <CODE>$(&#60; <VAR>file</VAR>)</CODE>.
-</P><P>
-
-When the old-style backquote form of substitution is used,
-backslash retains its literal meaning except when followed by
-<SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, or <SAMP>`\'</SAMP>. 
-The first backquote not preceded by a backslash terminates the
-command substitution.
-When using the <CODE>$(<VAR>command</VAR>)</CODE> form, all characters between
-the parentheses make up the command; none are treated specially.
-</P><P>
-
-Command substitutions may be nested.  To nest when using the backquoted
-form, escape the inner backquotes with backslashes.
-</P><P>
-
-If the substitution appears within double quotes, word splitting and
-filename expansion are not performed on the results.
-</P><P>
-
-<A NAME="Arithmetic Expansion"></A>
-<HR SIZE="6">
-<A NAME="SEC32"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC31"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC33"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC33"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.5 Arithmetic Expansion </H3>
-<!--docid::SEC32::-->
-<P>
-
-Arithmetic expansion allows the evaluation of an arithmetic expression
-and the substitution of the result.  The format for arithmetic expansion is:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>$(( <VAR>expression</VAR> ))
-</pre></td></tr></table></P><P>
-
-The expression is treated as if it were within double quotes, but
-a double quote inside the parentheses is not treated specially.
-All tokens in the expression undergo parameter expansion, command
-substitution, and quote removal.
-Arithmetic expansions may be nested. 
-</P><P>
-
-The evaluation is performed according to the rules listed below
-(see section <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>).
-If the expression is invalid, Bash prints a message indicating
-failure to the standard error and no substitution occurs.
-</P><P>
-
-<A NAME="Process Substitution"></A>
-<HR SIZE="6">
-<A NAME="SEC33"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC32"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC34"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC34"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.6 Process Substitution </H3>
-<!--docid::SEC33::-->
-<P>
-
-Process substitution is supported on systems that support named
-pipes (FIFOs) or the <TT>`/dev/fd'</TT> method of naming open files.
-It takes the form of 
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#60;(<VAR>list</VAR>)
-</pre></td></tr></table>or
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#62;(<VAR>list</VAR>)
-</pre></td></tr></table>The process <VAR>list</VAR> is run with its input or output connected to a
-FIFO or some file in <TT>`/dev/fd'</TT>.  The name of this file is
-passed as an argument to the current command as the result of the
-expansion.  If the <CODE>&#62;(<VAR>list</VAR>)</CODE> form is used, writing to
-the file will provide input for <VAR>list</VAR>.  If the
-<CODE>&#60;(<VAR>list</VAR>)</CODE> form is used, the file passed as an
-argument should be read to obtain the output of <VAR>list</VAR>.
-Note that no space may appear between the <CODE>&#60;</CODE> or <CODE>&#62;</CODE>
-and the left parenthesis, otherwise the construct would be interpreted
-as a redirection.
-</P><P>
-
-When available, process substitution is performed simultaneously with
-parameter and variable expansion, command substitution, and arithmetic
-expansion.
-</P><P>
-
-<A NAME="Word Splitting"></A>
-<HR SIZE="6">
-<A NAME="SEC34"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC33"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC35"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC35"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.7 Word Splitting </H3>
-<!--docid::SEC34::-->
-<P>
-
-The shell scans the results of parameter expansion, command substitution,
-and arithmetic expansion that did not occur within double quotes for
-word splitting.
-</P><P>
-
-The shell treats each character of <CODE>$IFS</CODE> as a delimiter, and splits
-the results of the other expansions into words on these characters.
-If <CODE>IFS</CODE> is unset, or its value is exactly <CODE>&#60;space&#62;&#60;tab&#62;&#60;newline&#62;</CODE>,
-the default, then sequences of
-<CODE> &#60;space&#62;</CODE>, <CODE>&#60;tab&#62;</CODE>, and <CODE>&#60;newline&#62;</CODE>
-at the beginning and end of the results of the previous
-expansions are ignored, and any sequence of <CODE>IFS</CODE>
-characters not at the beginning or end serves to delimit words.
-If <CODE>IFS</CODE> has a value other than the default, then sequences of
-the whitespace characters <CODE>space</CODE> and <CODE>tab</CODE>
-are ignored at the beginning and end of the
-word, as long as the whitespace character is in the
-value of <CODE>IFS</CODE> (an <CODE>IFS</CODE> whitespace character).
-Any character in <CODE>IFS</CODE> that is not <CODE>IFS</CODE>
-whitespace, along with any adjacent <CODE>IFS</CODE>
-whitespace characters, delimits a field.  A sequence of <CODE>IFS</CODE>
-whitespace characters is also treated as a delimiter.
-If the value of <CODE>IFS</CODE> is null, no word splitting occurs.
-</P><P>
-
-Explicit null arguments (<CODE>""</CODE> or <CODE>"</CODE>) are retained.
-Unquoted implicit null arguments, resulting from the expansion of
-parameters that have no values, are removed.
-If a parameter with no value is expanded within double quotes, a
-null argument results and is retained.
-</P><P>
-
-Note that if no expansion occurs, no splitting
-is performed.
-</P><P>
-
-<A NAME="Filename Expansion"></A>
-<HR SIZE="6">
-<A NAME="SEC35"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC34"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC36"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC37"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC37"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.8 Filename Expansion </H3>
-<!--docid::SEC35::-->
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How the shell matches patterns.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<A NAME="IDX64"></A>
-<A NAME="IDX65"></A>
-<A NAME="IDX66"></A>
-<A NAME="IDX67"></A>
-<P>
-
-After word splitting, unless the <SAMP>`-f'</SAMP> option has been set
-(see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>), Bash scans each word for the characters
-<SAMP>`*'</SAMP>, <SAMP>`?'</SAMP>, and <SAMP>`['</SAMP>.
-If one of these characters appears, then the word is
-regarded as a <VAR>pattern</VAR>,
-and replaced with an alphabetically sorted list of
-file names matching the pattern. If no matching file names are found,
-and the shell option <CODE>nullglob</CODE> is disabled, the word is left
-unchanged.
-If the <CODE>nullglob</CODE> option is set, and no matches are found, the word
-is removed.
-If the <CODE>failglob</CODE> shell option is set, and no matches are found,
-an error message is printed and the command is not executed.
-If the shell option <CODE>nocaseglob</CODE> is enabled, the match is performed
-without regard to the case of alphabetic characters.
-</P><P>
-
-When a pattern is used for filename generation, the character <SAMP>`.'</SAMP>
-at the start of a filename or immediately following a slash
-must be matched explicitly, unless the shell option <CODE>dotglob</CODE> is set.
-When matching a file name, the slash character must always be
-matched explicitly.
-In other cases, the <SAMP>`.'</SAMP> character is not treated specially.
-</P><P>
-
-See the description of <CODE>shopt</CODE> in <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>,
-for a description of the <CODE>nocaseglob</CODE>, <CODE>nullglob</CODE>,
-<CODE>failglob</CODE>, and <CODE>dotglob</CODE> options.
-</P><P>
-
-The <CODE>GLOBIGNORE</CODE>
-shell variable may be used to restrict the set of filenames matching a
-pattern.  If <CODE>GLOBIGNORE</CODE>
-is set, each matching filename that also matches one of the patterns in
-<CODE>GLOBIGNORE</CODE> is removed from the list of matches.  The filenames
-<TT>`.'</TT> and <TT>`..'</TT>
-are always ignored when <CODE>GLOBIGNORE</CODE>
-is set and not null.
-However, setting <CODE>GLOBIGNORE</CODE> to a non-null value has the effect of
-enabling the <CODE>dotglob</CODE>
-shell option, so all other filenames beginning with a
-<SAMP>`.'</SAMP> will match.
-To get the old behavior of ignoring filenames beginning with a
-<SAMP>`.'</SAMP>, make <SAMP>`.*'</SAMP> one of the patterns in <CODE>GLOBIGNORE</CODE>.
-The <CODE>dotglob</CODE> option is disabled when <CODE>GLOBIGNORE</CODE>
-is unset.
-</P><P>
-
-<A NAME="Pattern Matching"></A>
-<HR SIZE="6">
-<A NAME="SEC36"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC35"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC37"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC37"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC35"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC37"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H4> 3.5.8.1 Pattern Matching </H4>
-<!--docid::SEC36::-->
-<P>
-
-Any character that appears in a pattern, other than the special pattern
-characters described below, matches itself.
-The NUL character may not occur in a pattern.
-A backslash escapes the following character; the
-escaping backslash is discarded when matching.
-The special pattern characters must be quoted if they are to be matched
-literally.
-</P><P>
-
-The special pattern characters have the following meanings:
-<DL COMPACT>
-<DT><CODE>*</CODE>
-<DD>Matches any string, including the null string.
-<DT><CODE>?</CODE>
-<DD>Matches any single character.
-<DT><CODE>[<small>...</small>]</CODE>
-<DD>Matches any one of the enclosed characters.  A pair of characters
-separated by a hyphen denotes a <VAR>range expression</VAR>;
-any character that sorts between those two characters, inclusive,
-using the current locale's collating sequence and character set,
-is matched.  If the first character following the
-<SAMP>`['</SAMP> is a <SAMP>`!'</SAMP>  or a <SAMP>`^'</SAMP>
-then any character not enclosed is matched.  A <SAMP>`-'</SAMP>
-may be matched by including it as the first or last character
-in the set.  A <SAMP>`]'</SAMP> may be matched by including it as the first
-character in the set.
-The sorting order of characters in range expressions is determined by
-the current locale and the value of the <CODE>LC_COLLATE</CODE> shell variable,
-if set.
-<P>
-
-For example, in the default C locale, <SAMP>`[a-dx-z]'</SAMP> is equivalent to
-<SAMP>`[abcdxyz]'</SAMP>.  Many locales sort characters in dictionary order, and in
-these locales <SAMP>`[a-dx-z]'</SAMP> is typically not equivalent to <SAMP>`[abcdxyz]'</SAMP>;
-it might be equivalent to <SAMP>`[aBbCcDdxXyYz]'</SAMP>, for example.  To obtain
-the traditional interpretation of ranges in bracket expressions, you can
-force the use of the C locale by setting the <CODE>LC_COLLATE</CODE> or
-<CODE>LC_ALL</CODE> environment variable to the value <SAMP>`C'</SAMP>.
-</P><P>
-
-Within <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, <VAR>character classes</VAR> can be specified
-using the syntax
-<CODE>[:</CODE><VAR>class</VAR><CODE>:]</CODE>, where <VAR>class</VAR> is one of the
-following classes defined in the POSIX standard:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>alnum   alpha   ascii   blank   cntrl   digit   graph   lower
-print   punct   space   upper   word    xdigit
-</pre></td></tr></table>A character class matches any character belonging to that class.
-The <CODE>word</CODE> character class matches letters, digits, and the character
-<SAMP>`_'</SAMP>.
-</P><P>
-
-Within <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, an <VAR>equivalence class</VAR> can be
-specified using the syntax <CODE>[=</CODE><VAR>c</VAR><CODE>=]</CODE>, which
-matches all characters with the same collation weight (as defined
-by the current locale) as the character <VAR>c</VAR>.
-</P><P>
-
-Within <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, the syntax <CODE>[.</CODE><VAR>symbol</VAR><CODE>.]</CODE>
-matches the collating symbol <VAR>symbol</VAR>.
-</DL>
-<P>
-
-If the <CODE>extglob</CODE> shell option is enabled using the <CODE>shopt</CODE>
-builtin, several extended pattern matching operators are recognized.
-In the following description, a <VAR>pattern-list</VAR> is a list of one
-or more patterns separated by a <SAMP>`|'</SAMP>.
-Composite patterns may be formed using one or more of the following
-sub-patterns:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>?(<VAR>pattern-list</VAR>)</CODE>
-<DD>Matches zero or one occurrence of the given patterns.
-<P>
-
-<DT><CODE>*(<VAR>pattern-list</VAR>)</CODE>
-<DD>Matches zero or more occurrences of the given patterns.
-<P>
-
-<DT><CODE>+(<VAR>pattern-list</VAR>)</CODE>
-<DD>Matches one or more occurrences of the given patterns.
-<P>
-
-<DT><CODE>@(<VAR>pattern-list</VAR>)</CODE>
-<DD>Matches one of the given patterns.
-<P>
-
-<DT><CODE>!(<VAR>pattern-list</VAR>)</CODE>
-<DD>Matches anything except one of the given patterns.
-</DL>
-<P>
-
-<A NAME="Quote Removal"></A>
-<HR SIZE="6">
-<A NAME="SEC37"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC36"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC27"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.5.9 Quote Removal </H3>
-<!--docid::SEC37::-->
-<P>
-
-After the preceding expansions, all unquoted occurrences of the
-characters <SAMP>`\'</SAMP>, <SAMP>`''</SAMP>, and <SAMP>`"'</SAMP> that did not
-result from one of the above expansions are removed.
-</P><P>
-
-<A NAME="Redirections"></A>
-<HR SIZE="6">
-<A NAME="SEC38"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC37"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC39"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.6 Redirections </H2>
-<!--docid::SEC38::-->
-<P>
-
-Before a command is executed, its input and output
-may be <VAR>redirected</VAR>
-using a special notation interpreted by the shell.
-Redirection may also be used to open and close files for the
-current shell execution environment.  The following redirection
-operators may precede or appear anywhere within a
-simple command or may follow a command.
-Redirections are processed in the order they appear, from
-left to right.
-</P><P>
-
-In the following descriptions, if the file descriptor number is
-omitted, and the first character of the redirection operator is
-<SAMP>`&#60;'</SAMP>, the redirection refers to the standard input (file
-descriptor 0).  If the first character of the redirection operator
-is <SAMP>`&#62;'</SAMP>, the redirection refers to the standard output (file
-descriptor 1).
-</P><P>
-
-The word following the redirection operator in the following
-descriptions, unless otherwise noted, is subjected to brace expansion,
-tilde expansion, parameter expansion, command substitution, arithmetic
-expansion, quote removal, filename expansion, and word splitting.
-If it expands to more than one word, Bash reports an error.
-</P><P>
-
-Note that the order of redirections is significant.  For example,
-the command
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>ls &#62; <VAR>dirlist</VAR> 2&#62;&#38;1
-</pre></td></tr></table>directs both standard output (file descriptor 1) and standard error
-(file descriptor 2) to the file <VAR>dirlist</VAR>, while the command
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>ls 2&#62;&#38;1 &#62; <VAR>dirlist</VAR>
-</pre></td></tr></table>directs only the standard output to file <VAR>dirlist</VAR>,
-because the standard error was duplicated as standard output
-before the standard output was redirected to <VAR>dirlist</VAR>.
-</P><P>
-
-Bash handles several filenames specially when they are used in
-redirections, as described in the following table:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>/dev/fd/<VAR>fd</VAR></CODE>
-<DD>If <VAR>fd</VAR> is a valid integer, file descriptor <VAR>fd</VAR> is duplicated.
-<P>
-
-<DT><CODE>/dev/stdin</CODE>
-<DD>File descriptor 0 is duplicated.
-<P>
-
-<DT><CODE>/dev/stdout</CODE>
-<DD>File descriptor 1 is duplicated.
-<P>
-
-<DT><CODE>/dev/stderr</CODE>
-<DD>File descriptor 2 is duplicated.
-<P>
-
-<DT><CODE>/dev/tcp/<VAR>host</VAR>/<VAR>port</VAR></CODE>
-<DD>If <VAR>host</VAR> is a valid hostname or Internet address, and <VAR>port</VAR>
-is an integer port number or service name, Bash attempts to open a TCP
-connection to the corresponding socket.
-<P>
-
-<DT><CODE>/dev/udp/<VAR>host</VAR>/<VAR>port</VAR></CODE>
-<DD>If <VAR>host</VAR> is a valid hostname or Internet address, and <VAR>port</VAR>
-is an integer port number or service name, Bash attempts to open a UDP
-connection to the corresponding socket.
-<P>
-
-</DL>
-<P>
-
-A failure to open or create a file causes the redirection to fail.
-</P><P>
-
-Redirections using file descriptors greater than 9 should be used with
-care, as they may conflict with file descriptors the shell uses
-internally.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC39"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC40"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.1 Redirecting Input </H3>
-<!--docid::SEC39::-->
-Redirection of input causes the file whose name results from
-the expansion of <VAR>word</VAR>
-to be opened for reading on file descriptor <CODE>n</CODE>,
-or the standard input (file descriptor 0) if <CODE>n</CODE>
-is not specified.
-<P>
-
-The general format for redirecting input is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#60;<VAR>word</VAR>
-</pre></td></tr></table></P><P>
-
-<HR SIZE="6">
-<A NAME="SEC40"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC39"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC41"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC41"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.2 Redirecting Output </H3>
-<!--docid::SEC40::-->
-Redirection of output causes the file whose name results from
-the expansion of <VAR>word</VAR>
-to be opened for writing on file descriptor <VAR>n</VAR>,
-or the standard output (file descriptor 1) if <VAR>n</VAR>
-is not specified.  If the file does not exist it is created;
-if it does exist it is truncated to zero size.
-<P>
-
-The general format for redirecting output is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#62;[|]<VAR>word</VAR>
-</pre></td></tr></table></P><P>
-
-If the redirection operator is <SAMP>`&#62;'</SAMP>, and the <CODE>noclobber</CODE>
-option to the <CODE>set</CODE> builtin has been enabled, the redirection
-will fail if the file whose name results from the expansion of
-<VAR>word</VAR> exists and is a regular file.
-If the redirection operator is <SAMP>`&#62;|'</SAMP>, or the redirection operator is
-<SAMP>`&#62;'</SAMP> and the <CODE>noclobber</CODE> option is not enabled, the redirection
-is attempted even if the file named by <VAR>word</VAR> exists.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC41"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC40"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC42"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC42"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.3 Appending Redirected Output </H3>
-<!--docid::SEC41::-->
-Redirection of output in this fashion
-causes the file whose name results from
-the expansion of <VAR>word</VAR>
-to be opened for appending on file descriptor <VAR>n</VAR>,
-or the standard output (file descriptor 1) if <VAR>n</VAR>
-is not specified.  If the file does not exist it is created.
-<P>
-
-The general format for appending output is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#62;&#62;<VAR>word</VAR>
-</pre></td></tr></table></P><P>
-
-<HR SIZE="6">
-<A NAME="SEC42"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC41"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC43"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC43"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.4 Redirecting Standard Output and Standard Error </H3>
-<!--docid::SEC42::-->
-Bash allows both the
-standard output (file descriptor 1) and
-the standard error output (file descriptor 2)
-to be redirected to the file whose name is the
-expansion of <VAR>word</VAR> with this construct.
-<P>
-
-There are two formats for redirecting standard output and
-standard error:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#38;&#62;<VAR>word</VAR>
-</pre></td></tr></table>and
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#62;&#38;<VAR>word</VAR>
-</pre></td></tr></table>Of the two forms, the first is preferred.
-This is semantically equivalent to
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#62;<VAR>word</VAR> 2&#62;&#38;1
-</pre></td></tr></table></P><P>
-
-<HR SIZE="6">
-<A NAME="SEC43"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC42"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC44"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC44"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.5 Here Documents </H3>
-<!--docid::SEC43::-->
-This type of redirection instructs the shell to read input from the
-current source until a line containing only <VAR>word</VAR>
-(with no trailing blanks) is seen.  All of
-the lines read up to that point are then used as the standard
-input for a command.
-<P>
-
-The format of here-documents is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#60;&#60;[-]<VAR>word</VAR>
-        <VAR>here-document</VAR>
-<VAR>delimiter</VAR>
-</pre></td></tr></table></P><P>
-
-No parameter expansion, command substitution, arithmetic expansion,
-or filename expansion is performed on
-<VAR>word</VAR>.  If any characters in <VAR>word</VAR> are quoted, the
-<VAR>delimiter</VAR> is the result of quote removal on <VAR>word</VAR>,
-and the lines in the here-document are not expanded.
-If <VAR>word</VAR> is unquoted,
-all lines of the here-document are subjected to parameter expansion,
-command substitution, and arithmetic expansion.  In the latter
-case, the character sequence <CODE>\newline</CODE> is ignored, and <SAMP>`\'</SAMP>
-must be used to quote the characters
-<SAMP>`\'</SAMP>, <SAMP>`$'</SAMP>, and <SAMP>``'</SAMP>.
-</P><P>
-
-If the redirection operator is <SAMP>`&#60;&#60;-'</SAMP>,
-then all leading tab characters are stripped from input lines and the
-line containing <VAR>delimiter</VAR>.
-This allows here-documents within shell scripts to be indented in a
-natural fashion.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC44"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC43"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC45"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC45"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.6 Here Strings </H3>
-<!--docid::SEC44::-->
-A variant of here documents, the format is:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>&#60;&#60;&#60; <VAR>word</VAR>
-</pre></td></tr></table><P>
-
-The <VAR>word</VAR> is expanded and supplied to the command on its standard
-input.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC45"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC44"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC46"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC46"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.7 Duplicating File Descriptors </H3>
-<!--docid::SEC45::-->
-The redirection operator
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#60;&#38;<VAR>word</VAR>
-</pre></td></tr></table>is used to duplicate input file descriptors.
-If <VAR>word</VAR>
-expands to one or more digits, the file descriptor denoted by <VAR>n</VAR>
-is made to be a copy of that file descriptor.
-If the digits in <VAR>word</VAR> do not specify a file descriptor open for
-input, a redirection error occurs.
-If <VAR>word</VAR>
-evaluates to <SAMP>`-'</SAMP>, file descriptor <VAR>n</VAR> is closed.  If
-<VAR>n</VAR> is not specified, the standard input (file descriptor 0) is used.
-<P>
-
-The operator
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#62;&#38;<VAR>word</VAR>
-</pre></td></tr></table>is used similarly to duplicate output file descriptors.  If
-<VAR>n</VAR> is not specified, the standard output (file descriptor 1) is used.
-If the digits in <VAR>word</VAR> do not specify a file descriptor open for
-output, a redirection error occurs.
-As a special case, if <VAR>n</VAR> is omitted, and <VAR>word</VAR> does not
-expand to one or more digits, the standard output and standard
-error are redirected as described previously.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC46"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC45"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC47"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC47"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.8 Moving File Descriptors </H3>
-<!--docid::SEC46::-->
-The redirection operator
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#60;&#38;<VAR>digit</VAR>-
-</pre></td></tr></table>moves the file descriptor <VAR>digit</VAR> to file descriptor <VAR>n</VAR>,
-or the standard input (file descriptor 0) if <VAR>n</VAR> is not specified.
-<VAR>digit</VAR> is closed after being duplicated to <VAR>n</VAR>.
-<P>
-
-Similarly, the redirection operator
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#62;&#38;<VAR>digit</VAR>-
-</pre></td></tr></table>moves the file descriptor <VAR>digit</VAR> to file descriptor <VAR>n</VAR>,
-or the standard output (file descriptor 1) if <VAR>n</VAR> is not specified.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC47"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC46"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC38"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.6.9 Opening File Descriptors for Reading and Writing </H3>
-<!--docid::SEC47::-->
-The redirection operator
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[<VAR>n</VAR>]&#60;&#62;<VAR>word</VAR>
-</pre></td></tr></table>causes the file whose name is the expansion of <VAR>word</VAR>
-to be opened for both reading and writing on file descriptor
-<VAR>n</VAR>, or on file descriptor 0 if <VAR>n</VAR>
-is not specified.  If the file does not exist, it is created.
-<P>
-
-<A NAME="Executing Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC48"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC47"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC49"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.7 Executing Commands </H2>
-<!--docid::SEC48::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC49">3.7.1 Simple Command Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Bash expands simple commands before
-                               executing them.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC50">3.7.2 Command Search and Execution</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Bash finds commands and runs them.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC51">3.7.3 Command Execution Environment</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The environment in which Bash
-                                       executes commands that are not
-                                       shell builtins.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC52">3.7.4 Environment</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The environment given to a command.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC53">3.7.5 Exit Status</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The status returned by commands and how Bash
-                       interprets it.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC54">3.7.6 Signals</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What happens when Bash or a command it runs
-                       receives a signal.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Simple Command Expansion"></A>
-<HR SIZE="6">
-<A NAME="SEC49"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC50"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.7.1 Simple Command Expansion </H3>
-<!--docid::SEC49::-->
-<P>
-
-When a simple command is executed, the shell performs the following
-expansions, assignments, and redirections, from left to right.
-</P><P>
-
-<OL>
-<LI>
-The words that the parser has marked as variable assignments (those
-preceding the command name) and redirections are saved for later
-processing.
-<P>
-
-<LI>
-The words that are not variable assignments or redirections are
-expanded (see section <A HREF="b.html#SEC27">3.5 Shell Expansions</A>).
-If any words remain after expansion, the first word
-is taken to be the name of the command and the remaining words are
-the arguments.
-<P>
-
-<LI>
-Redirections are performed as described above (see section <A HREF="b.html#SEC38">3.6 Redirections</A>).
-<P>
-
-<LI>
-The text after the <SAMP>`='</SAMP> in each variable assignment undergoes tilde
-expansion, parameter expansion, command substitution, arithmetic expansion,
-and quote removal before being assigned to the variable.
-</OL>
-<P>
-
-If no command name results, the variable assignments affect the current
-shell environment.  Otherwise, the variables are added to the environment
-of the executed command and do not affect the current shell environment.
-If any of the assignments attempts to assign a value to a readonly variable,
-an error occurs, and the command exits with a non-zero status.
-</P><P>
-
-If no command name results, redirections are performed, but do not
-affect the current shell environment.  A redirection error causes the
-command to exit with a non-zero status.
-</P><P>
-
-If there is a command name left after expansion, execution proceeds as
-described below.  Otherwise, the command exits.  If one of the expansions
-contained a command substitution, the exit status of the command is
-the exit status of the last command substitution performed.  If there
-were no command substitutions, the command exits with a status of zero.
-</P><P>
-
-<A NAME="Command Search and Execution"></A>
-<HR SIZE="6">
-<A NAME="SEC50"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC49"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC51"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC51"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.7.2 Command Search and Execution </H3>
-<!--docid::SEC50::-->
-<P>
-
-After a command has been split into words, if it results in a
-simple command and an optional list of arguments, the following
-actions are taken.
-</P><P>
-
-<OL>
-<LI>
-If the command name contains no slashes, the shell attempts to
-locate it.  If there exists a shell function by that name, that
-function is invoked as described in <A HREF="b.html#SEC23">3.3 Shell Functions</A>.
-<P>
-
-<LI>
-If the name does not match a function, the shell searches for
-it in the list of shell builtins.  If a match is found, that
-builtin is invoked.
-<P>
-
-<LI>
-If the name is neither a shell function nor a builtin,
-and contains no slashes, Bash searches each element of
-<CODE>$PATH</CODE> for a directory containing an executable file
-by that name.  Bash uses a hash table to remember the full
-pathnames of executable files to avoid multiple <CODE>PATH</CODE> searches
-(see the description of <CODE>hash</CODE> in <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-A full search of the directories in <CODE>$PATH</CODE>
-is performed only if the command is not found in the hash table.
-If the search is unsuccessful, the shell prints an error
-message and returns an exit status of 127.
-<P>
-
-<LI>
-If the search is successful, or if the command name contains
-one or more slashes, the shell executes the named program in
-a separate execution environment.
-Argument 0 is set to the name given, and the remaining arguments
-to the command are set to the arguments supplied, if any.
-<P>
-
-<LI>
-If this execution fails because the file is not in executable
-format, and the file is not a directory, it is assumed to be a
-<VAR>shell script</VAR> and the shell executes it as described in
-<A HREF="b.html#SEC55">3.8 Shell Scripts</A>.
-<P>
-
-<LI>
-If the command was not begun asynchronously, the shell waits for
-the command to complete and collects its exit status.
-<P>
-
-</OL>
-<P>
-
-<A NAME="Command Execution Environment"></A>
-<HR SIZE="6">
-<A NAME="SEC51"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC50"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC52"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC52"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.7.3 Command Execution Environment </H3>
-<!--docid::SEC51::-->
-<P>
-
-The shell has an <VAR>execution environment</VAR>, which consists of the
-following:
-</P><P>
-
-<UL>
-<LI>
-open files inherited by the shell at invocation, as modified by
-redirections supplied to the <CODE>exec</CODE> builtin
-<P>
-
-<LI>
-the current working directory as set by <CODE>cd</CODE>, <CODE>pushd</CODE>, or
-<CODE>popd</CODE>, or inherited by the shell at invocation
-<P>
-
-<LI>
-the file creation mode mask as set by <CODE>umask</CODE> or inherited from
-the shell's parent
-<P>
-
-<LI>
-current traps set by <CODE>trap</CODE>
-<P>
-
-<LI>
-shell parameters that are set by variable assignment or with <CODE>set</CODE>
-or inherited from the shell's parent in the environment
-<P>
-
-<LI>
-shell functions defined during execution or inherited from the shell's
-parent in the environment
-<P>
-
-<LI>
-options enabled at invocation (either by default or with command-line
-arguments) or by <CODE>set</CODE>
-<P>
-
-<LI>
-options enabled by <CODE>shopt</CODE> (see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>)
-<P>
-
-<LI>
-shell aliases defined with <CODE>alias</CODE> (see section <A HREF="b.html#SEC82">6.6 Aliases</A>)
-<P>
-
-<LI>
-various process IDs, including those of background jobs
-(see section <A HREF="b.html#SEC18">3.2.3 Lists of Commands</A>), the value of <CODE>$$</CODE>, and the value of
-<CODE>$PPID</CODE>
-<P>
-
-</UL>
-<P>
-
-When a simple command other than a builtin or shell function
-is to be executed, it
-is invoked in a separate execution environment that consists of
-the following.  Unless otherwise noted, the values are inherited
-from the shell.
-</P><P>
-
-<UL>
-<LI>
-the shell's open files, plus any modifications and additions specified
-by redirections to the command
-<P>
-
-<LI>
-the current working directory
-<P>
-
-<LI>
-the file creation mode mask
-<P>
-
-<LI>
-shell variables and functions marked for export, along with variables
-exported for the command, passed in the environment (see section <A HREF="b.html#SEC52">3.7.4 Environment</A>)
-<P>
-
-<LI>
-traps caught by the shell are reset to the values inherited from the
-shell's parent, and traps ignored by the shell are ignored
-<P>
-
-</UL>
-<P>
-
-A command invoked in this separate environment cannot affect the
-shell's execution environment. 
-</P><P>
-
-Command substitution, commands grouped with parentheses,
-and asynchronous commands are invoked in a
-subshell environment that is a duplicate of the shell environment,
-except that traps caught by the shell are reset to the values
-that the shell inherited from its parent at invocation.  Builtin
-commands that are invoked as part of a pipeline are also executed
-in a subshell environment.  Changes made to the subshell environment
-cannot affect the shell's execution environment.
-</P><P>
-
-If a command is followed by a <SAMP>`&#38;'</SAMP> and job control is not active, the
-default standard input for the command is the empty file <TT>`/dev/null'</TT>.
-Otherwise, the invoked command inherits the file descriptors of the calling
-shell as modified by redirections.
-</P><P>
-
-<A NAME="Environment"></A>
-<HR SIZE="6">
-<A NAME="SEC52"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC51"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC53"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC53"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.7.4 Environment </H3>
-<!--docid::SEC52::-->
-<P>
-
-When a program is invoked it is given an array of strings
-called the <VAR>environment</VAR>.
-This is a list of name-value pairs, of the form <CODE>name=value</CODE>.
-</P><P>
-
-Bash provides several ways to manipulate the environment.
-On invocation, the shell scans its own environment and
-creates a parameter for each name found, automatically marking
-it for <VAR>export</VAR>
-to child processes.  Executed commands inherit the environment.
-The <CODE>export</CODE> and <SAMP>`declare -x'</SAMP>
-commands allow parameters and functions to be added to and
-deleted from the environment.  If the value of a parameter
-in the environment is modified, the new value becomes part
-of the environment, replacing the old.  The environment
-inherited by any executed command consists of the shell's
-initial environment, whose values may be modified in the shell,
-less any pairs removed by the <CODE>unset</CODE> and <SAMP>`export -n'</SAMP>
-commands, plus any additions via the <CODE>export</CODE> and
-<SAMP>`declare -x'</SAMP> commands.
-</P><P>
-
-The environment for any simple command
-or function may be augmented temporarily by prefixing it with
-parameter assignments, as described in <A HREF="b.html#SEC24">3.4 Shell Parameters</A>.
-These assignment statements affect only the environment seen
-by that command.
-</P><P>
-
-If the <SAMP>`-k'</SAMP> option is set (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>), then all
-parameter assignments are placed in the environment for a command,
-not just those that precede the command name.
-</P><P>
-
-When Bash invokes an external command, the variable <SAMP>`$_'</SAMP>
-is set to the full path name of the command and passed to that
-command in its environment.
-</P><P>
-
-<A NAME="Exit Status"></A>
-<HR SIZE="6">
-<A NAME="SEC53"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC52"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC54"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC54"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.7.5 Exit Status </H3>
-<!--docid::SEC53::-->
-<P>
-
-For the shell's purposes, a command which exits with a
-zero exit status has succeeded.
-A non-zero exit status indicates failure.
-This seemingly counter-intuitive scheme is used so there
-is one well-defined way to indicate success and a variety of
-ways to indicate various failure modes.
-When a command terminates on a fatal signal whose number is <VAR>N</VAR>,
-Bash uses the value 128+<VAR>N</VAR> as the exit status.
-</P><P>
-
-If a command is not found, the child process created to
-execute it returns a status of 127.  If a command is found  
-but is not executable, the return status is 126.
-</P><P>
-
-If a command fails because of an error during expansion or redirection,
-the exit status is greater than zero.
-</P><P>
-
-The exit status is used by the Bash conditional commands
-(see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>) and some of the list
-constructs (see section <A HREF="b.html#SEC18">3.2.3 Lists of Commands</A>).
-</P><P>
-
-All of the Bash builtins return an exit status of zero if they succeed
-and a non-zero status on failure, so they may be used by the
-conditional and list constructs.
-All builtins return an exit status of 2 to indicate incorrect usage.
-</P><P>
-
-<A NAME="Signals"></A>
-<HR SIZE="6">
-<A NAME="SEC54"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC53"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC48"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 3.7.6 Signals </H3>
-<!--docid::SEC54::-->
-<P>
-
-When Bash is interactive, in the absence of any traps, it ignores
-<CODE>SIGTERM</CODE> (so that <SAMP>`kill 0'</SAMP> does not kill an interactive shell),
-and <CODE>SIGINT</CODE>
-is caught and handled (so that the <CODE>wait</CODE> builtin is interruptible).
-When Bash receives a <CODE>SIGINT</CODE>, it breaks out of any executing loops.
-In all cases, Bash ignores <CODE>SIGQUIT</CODE>.
-If job control is in effect (see section <A HREF="b.html#SEC89">7. Job Control</A>), Bash
-ignores <CODE>SIGTTIN</CODE>, <CODE>SIGTTOU</CODE>, and <CODE>SIGTSTP</CODE>.
-</P><P>
-
-Non-builtin commands started by Bash have signal handlers set to the
-values inherited by the shell from its parent.
-When job control is not in effect, asynchronous commands
-ignore <CODE>SIGINT</CODE> and <CODE>SIGQUIT</CODE> in addition to these inherited
-handlers.
-Commands run as a result of
-command substitution ignore the keyboard-generated job control signals
-<CODE>SIGTTIN</CODE>, <CODE>SIGTTOU</CODE>, and <CODE>SIGTSTP</CODE>.
-</P><P>
-
-The shell exits by default upon receipt of a <CODE>SIGHUP</CODE>.
-Before exiting, an interactive shell resends the <CODE>SIGHUP</CODE> to
-all jobs, running or stopped.
-Stopped jobs are sent <CODE>SIGCONT</CODE> to ensure that they receive
-the <CODE>SIGHUP</CODE>.
-To prevent the shell from sending the <CODE>SIGHUP</CODE> signal to a
-particular job, it should be removed
-from the jobs table with the <CODE>disown</CODE>
-builtin (see section <A HREF="b.html#SEC91">7.2 Job Control Builtins</A>) or marked
-to not receive <CODE>SIGHUP</CODE> using <CODE>disown -h</CODE>.
-</P><P>
-
-If the  <CODE>huponexit</CODE> shell option has been set with <CODE>shopt</CODE>
-(see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>), Bash sends a <CODE>SIGHUP</CODE> to all jobs when
-an interactive login shell exits.
-</P><P>
-
-If Bash is waiting for a command to complete and receives a signal
-for which a trap has been set, the trap will not be executed until
-the command completes. 
-When Bash is waiting for an asynchronous
-command via the <CODE>wait</CODE> builtin, the reception of a signal for
-which a trap has been set will cause the <CODE>wait</CODE> builtin to return
-immediately with an exit status greater than 128, immediately after
-which the trap is executed.
-</P><P>
-
-<A NAME="Shell Scripts"></A>
-<HR SIZE="6">
-<A NAME="SEC55"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC54"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC5"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 3.8 Shell Scripts </H2>
-<!--docid::SEC55::-->
-<P>
-
-A shell script is a text file containing shell commands.  When such
-a file is used as the first non-option argument when invoking Bash,
-and neither the <SAMP>`-c'</SAMP> nor <SAMP>`-s'</SAMP> option is supplied
-(see section <A HREF="b.html#SEC67">6.1 Invoking Bash</A>), 
-Bash reads and executes commands from the file, then exits.  This
-mode of operation creates a non-interactive shell.  The shell first
-searches for the file in the current directory, and looks in the
-directories in <CODE>$PATH</CODE> if not found there.
-</P><P>
-
-When Bash runs
-a shell script, it sets the special parameter <CODE>0</CODE> to the name
-of the file, rather than the name of the shell, and the positional
-parameters are set to the remaining arguments, if any are given.
-If no additional arguments are supplied, the positional parameters
-are unset.
-</P><P>
-
-A shell script may be made executable by using the <CODE>chmod</CODE> command
-to turn on the execute bit.  When Bash finds such a file while
-searching the <CODE>$PATH</CODE> for a command, it spawns a subshell to
-execute it.  In other words, executing
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>filename <VAR>arguments</VAR>
-</pre></td></tr></table>is equivalent to executing
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bash filename <VAR>arguments</VAR>
-</pre></td></tr></table></P><P>
-
-if <CODE>filename</CODE> is an executable shell script.
-This subshell reinitializes itself, so that the effect is as if a
-new shell had been invoked to interpret the script, with the
-exception that the locations of commands remembered by the parent
-(see the description of <CODE>hash</CODE> in <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>)
-are retained by the child.
-</P><P>
-
-Most versions of Unix make this a part of the operating system's command
-execution mechanism.  If the first line of a script begins with
-the two characters <SAMP>`#!'</SAMP>, the remainder of the line specifies
-an interpreter for the program.
-Thus, you can specify Bash, <CODE>awk</CODE>, Perl, or some other
-interpreter and write the rest of the script file in that language.
-</P><P>
-
-The arguments to the interpreter
-consist of a single optional argument following the interpreter
-name on the first line of the script file, followed by the name of
-the script file, followed by the rest of the arguments.  Bash
-will perform this action on operating systems that do not handle it
-themselves.  Note that some older versions of Unix limit the interpreter
-name and argument to a maximum of 32 characters.
-</P><P>
-
-Bash scripts often begin with <CODE>#! /bin/bash</CODE> (assuming that
-Bash has been installed in <TT>`/bin'</TT>), since this ensures that
-Bash will be used to interpret the script, even if it is executed
-under another shell.
-</P><P>
-
-<A NAME="Shell Builtin Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC56"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC55"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC57"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 4. Shell Builtin Commands </H1>
-<!--docid::SEC56::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Builtin commands inherited from the Bourne
-                               Shell.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Table of builtins specific to Bash.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC59">4.3 Modifying Shell Behavior</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Builtins to modify shell attributes and
-                               optional behavior.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC62">4.4 Special Builtins</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Builtin commands classified specially by
-                               POSIX.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-Builtin commands are contained within the shell itself.
-When the name of a builtin command is used as the first word of
-a simple command (see section <A HREF="b.html#SEC16">3.2.1 Simple Commands</A>), the shell executes
-the command directly, without invoking another program.
-Builtin commands are necessary to implement functionality impossible
-or inconvenient to obtain with separate utilities.
-</P><P>
-
-This section briefly describes the builtins which Bash inherits from
-the Bourne Shell, as well as the builtin commands which are unique
-to or have been extended in Bash.
-</P><P>
-
-Several builtin commands are described in other chapters:  builtin
-commands which provide the Bash interface to the job control
-facilities (see section <A HREF="b.html#SEC91">7.2 Job Control Builtins</A>), the directory stack
-(see section <A HREF="b.html#SEC85">6.8.1 Directory Stack Builtins</A>), the command history
-(see section <A HREF="b.html#SEC119">9.2 Bash History Builtins</A>), and the programmable completion
-facilities (see section <A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A>).
-</P><P>
-
-Many of the builtins have been extended by POSIX or Bash.
-</P><P>
-
-Unless otherwise noted, each builtin command documented as accepting
-options preceded by <SAMP>`-'</SAMP> accepts <SAMP>`--'</SAMP>
-to signify the end of the options.
-For example, the <CODE>:</CODE>, <CODE>true</CODE>, <CODE>false</CODE>, and <CODE>test</CODE>
-builtins do not accept options.
-</P><P>
-
-<A NAME="Bourne Shell Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC57"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC58"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 4.1 Bourne Shell Builtins </H2>
-<!--docid::SEC57::-->
-<P>
-
-The following shell builtin commands are inherited from the Bourne Shell.
-These commands are implemented as specified by the POSIX standard.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>:    (a colon)</CODE>
-<DD><A NAME="IDX68"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>: [<VAR>arguments</VAR>]
-</pre></td></tr></table>Do nothing beyond expanding <VAR>arguments</VAR> and performing redirections.
-The return status is zero.
-<P>
-
-<DT><CODE>.    (a period)</CODE>
-<DD><A NAME="IDX69"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>. <VAR>filename</VAR> [<VAR>arguments</VAR>]
-</pre></td></tr></table>Read and execute commands from the <VAR>filename</VAR> argument in the
-current shell context.  If <VAR>filename</VAR> does not contain a slash,
-the <CODE>PATH</CODE> variable is used to find <VAR>filename</VAR>.
-When Bash is not in POSIX mode, the current directory is searched
-if <VAR>filename</VAR> is not found in <CODE>$PATH</CODE>.
-If any <VAR>arguments</VAR> are supplied, they become the positional
-parameters when <VAR>filename</VAR> is executed.  Otherwise the positional
-parameters are unchanged.
-The return status is the exit status of the last command executed, or
-zero if no commands are executed.  If <VAR>filename</VAR> is not found, or
-cannot be read, the return status is non-zero.
-This builtin is equivalent to <CODE>source</CODE>.
-<P>
-
-<DT><CODE>break</CODE>
-<DD><A NAME="IDX70"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>break [<VAR>n</VAR>]
-</pre></td></tr></table>Exit from a <CODE>for</CODE>, <CODE>while</CODE>, <CODE>until</CODE>, or <CODE>select</CODE> loop.
-If <VAR>n</VAR> is supplied, the <VAR>n</VAR>th enclosing loop is exited.
-<VAR>n</VAR> must be greater than or equal to 1.
-The return status is zero unless <VAR>n</VAR> is not greater than or equal to 1.
-<P>
-
-<DT><CODE>cd</CODE>
-<DD><A NAME="IDX71"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>cd [-L|-P] [<VAR>directory</VAR>]
-</pre></td></tr></table>Change the current working directory to <VAR>directory</VAR>.
-If <VAR>directory</VAR> is not given, the value of the <CODE>HOME</CODE> shell
-variable is used.
-If the shell variable <CODE>CDPATH</CODE> exists, it is used as a search path.
-If <VAR>directory</VAR> begins with a slash, <CODE>CDPATH</CODE> is not used.
-<P>
-
-The <SAMP>`-P'</SAMP> option means to not follow symbolic links; symbolic
-links are followed by default or with the <SAMP>`-L'</SAMP> option.
-If <VAR>directory</VAR> is <SAMP>`-'</SAMP>, it is equivalent to <CODE>$OLDPWD</CODE>.
-</P><P>
-
-If a non-empty directory name from <CODE>CDPATH</CODE> is used, or if
-<SAMP>`-'</SAMP> is the first argument, and the directory change is
-successful, the absolute pathname of the new working directory is
-written to the standard output.
-</P><P>
-
-The return status is zero if the directory is successfully changed,
-non-zero otherwise.
-</P><P>
-
-<DT><CODE>continue</CODE>
-<DD><A NAME="IDX72"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>continue [<VAR>n</VAR>]
-</pre></td></tr></table>Resume the next iteration of an enclosing <CODE>for</CODE>, <CODE>while</CODE>,
-<CODE>until</CODE>, or <CODE>select</CODE> loop.
-If <VAR>n</VAR> is supplied, the execution of the <VAR>n</VAR>th enclosing loop
-is resumed.
-<VAR>n</VAR> must be greater than or equal to 1.
-The return status is zero unless <VAR>n</VAR> is not greater than or equal to 1.
-<P>
-
-<DT><CODE>eval</CODE>
-<DD><A NAME="IDX73"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>eval [<VAR>arguments</VAR>]
-</pre></td></tr></table>The arguments are concatenated together into a single command, which is
-then read and executed, and its exit status returned as the exit status
-of <CODE>eval</CODE>.
-If there are no arguments or only empty arguments, the return status is
-zero.
-<P>
-
-<DT><CODE>exec</CODE>
-<DD><A NAME="IDX74"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>exec [-cl] [-a <VAR>name</VAR>] [<VAR>command</VAR> [<VAR>arguments</VAR>]]
-</pre></td></tr></table>If <VAR>command</VAR>
-is supplied, it replaces the shell without creating a new process.
-If the <SAMP>`-l'</SAMP> option is supplied, the shell places a dash at the
-beginning of the zeroth argument passed to <VAR>command</VAR>.
-This is what the <CODE>login</CODE> program does.
-The <SAMP>`-c'</SAMP> option causes <VAR>command</VAR> to be executed with an empty
-environment.
-If <SAMP>`-a'</SAMP> is supplied, the shell passes <VAR>name</VAR> as the zeroth
-argument to <VAR>command</VAR>.
-If no <VAR>command</VAR> is specified, redirections may be used to affect
-the current shell environment.  If there are no redirection errors, the
-return status is zero; otherwise the return status is non-zero.
-<P>
-
-<DT><CODE>exit</CODE>
-<DD><A NAME="IDX75"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>exit [<VAR>n</VAR>]
-</pre></td></tr></table>Exit the shell, returning a status of <VAR>n</VAR> to the shell's parent.
-If <VAR>n</VAR> is omitted, the exit status is that of the last command executed.
-Any trap on <CODE>EXIT</CODE> is executed before the shell terminates.
-<P>
-
-<DT><CODE>export</CODE>
-<DD><A NAME="IDX76"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>export [-fn] [-p] [<VAR>name</VAR>[=<VAR>value</VAR>]]
-</pre></td></tr></table>Mark each <VAR>name</VAR> to be passed to child processes
-in the environment.  If the <SAMP>`-f'</SAMP> option is supplied, the <VAR>name</VAR>s
-refer to shell functions; otherwise the names refer to shell variables.
-The <SAMP>`-n'</SAMP> option means to no longer mark each <VAR>name</VAR> for export.
-If no <VAR>names</VAR> are supplied, or if the <SAMP>`-p'</SAMP> option is given, a
-list of exported names is displayed.
-The <SAMP>`-p'</SAMP> option displays output in a form that may be reused as input.
-If a variable name is followed by =<VAR>value</VAR>, the value of
-the variable is set to <VAR>value</VAR>.
-<P>
-
-The return status is zero unless an invalid option is supplied, one of
-the names is not a valid shell variable name, or <SAMP>`-f'</SAMP> is supplied
-with a name that is not a shell function.
-</P><P>
-
-<DT><CODE>getopts</CODE>
-<DD><A NAME="IDX77"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>getopts <VAR>optstring</VAR> <VAR>name</VAR> [<VAR>args</VAR>]
-</pre></td></tr></table><CODE>getopts</CODE> is used by shell scripts to parse positional parameters.
-<VAR>optstring</VAR> contains the option characters to be recognized; if a
-character is followed by a colon, the option is expected to have an
-argument, which should be separated from it by white space.
-The colon (<SAMP>`:'</SAMP>) and question mark (<SAMP>`?'</SAMP>) may not be
-used as option characters.
-Each time it is invoked, <CODE>getopts</CODE>
-places the next option in the shell variable <VAR>name</VAR>, initializing
-<VAR>name</VAR> if it does not exist,
-and the index of the next argument to be processed into the
-variable <CODE>OPTIND</CODE>.
-<CODE>OPTIND</CODE> is initialized to 1 each time the shell or a shell script
-is invoked.
-When an option requires an argument,
-<CODE>getopts</CODE> places that argument into the variable <CODE>OPTARG</CODE>.
-The shell does not reset <CODE>OPTIND</CODE> automatically; it must be manually
-reset between multiple calls to <CODE>getopts</CODE> within the same shell
-invocation if a new set of parameters is to be used.
-<P>
-
-When the end of options is encountered, <CODE>getopts</CODE> exits with a
-return value greater than zero.
-<CODE>OPTIND</CODE> is set to the index of the first non-option argument,
-and <CODE>name</CODE> is set to <SAMP>`?'</SAMP>.
-</P><P>
-
-<CODE>getopts</CODE>
-normally parses the positional parameters, but if more arguments are
-given in <VAR>args</VAR>, <CODE>getopts</CODE> parses those instead.
-</P><P>
-
-<CODE>getopts</CODE> can report errors in two ways.  If the first character of
-<VAR>optstring</VAR> is a colon, <VAR>silent</VAR>
-error reporting is used.  In normal operation diagnostic messages
-are printed when invalid options or missing option arguments are
-encountered.
-If the variable <CODE>OPTERR</CODE>
-is set to 0, no error messages will be displayed, even if the first
-character of <CODE>optstring</CODE> is not a colon.
-</P><P>
-
-If an invalid option is seen,
-<CODE>getopts</CODE> places <SAMP>`?'</SAMP> into <VAR>name</VAR> and, if not silent,
-prints an error message and unsets <CODE>OPTARG</CODE>.
-If <CODE>getopts</CODE> is silent, the option character found is placed in
-<CODE>OPTARG</CODE> and no diagnostic message is printed.
-</P><P>
-
-If a required argument is not found, and <CODE>getopts</CODE>
-is not silent, a question mark (<SAMP>`?'</SAMP>) is placed in <VAR>name</VAR>,
-<CODE>OPTARG</CODE> is unset, and a diagnostic message is printed.
-If <CODE>getopts</CODE> is silent, then a colon (<SAMP>`:'</SAMP>) is placed in
-<VAR>name</VAR> and <CODE>OPTARG</CODE> is set to the option character found.
-</P><P>
-
-<DT><CODE>hash</CODE>
-<DD><A NAME="IDX78"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>hash [-r] [-p <VAR>filename</VAR>] [-dt] [<VAR>name</VAR>]
-</pre></td></tr></table>Remember the full pathnames of commands specified as <VAR>name</VAR> arguments,
-so they need not be searched for on subsequent invocations.
-The commands are found by searching through the directories listed in
-<CODE>$PATH</CODE>.
-The <SAMP>`-p'</SAMP> option inhibits the path search, and <VAR>filename</VAR> is
-used as the location of <VAR>name</VAR>.
-The <SAMP>`-r'</SAMP> option causes the shell to forget all remembered locations.
-The <SAMP>`-d'</SAMP> option causes the shell to forget the remembered location
-of each <VAR>name</VAR>.
-If the <SAMP>`-t'</SAMP> option is supplied, the full pathname to which each
-<VAR>name</VAR> corresponds is printed.  If multiple <VAR>name</VAR> arguments are
-supplied with <SAMP>`-t'</SAMP> the <VAR>name</VAR> is printed before the hashed
-full pathname.
-The <SAMP>`-l'</SAMP> option causes output to be displayed in a format
-that may be reused as input.
-If no arguments are given, or if only <SAMP>`-l'</SAMP> is supplied,
-information about remembered commands is printed.
-The return status is zero unless a <VAR>name</VAR> is not found or an invalid
-option is supplied.
-<P>
-
-<DT><CODE>pwd</CODE>
-<DD><A NAME="IDX79"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>pwd [-LP]
-</pre></td></tr></table>Print the absolute pathname of the current working directory.
-If the <SAMP>`-P'</SAMP> option is supplied, the pathname printed will not
-contain symbolic links.
-If the <SAMP>`-L'</SAMP> option is supplied, the pathname printed may contain
-symbolic links.
-The return status is zero unless an error is encountered while
-determining the name of the current directory or an invalid option
-is supplied.
-<P>
-
-<DT><CODE>readonly</CODE>
-<DD><A NAME="IDX80"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>readonly [-apf] [<VAR>name</VAR>[=<VAR>value</VAR>]] <small>...</small>
-</pre></td></tr></table>Mark each <VAR>name</VAR> as readonly.
-The values of these names may not be changed by subsequent assignment.
-If the <SAMP>`-f'</SAMP> option is supplied, each <VAR>name</VAR> refers to a shell
-function.
-The <SAMP>`-a'</SAMP> option means each <VAR>name</VAR> refers to an array variable.
-If no <VAR>name</VAR> arguments are given, or if the <SAMP>`-p'</SAMP>
-option is supplied, a list of all readonly names is printed.
-The <SAMP>`-p'</SAMP> option causes output to be displayed in a format that
-may be reused as input.
-If a variable name is followed by =<VAR>value</VAR>, the value of
-the variable is set to <VAR>value</VAR>.
-The return status is zero unless an invalid option is supplied, one of
-the <VAR>name</VAR> arguments is not a valid shell variable or function name,
-or the <SAMP>`-f'</SAMP> option is supplied with a name that is not a shell function.
-<P>
-
-<DT><CODE>return</CODE>
-<DD><A NAME="IDX81"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>return [<VAR>n</VAR>]
-</pre></td></tr></table>Cause a shell function to exit with the return value <VAR>n</VAR>.
-If <VAR>n</VAR> is not supplied, the return value is the exit status of the
-last command executed in the function.
-This may also be used to terminate execution of a script being executed
-with the <CODE>.</CODE> (or <CODE>source</CODE>) builtin, returning either <VAR>n</VAR> or
-the exit status of the last command executed within the script as the exit
-status of the script.
-Any command associated with the <CODE>RETURN</CODE> trap is executed
-before execution resumes after the function or script.
-The return status is non-zero if <CODE>return</CODE> is used outside a function
-and not during the execution of a script by <CODE>.</CODE> or <CODE>source</CODE>.
-<P>
-
-<DT><CODE>shift</CODE>
-<DD><A NAME="IDX82"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>shift [<VAR>n</VAR>]
-</pre></td></tr></table>Shift the positional parameters to the left by <VAR>n</VAR>.
-The positional parameters from <VAR>n</VAR>+1 <small>...</small> <CODE>$#</CODE> are
-renamed to <CODE>$1</CODE> <small>...</small> <CODE>$#</CODE>-<VAR>n</VAR>.
-Parameters represented by the numbers <CODE>$#</CODE> to <CODE>$#</CODE>-<VAR>n</VAR>+1
-are unset.
-<VAR>n</VAR> must be a non-negative number less than or equal to <CODE>$#</CODE>.
-If <VAR>n</VAR> is zero or greater than <CODE>$#</CODE>, the positional parameters
-are not changed.
-If <VAR>n</VAR> is not supplied, it is assumed to be 1.
-The return status is zero unless <VAR>n</VAR> is greater than <CODE>$#</CODE> or
-less than zero, non-zero otherwise.
-<P>
-
-<DT><CODE>test</CODE>
-<DD><DT><CODE>[</CODE>
-<DD><A NAME="IDX83"></A>
-<A NAME="IDX84"></A>
-Evaluate a conditional expression <VAR>expr</VAR>.
-Each operator and operand must be a separate argument.
-Expressions are composed of the primaries described below in
-<A HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A>.
-<CODE>test</CODE> does not accept any options, nor does it accept and ignore
-an argument of <SAMP>`--'</SAMP> as signifying the end of options.
-<P>
-
-When the <CODE>[</CODE> form is used, the last argument to the command must
-be a <CODE>]</CODE>.
-</P><P>
-
-Expressions may be combined using the following operators, listed in
-decreasing order of precedence.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>! <VAR>expr</VAR></CODE>
-<DD>True if <VAR>expr</VAR> is false.
-<P>
-
-<DT><CODE>( <VAR>expr</VAR> )</CODE>
-<DD>Returns the value of <VAR>expr</VAR>.
-This may be used to override the normal precedence of operators.
-<P>
-
-<DT><CODE><VAR>expr1</VAR> -a <VAR>expr2</VAR></CODE>
-<DD>True if both <VAR>expr1</VAR> and <VAR>expr2</VAR> are true.
-<P>
-
-<DT><CODE><VAR>expr1</VAR> -o <VAR>expr2</VAR></CODE>
-<DD>True if either <VAR>expr1</VAR> or <VAR>expr2</VAR> is true.
-</DL>
-<P>
-
-The <CODE>test</CODE> and <CODE>[</CODE> builtins evaluate conditional
-expressions using a set of rules based on the number of arguments.
-</P><P>
-
-<DL COMPACT>
-<DT>0 arguments
-<DD>The expression is false.
-<P>
-
-<DT>1 argument
-<DD>The expression is true if and only if the argument is not null.
-<P>
-
-<DT>2 arguments
-<DD>If the first argument is <SAMP>`!'</SAMP>, the expression is true if and
-only if the second argument is null.
-If the first argument is one of the unary conditional operators
-(see section <A HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A>), the expression
-is true if the unary test is true.
-If the first argument is not a valid unary operator, the expression is
-false.
-<P>
-
-<DT>3 arguments
-<DD>If the second argument is one of the binary conditional
-operators (see section <A HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A>), the
-result of the expression is the result of the binary test using the
-first and third arguments as operands.
-If the first argument is <SAMP>`!'</SAMP>, the value is the negation of
-the two-argument test using the second and third arguments.
-If the first argument is exactly <SAMP>`('</SAMP> and the third argument is
-exactly <SAMP>`)'</SAMP>, the result is the one-argument test of the second
-argument.
-Otherwise, the expression is false.
-The <SAMP>`-a'</SAMP> and <SAMP>`-o'</SAMP> operators are considered binary operators
-in this case.  
-<P>
-
-<DT>4 arguments
-<DD>If the first argument is <SAMP>`!'</SAMP>, the result is the negation of
-the three-argument expression composed of the remaining arguments.
-Otherwise, the expression is parsed and evaluated according to 
-precedence using the rules listed above.
-<P>
-
-<DT>5 or more arguments
-<DD>The expression is parsed and evaluated according to precedence
-using the rules listed above.
-</DL>
-<P>
-
-<DT><CODE>times</CODE>
-<DD><A NAME="IDX85"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>times
-</pre></td></tr></table>Print out the user and system times used by the shell and its children.
-The return status is zero.
-<P>
-
-<DT><CODE>trap</CODE>
-<DD><A NAME="IDX86"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>trap [-lp] [<VAR>arg</VAR>] [<VAR>sigspec</VAR> <small>...</small>]
-</pre></td></tr></table>The commands in <VAR>arg</VAR> are to be read and executed when the
-shell receives signal <VAR>sigspec</VAR>.  If <VAR>arg</VAR> is absent (and
-there is a single <VAR>sigspec</VAR>) or
-equal to <SAMP>`-'</SAMP>, each specified signal's disposition is reset
-to the value it had when the shell was started.
-If <VAR>arg</VAR> is the null string, then the signal specified by
-each <VAR>sigspec</VAR> is ignored by the shell and commands it invokes.
-If <VAR>arg</VAR> is not present and <SAMP>`-p'</SAMP> has been supplied,
-the shell displays the trap commands associated with each <VAR>sigspec</VAR>.
-If no arguments are supplied, or
-only <SAMP>`-p'</SAMP> is given, <CODE>trap</CODE> prints the list of commands
-associated with each signal number in a form that may be reused as
-shell input.
-The <SAMP>`-l'</SAMP> option causes the shell to print a list of signal names
-and their corresponding numbers.
-Each <VAR>sigspec</VAR> is either a signal name or a signal number.
-Signal names are case insensitive and the <CODE>SIG</CODE> prefix is optional.
-If a <VAR>sigspec</VAR>
-is <CODE>0</CODE> or <CODE>EXIT</CODE>, <VAR>arg</VAR> is executed when the shell exits.
-If a <VAR>sigspec</VAR> is <CODE>DEBUG</CODE>, the command <VAR>arg</VAR> is executed
-before every simple command, <CODE>for</CODE> command, <CODE>case</CODE> command,
-<CODE>select</CODE> command, every arithmetic <CODE>for</CODE> command, and before
-the first command executes in a shell function.
-Refer to the description of the <CODE>extglob</CODE> option to the
-<CODE>shopt</CODE> builtin (see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>) for details of its
-effect on the <CODE>DEBUG</CODE> trap.
-If a <VAR>sigspec</VAR> is <CODE>ERR</CODE>, the command <VAR>arg</VAR> 
-is executed whenever a simple command has a non-zero exit status,
-subject to the following conditions.
-The <CODE>ERR</CODE> trap is not executed if the failed command is part of the
-command list immediately following an <CODE>until</CODE> or <CODE>while</CODE> keyword,
-part of the test in an <CODE>if</CODE> statement,
-part of a <CODE>&#38;&#38;</CODE> or <CODE>||</CODE> list, or if the command's return
-status is being inverted using <CODE>!</CODE>.
-These are the same conditions obeyed by the <CODE>errexit</CODE> option.
-If a <VAR>sigspec</VAR> is <CODE>RETURN</CODE>, the command <VAR>arg</VAR> is executed
-each time a shell function or a script executed with the <CODE>.</CODE> or
-<CODE>source</CODE> builtins finishes executing.
-<P>
-
-Signals ignored upon entry to the shell cannot be trapped or reset.
-Trapped signals that are not being ignored are reset to their original
-values in a child process when it is created.
-</P><P>
-
-The return status is zero unless a <VAR>sigspec</VAR> does not specify a
-valid signal.
-</P><P>
-
-<DT><CODE>umask</CODE>
-<DD><A NAME="IDX87"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>umask [-p] [-S] [<VAR>mode</VAR>]
-</pre></td></tr></table>Set the shell process's file creation mask to <VAR>mode</VAR>.  If
-<VAR>mode</VAR> begins with a digit, it is interpreted as an octal number;
-if not, it is interpreted as a symbolic mode mask similar
-to that accepted by the <CODE>chmod</CODE> command.  If <VAR>mode</VAR> is
-omitted, the current value of the mask is printed.  If the <SAMP>`-S'</SAMP>
-option is supplied without a <VAR>mode</VAR> argument, the mask is printed
-in a symbolic format.
-If the  <SAMP>`-p'</SAMP> option is supplied, and <VAR>mode</VAR>
-is omitted, the output is in a form that may be reused as input.
-The return status is zero if the mode is successfully changed or if
-no <VAR>mode</VAR> argument is supplied, and non-zero otherwise.
-<P>
-
-Note that when the mode is interpreted as an octal number, each number
-of the umask is subtracted from <CODE>7</CODE>.  Thus, a umask of <CODE>022</CODE>
-results in permissions of <CODE>755</CODE>.
-</P><P>
-
-<DT><CODE>unset</CODE>
-<DD><A NAME="IDX88"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>unset [-fv] [<VAR>name</VAR>]
-</pre></td></tr></table>Each variable or function <VAR>name</VAR> is removed.
-If no options are supplied, or the <SAMP>`-v'</SAMP> option is given, each
-<VAR>name</VAR> refers to a shell variable. 
-If the <SAMP>`-f'</SAMP> option is given, the <VAR>name</VAR>s refer to shell
-functions, and the function definition is removed.
-Readonly variables and functions may not be unset.
-The return status is zero unless a <VAR>name</VAR> is readonly.
-</DL>
-<P>
-
-<A NAME="Bash Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC58"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC57"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC59"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC59"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 4.2 Bash Builtin Commands </H2>
-<!--docid::SEC58::-->
-<P>
-
-This section describes builtin commands which are unique to
-or have been extended in Bash.
-Some of these commands are specified in the POSIX standard.
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>alias</CODE>
-<DD><A NAME="IDX89"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>alias [<CODE>-p</CODE>] [<VAR>name</VAR>[=<VAR>value</VAR>] <small>...</small>]
-</pre></td></tr></table><P>
-
-Without arguments or with the <SAMP>`-p'</SAMP> option, <CODE>alias</CODE> prints
-the list of aliases on the standard output in a form that allows
-them to be reused as input.
-If arguments are supplied, an alias is defined for each <VAR>name</VAR>
-whose <VAR>value</VAR> is given.  If no <VAR>value</VAR> is given, the name
-and value of the alias is printed.
-Aliases are described in <A HREF="b.html#SEC82">6.6 Aliases</A>.
-</P><P>
-
-<DT><CODE>bind</CODE>
-<DD><A NAME="IDX90"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bind [-m <VAR>keymap</VAR>] [-lpsvPSV]
-bind [-m <VAR>keymap</VAR>] [-q <VAR>function</VAR>] [-u <VAR>function</VAR>] [-r <VAR>keyseq</VAR>]
-bind [-m <VAR>keymap</VAR>] -f <VAR>filename</VAR>
-bind [-m <VAR>keymap</VAR>] -x <VAR>keyseq:shell-command</VAR>
-bind [-m <VAR>keymap</VAR>] <VAR>keyseq:function-name</VAR>
-bind <VAR>readline-command</VAR>
-</pre></td></tr></table><P>
-
-Display current Readline (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>)
-key and function bindings,
-bind a key sequence to a Readline function or macro,
-or set a Readline variable.
-Each non-option argument is a command as it would appear in a
-Readline initialization file (see section <A HREF="b.html#SEC101">8.3 Readline Init File</A>),
-but each binding or command must be passed as a separate argument;  e.g.,
-<SAMP>`"\C-x\C-r":re-read-init-file'</SAMP>.
-Options, if supplied, have the following meanings:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-m <VAR>keymap</VAR></CODE>
-<DD>Use <VAR>keymap</VAR> as the keymap to be affected by
-the subsequent bindings.  Acceptable <VAR>keymap</VAR>
-names are
-<CODE>emacs</CODE>,
-<CODE>emacs-standard</CODE>,
-<CODE>emacs-meta</CODE>,
-<CODE>emacs-ctlx</CODE>,
-<CODE>vi</CODE>,
-<CODE>vi-move</CODE>,
-<CODE>vi-command</CODE>, and
-<CODE>vi-insert</CODE>.
-<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>;
-<CODE>emacs</CODE> is equivalent to <CODE>emacs-standard</CODE>.
-<P>
-
-<DT><CODE>-l</CODE>
-<DD>List the names of all Readline functions.
-<P>
-
-<DT><CODE>-p</CODE>
-<DD>Display Readline function names and bindings in such a way that they
-can be used as input or in a Readline initialization file.
-<P>
-
-<DT><CODE>-P</CODE>
-<DD>List current Readline function names and bindings.
-<P>
-
-<DT><CODE>-v</CODE>
-<DD>Display Readline variable names and values in such a way that they
-can be used as input or in a Readline initialization file.
-<P>
-
-<DT><CODE>-V</CODE>
-<DD>List current Readline variable names and values.
-<P>
-
-<DT><CODE>-s</CODE>
-<DD>Display Readline key sequences bound to macros and the strings they output
-in such a way that they can be used as input or in a Readline
-initialization file.
-<P>
-
-<DT><CODE>-S</CODE>
-<DD>Display Readline key sequences bound to macros and the strings they output.
-<P>
-
-<DT><CODE>-f <VAR>filename</VAR></CODE>
-<DD>Read key bindings from <VAR>filename</VAR>.
-<P>
-
-<DT><CODE>-q <VAR>function</VAR></CODE>
-<DD>Query about which keys invoke the named <VAR>function</VAR>.
-<P>
-
-<DT><CODE>-u <VAR>function</VAR></CODE>
-<DD>Unbind all keys bound to the named <VAR>function</VAR>.
-<P>
-
-<DT><CODE>-r <VAR>keyseq</VAR></CODE>
-<DD>Remove any current binding for <VAR>keyseq</VAR>.
-<P>
-
-<DT><CODE>-x <VAR>keyseq:shell-command</VAR></CODE>
-<DD>Cause <VAR>shell-command</VAR> to be executed whenever <VAR>keyseq</VAR> is
-entered.
-<P>
-
-</DL>
-<P>
-
-The return status is zero unless an invalid option is supplied or an
-error occurs.
-</P><P>
-
-<DT><CODE>builtin</CODE>
-<DD><A NAME="IDX91"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>builtin [<VAR>shell-builtin</VAR> [<VAR>args</VAR>]]
-</pre></td></tr></table>Run a shell builtin, passing it <VAR>args</VAR>, and return its exit status.
-This is useful when defining a shell function with the same
-name as a shell builtin, retaining the functionality of the builtin within
-the function.
-The return status is non-zero if <VAR>shell-builtin</VAR> is not a shell
-builtin command.
-<P>
-
-<DT><CODE>caller</CODE>
-<DD><A NAME="IDX92"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>caller [<VAR>expr</VAR>]
-</pre></td></tr></table>Returns the context of any active subroutine call (a shell function or
-a script executed with the <CODE>.</CODE> or <CODE>source</CODE> builtins).
-<P>
-
-Without <VAR>expr</VAR>, <CODE>caller</CODE> displays the line number and source
-filename of the current subroutine call.
-If a non-negative integer is supplied as <VAR>expr</VAR>, <CODE>caller</CODE> 
-displays the line number, subroutine name, and source file corresponding
-to that position in the current execution call stack.  This extra
-information may be used, for example, to print a stack trace.  The
-current frame is frame 0.
-</P><P>
-
-The return value is 0 unless the shell is not executing a subroutine
-call or <VAR>expr</VAR> does not correspond to a valid position in the
-call stack.
-</P><P>
-
-<DT><CODE>command</CODE>
-<DD><A NAME="IDX93"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>command [-pVv] <VAR>command</VAR> [<VAR>arguments</VAR> <small>...</small>]
-</pre></td></tr></table>Runs <VAR>command</VAR> with <VAR>arguments</VAR> ignoring any shell function
-named <VAR>command</VAR>.
-Only shell builtin commands or commands found by searching the
-<CODE>PATH</CODE> are executed.
-If there is a shell function named <CODE>ls</CODE>, running <SAMP>`command ls'</SAMP>
-within the function will execute the external command <CODE>ls</CODE>
-instead of calling the function recursively.
-The <SAMP>`-p'</SAMP> option means to use a default value for <CODE>PATH</CODE>
-that is guaranteed to find all of the standard utilities.
-The return status in this case is 127 if <VAR>command</VAR> cannot be
-found or an error occurred, and the exit status of <VAR>command</VAR>
-otherwise.
-<P>
-
-If either the <SAMP>`-V'</SAMP> or <SAMP>`-v'</SAMP> option is supplied, a
-description of <VAR>command</VAR> is printed.  The <SAMP>`-v'</SAMP> option
-causes a single word indicating the command or file name used to
-invoke <VAR>command</VAR> to be displayed; the <SAMP>`-V'</SAMP> option produces
-a more verbose description.  In this case, the return status is
-zero if <VAR>command</VAR> is found, and non-zero if not.
-</P><P>
-
-<DT><CODE>declare</CODE>
-<DD><A NAME="IDX94"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>declare [-afFirtx] [-p] [<VAR>name</VAR>[=<VAR>value</VAR>] <small>...</small>]
-</pre></td></tr></table><P>
-
-Declare variables and give them attributes.  If no <VAR>name</VAR>s
-are given, then display the values of variables instead. 
-</P><P>
-
-The <SAMP>`-p'</SAMP> option will display the attributes and values of each
-<VAR>name</VAR>.
-When <SAMP>`-p'</SAMP> is used, additional options are ignored.
-The <SAMP>`-F'</SAMP> option inhibits the display of function definitions;
-only the function name and attributes are printed.
-If the <CODE>extdebug</CODE> shell option is enabled using <CODE>shopt</CODE>
-(see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>), the source file name and line number where
-the function is defined are displayed as well.
-<SAMP>`-F'</SAMP> implies <SAMP>`-f'</SAMP>.
-The following options can be used to restrict output to variables with
-the specified attributes or to give variables attributes:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-a</CODE>
-<DD>Each <VAR>name</VAR> is an array variable (see section <A HREF="b.html#SEC83">6.7 Arrays</A>).
-<P>
-
-<DT><CODE>-f</CODE>
-<DD>Use function names only.
-<P>
-
-<DT><CODE>-i</CODE>
-<DD>The variable is to be treated as
-an integer; arithmetic evaluation (see section <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>) is
-performed when the variable is assigned a value.
-<P>
-
-<DT><CODE>-r</CODE>
-<DD>Make <VAR>name</VAR>s readonly.  These names cannot then be assigned values
-by subsequent assignment statements or unset.
-<P>
-
-<DT><CODE>-t</CODE>
-<DD>Give each <VAR>name</VAR> the <CODE>trace</CODE> attribute.
-Traced functions inherit the <CODE>DEBUG</CODE> and <CODE>RETURN</CODE> traps from
-the calling shell.
-The trace attribute has no special meaning for variables.
-<P>
-
-<DT><CODE>-x</CODE>
-<DD>Mark each <VAR>name</VAR> for export to subsequent commands via
-the environment.
-</DL>
-<P>
-
-Using <SAMP>`+'</SAMP> instead of <SAMP>`-'</SAMP> turns off the attribute instead,
-with the exceptions that <SAMP>`+a'</SAMP>
-may not be used to destroy an array variable and <SAMP>`+r'</SAMP> will not
-remove the readonly attribute.
-When used in a function, <CODE>declare</CODE> makes each <VAR>name</VAR> local,
-as with the <CODE>local</CODE> command.  If a variable name is followed by
-=<VAR>value</VAR>, the value of the variable is set to <VAR>value</VAR>.
-</P><P>
-
-The return status is zero unless an invalid option is encountered,
-an attempt is made to define a function using <SAMP>`-f foo=bar'</SAMP>,
-an attempt is made to assign a value to a readonly variable,
-an attempt is made to assign a value to an array variable without
-using the compound assignment syntax (see section <A HREF="b.html#SEC83">6.7 Arrays</A>),
-one of the <VAR>names</VAR> is not a valid shell variable name,
-an attempt is made to turn off readonly status for a readonly variable,
-an attempt is made to turn off array status for an array variable,
-or an attempt is made to display a non-existent function with <SAMP>`-f'</SAMP>.
-</P><P>
-
-<DT><CODE>echo</CODE>
-<DD><A NAME="IDX95"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>echo [-neE] [<VAR>arg</VAR> <small>...</small>]
-</pre></td></tr></table>Output the <VAR>arg</VAR>s, separated by spaces, terminated with a
-newline.
-The return status is always 0.
-If <SAMP>`-n'</SAMP> is specified, the trailing newline is suppressed.
-If the <SAMP>`-e'</SAMP> option is given, interpretation of the following
-backslash-escaped characters is enabled.
-The <SAMP>`-E'</SAMP> option disables the interpretation of these escape characters,
-even on systems where they are interpreted by default.
-The <CODE>xpg_echo</CODE> shell option may be used to
-dynamically determine whether or not <CODE>echo</CODE> expands these
-escape characters by default.
-<CODE>echo</CODE> does not interpret <SAMP>`--'</SAMP> to mean the end of options.
-<P>
-
-<CODE>echo</CODE> interprets the following escape sequences:
-<DL COMPACT>
-<DT><CODE>\a</CODE>
-<DD>alert (bell)
-<DT><CODE>\b</CODE>
-<DD>backspace
-<DT><CODE>\c</CODE>
-<DD>suppress trailing newline
-<DT><CODE>\e</CODE>
-<DD>escape
-<DT><CODE>\f</CODE>
-<DD>form feed
-<DT><CODE>\n</CODE>
-<DD>new line
-<DT><CODE>\r</CODE>
-<DD>carriage return
-<DT><CODE>\t</CODE>
-<DD>horizontal tab
-<DT><CODE>\v</CODE>
-<DD>vertical tab
-<DT><CODE>\\</CODE>
-<DD>backslash
-<DT><CODE>\0<VAR>nnn</VAR></CODE>
-<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
-(zero to three octal digits)
-<DT><CODE>\x<VAR>HH</VAR></CODE>
-<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
-(one or two hex digits)
-</DL>
-<P>
-
-<DT><CODE>enable</CODE>
-<DD><A NAME="IDX96"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>enable [-a] [-dnps] [-f <VAR>filename</VAR>] [<VAR>name</VAR> <small>...</small>]
-</pre></td></tr></table>Enable and disable builtin shell commands.
-Disabling a builtin allows a disk command which has the same name
-as a shell builtin to be executed without specifying a full pathname,
-even though the shell normally searches for builtins before disk commands.
-If <SAMP>`-n'</SAMP> is used, the <VAR>name</VAR>s become disabled.  Otherwise
-<VAR>name</VAR>s are enabled.  For example, to use the <CODE>test</CODE> binary
-found via <CODE>$PATH</CODE> instead of the shell builtin version, type
-<SAMP>`enable -n test'</SAMP>.
-<P>
-
-If the <SAMP>`-p'</SAMP> option is supplied, or no <VAR>name</VAR> arguments appear,
-a list of shell builtins is printed.  With no other arguments, the list
-consists of all enabled shell builtins.
-The <SAMP>`-a'</SAMP> option means to list
-each builtin with an indication of whether or not it is enabled. 
-</P><P>
-
-The <SAMP>`-f'</SAMP> option means to load the new builtin command <VAR>name</VAR>
-from shared object <VAR>filename</VAR>, on systems that support dynamic loading.
-The <SAMP>`-d'</SAMP> option will delete a builtin loaded with <SAMP>`-f'</SAMP>.
-</P><P>
-
-If there are no options, a list of the shell builtins is displayed.
-The <SAMP>`-s'</SAMP> option restricts <CODE>enable</CODE> to the POSIX special
-builtins.  If <SAMP>`-s'</SAMP> is used with <SAMP>`-f'</SAMP>, the new builtin becomes
-a special builtin (see section <A HREF="b.html#SEC62">4.4 Special Builtins</A>).
-</P><P>
-
-The return status is zero unless a <VAR>name</VAR> is not a shell builtin
-or there is an error loading a new builtin from a shared object.
-</P><P>
-
-<DT><CODE>help</CODE>
-<DD><A NAME="IDX97"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>help [-s] [<VAR>pattern</VAR>]
-</pre></td></tr></table>Display helpful information about builtin commands.
-If <VAR>pattern</VAR> is specified, <CODE>help</CODE> gives detailed help
-on all commands matching <VAR>pattern</VAR>, otherwise a list of
-the builtins is printed.
-The <SAMP>`-s'</SAMP> option restricts the information displayed to a short
-usage synopsis.
-The return status is zero unless no command matches <VAR>pattern</VAR>.
-<P>
-
-<DT><CODE>let</CODE>
-<DD><A NAME="IDX98"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>let <VAR>expression</VAR> [<VAR>expression</VAR>]
-</pre></td></tr></table>The <CODE>let</CODE> builtin allows arithmetic to be performed on shell
-variables.  Each <VAR>expression</VAR> is evaluated according to the
-rules given below in <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>.  If the
-last <VAR>expression</VAR> evaluates to 0, <CODE>let</CODE> returns 1;
-otherwise 0 is returned.
-<P>
-
-<DT><CODE>local</CODE>
-<DD><A NAME="IDX99"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>local [<VAR>option</VAR>] <VAR>name</VAR>[=<VAR>value</VAR>] <small>...</small>
-</pre></td></tr></table>For each argument, a local variable named <VAR>name</VAR> is created,
-and assigned <VAR>value</VAR>.
-The <VAR>option</VAR> can be any of the options accepted by <CODE>declare</CODE>.
-<CODE>local</CODE> can only be used within a function; it makes the variable
-<VAR>name</VAR> have a visible scope restricted to that function and its
-children.  The return status is zero unless <CODE>local</CODE> is used outside
-a function, an invalid <VAR>name</VAR> is supplied, or <VAR>name</VAR> is a
-readonly variable.
-<P>
-
-<DT><CODE>logout</CODE>
-<DD><A NAME="IDX100"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>logout [<VAR>n</VAR>]
-</pre></td></tr></table>Exit a login shell, returning a status of <VAR>n</VAR> to the shell's
-parent.
-<P>
-
-<DT><CODE>printf</CODE>
-<DD><A NAME="IDX101"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>printf</CODE> [-v <VAR>var</VAR>] <VAR>format</VAR> [<VAR>arguments</VAR>]
-</pre></td></tr></table>Write the formatted <VAR>arguments</VAR> to the standard output under the
-control of the <VAR>format</VAR>.
-The <VAR>format</VAR> is a character string which contains three types of objects:
-plain characters, which are simply copied to standard output, character
-escape sequences, which are converted and copied to the standard output, and
-format specifications, each of which causes printing of the next successive
-<VAR>argument</VAR>.
-In addition to the standard <CODE>printf(1)</CODE> formats, <SAMP>`%b'</SAMP> causes
-<CODE>printf</CODE> to expand backslash escape sequences in the corresponding
-<VAR>argument</VAR>,
-(except that <SAMP>`\c'</SAMP> terminates output, backslashes in
-<SAMP>`\''</SAMP>, <SAMP>`\"'</SAMP>, and <SAMP>`\?'</SAMP> are not removed, and octal escapes
-beginning with <SAMP>`\0'</SAMP> may contain up to four digits),
-and <SAMP>`%q'</SAMP> causes <CODE>printf</CODE> to output the
-corresponding <VAR>argument</VAR> in a format that can be reused as shell input.
-<P>
-
-The <SAMP>`-v'</SAMP> option causes the output to be assigned to the variable
-<VAR>var</VAR> rather than being printed to the standard output.
-</P><P>
-
-The <VAR>format</VAR> is reused as necessary to consume all of the <VAR>arguments</VAR>.
-If the <VAR>format</VAR> requires more <VAR>arguments</VAR> than are supplied, the
-extra format specifications behave as if a zero value or null string, as
-appropriate, had been supplied.  The return value is zero on success,
-non-zero on failure.
-</P><P>
-
-<DT><CODE>read</CODE>
-<DD><A NAME="IDX102"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>read [-ers] [-a <VAR>aname</VAR>] [-d <VAR>delim</VAR>] [-n <VAR>nchars</VAR>] [-p <VAR>prompt</VAR>] [-t <VAR>timeout</VAR>] [-u <VAR>fd</VAR>] [<VAR>name</VAR> <small>...</small>]
-</pre></td></tr></table>One line is read from the standard input, or from the file descriptor
-<VAR>fd</VAR> supplied as an argument to the <SAMP>`-u'</SAMP> option, and the first word
-is assigned to the first <VAR>name</VAR>, the second word to the second <VAR>name</VAR>,
-and so on, with leftover words and their intervening separators assigned
-to the last <VAR>name</VAR>.
-If there are fewer words read from the input stream than names,
-the remaining names are assigned empty values.
-The characters in the value of the <CODE>IFS</CODE> variable
-are used to split the line into words.
-The backslash character <SAMP>`\'</SAMP> may be used to remove any special
-meaning for the next character read and for line continuation.
-If no names are supplied, the line read is assigned to the
-variable <CODE>REPLY</CODE>.
-The return code is zero, unless end-of-file is encountered, <CODE>read</CODE>
-times out, or an invalid file descriptor is supplied as the argument to
-<SAMP>`-u'</SAMP>.
-Options, if supplied, have the following meanings:
-<P>
-
-<DL COMPACT>
-<DT><CODE>-a <VAR>aname</VAR></CODE>
-<DD>The words are assigned to sequential indices of the array variable
-<VAR>aname</VAR>, starting at 0.
-All elements are removed from <VAR>aname</VAR> before the assignment.
-Other <VAR>name</VAR> arguments are ignored.
-<P>
-
-<DT><CODE>-d <VAR>delim</VAR></CODE>
-<DD>The first character of <VAR>delim</VAR> is used to terminate the input line,
-rather than newline.
-<P>
-
-<DT><CODE>-e</CODE>
-<DD>Readline (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>) is used to obtain the line.
-<P>
-
-<DT><CODE>-n <VAR>nchars</VAR></CODE>
-<DD><CODE>read</CODE> returns after reading <VAR>nchars</VAR> characters rather than
-waiting for a complete line of input.
-<P>
-
-<DT><CODE>-p <VAR>prompt</VAR></CODE>
-<DD>Display <VAR>prompt</VAR>, without a trailing newline, before attempting
-to read any input.
-The prompt is displayed only if input is coming from a terminal.
-<P>
-
-<DT><CODE>-r</CODE>
-<DD>If this option is given, backslash does not act as an escape character.
-The backslash is considered to be part of the line.
-In particular, a backslash-newline pair may not be used as a line
-continuation.
-<P>
-
-<DT><CODE>-s</CODE>
-<DD>Silent mode.  If input is coming from a terminal, characters are
-not echoed.
-<P>
-
-<DT><CODE>-t <VAR>timeout</VAR></CODE>
-<DD>Cause <CODE>read</CODE> to time out and return failure if a complete line of
-input is not read within <VAR>timeout</VAR> seconds.
-This option has no effect if <CODE>read</CODE> is not reading input from the
-terminal or a pipe.
-<P>
-
-<DT><CODE>-u <VAR>fd</VAR></CODE>
-<DD>Read input from file descriptor <VAR>fd</VAR>.
-<P>
-
-</DL>
-<P>
-
-<DT><CODE>source</CODE>
-<DD><A NAME="IDX103"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>source <VAR>filename</VAR>
-</pre></td></tr></table>A synonym for <CODE>.</CODE> (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-<P>
-
-<DT><CODE>type</CODE>
-<DD><A NAME="IDX104"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>type [-afptP] [<VAR>name</VAR> <small>...</small>]
-</pre></td></tr></table>For each <VAR>name</VAR>, indicate how it would be interpreted if used as a
-command name.
-<P>
-
-If the <SAMP>`-t'</SAMP> option is used, <CODE>type</CODE> prints a single word
-which is one of <SAMP>`alias'</SAMP>, <SAMP>`function'</SAMP>, <SAMP>`builtin'</SAMP>,
-<SAMP>`file'</SAMP> or <SAMP>`keyword'</SAMP>,
-if <VAR>name</VAR> is an alias, shell function, shell builtin,
-disk file, or shell reserved word, respectively.
-If the <VAR>name</VAR> is not found, then nothing is printed, and
-<CODE>type</CODE> returns a failure status.
-</P><P>
-
-If the <SAMP>`-p'</SAMP> option is used, <CODE>type</CODE> either returns the name
-of the disk file that would be executed, or nothing if <SAMP>`-t'</SAMP>
-would not return <SAMP>`file'</SAMP>.
-</P><P>
-
-The <SAMP>`-P'</SAMP> option forces a path search for each <VAR>name</VAR>, even if
-<SAMP>`-t'</SAMP> would not return <SAMP>`file'</SAMP>.
-</P><P>
-
-If a command is hashed, <SAMP>`-p'</SAMP> and <SAMP>`-P'</SAMP> print the hashed value,
-not necessarily the file that appears first in <CODE>$PATH</CODE>.
-</P><P>
-
-If the <SAMP>`-a'</SAMP> option is used, <CODE>type</CODE> returns all of the places
-that contain an executable named <VAR>file</VAR>.
-This includes aliases and functions, if and only if the <SAMP>`-p'</SAMP> option
-is not also used.
-</P><P>
-
-If the <SAMP>`-f'</SAMP> option is used, <CODE>type</CODE> does not attempt to find
-shell functions, as with the <CODE>command</CODE> builtin.
-</P><P>
-
-The return status is zero if any of the <VAR>names</VAR> are found, non-zero
-if none are found.
-</P><P>
-
-<DT><CODE>typeset</CODE>
-<DD><A NAME="IDX105"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>typeset [-afFrxi] [-p] [<VAR>name</VAR>[=<VAR>value</VAR>] <small>...</small>]
-</pre></td></tr></table>The <CODE>typeset</CODE> command is supplied for compatibility with the Korn
-shell; however, it has been deprecated in favor of the <CODE>declare</CODE>
-builtin command.
-<P>
-
-<DT><CODE>ulimit</CODE>
-<DD><A NAME="IDX106"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>ulimit [-acdefilmnpqrstuvxSH] [<VAR>limit</VAR>]
-</pre></td></tr></table><CODE>ulimit</CODE> provides control over the resources available to processes
-started by the shell, on systems that allow such control.  If an
-option is given, it is interpreted as follows:
-<DL COMPACT>
-<DT><CODE>-S</CODE>
-<DD>Change and report the soft limit associated with a resource.
-<P>
-
-<DT><CODE>-H</CODE>
-<DD>Change and report the hard limit associated with a resource.
-<P>
-
-<DT><CODE>-a</CODE>
-<DD>All current limits are reported.
-<P>
-
-<DT><CODE>-c</CODE>
-<DD>The maximum size of core files created.
-<P>
-
-<DT><CODE>-d</CODE>
-<DD>The maximum size of a process's data segment.
-<P>
-
-<DT><CODE>-e</CODE>
-<DD>The maximum scheduling priority ("nice").
-<P>
-
-<DT><CODE>-f</CODE>
-<DD>The maximum size of files written by the shell and its children.
-<P>
-
-<DT><CODE>-i</CODE>
-<DD>The maximum number of pending signals.
-<P>
-
-<DT><CODE>-l</CODE>
-<DD>The maximum size that may be locked into memory.
-<P>
-
-<DT><CODE>-m</CODE>
-<DD>The maximum resident set size.
-<P>
-
-<DT><CODE>-n</CODE>
-<DD>The maximum number of open file descriptors.
-<P>
-
-<DT><CODE>-p</CODE>
-<DD>The pipe buffer size.
-<P>
-
-<DT><CODE>-q</CODE>
-<DD>The maximum number of bytes in POSIX message queues.
-<P>
-
-<DT><CODE>-r</CODE>
-<DD>The maximum real-time scheduling priority.
-<P>
-
-<DT><CODE>-s</CODE>
-<DD>The maximum stack size.
-<P>
-
-<DT><CODE>-t</CODE>
-<DD>The maximum amount of cpu time in seconds.
-<P>
-
-<DT><CODE>-u</CODE>
-<DD>The maximum number of processes available to a single user.
-<P>
-
-<DT><CODE>-v</CODE>
-<DD>The maximum amount of virtual memory available to the process.
-<P>
-
-<DT><CODE>-x</CODE>
-<DD>The maximum number of file locks.
-<P>
-
-</DL>
-<P>
-
-If <VAR>limit</VAR> is given, it is the new value of the specified resource;
-the special <VAR>limit</VAR> values <CODE>hard</CODE>, <CODE>soft</CODE>, and
-<CODE>unlimited</CODE> stand for the current hard limit, the current soft limit,
-and no limit, respectively.
-Otherwise, the current value of the soft limit for the specified resource
-is printed, unless the <SAMP>`-H'</SAMP> option is supplied.
-When setting new limits, if neither <SAMP>`-H'</SAMP> nor <SAMP>`-S'</SAMP> is supplied,
-both the hard and soft limits are set.
-If no option is given, then <SAMP>`-f'</SAMP> is assumed.  Values are in 1024-byte
-increments, except for <SAMP>`-t'</SAMP>, which is in seconds, <SAMP>`-p'</SAMP>,
-which is in units of 512-byte blocks, and <SAMP>`-n'</SAMP> and <SAMP>`-u'</SAMP>, which
-are unscaled values.
-</P><P>
-
-The return status is zero unless an invalid option or argument is supplied,
-or an error occurs while setting a new limit.
-</P><P>
-
-<DT><CODE>unalias</CODE>
-<DD><A NAME="IDX107"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>unalias [-a] [<VAR>name</VAR> <small>...</small> ]
-</pre></td></tr></table><P>
-
-Remove each <VAR>name</VAR> from the list of aliases.  If <SAMP>`-a'</SAMP> is
-supplied, all aliases are removed.
-Aliases are described in <A HREF="b.html#SEC82">6.6 Aliases</A>.
-</P><P>
-
-</DL>
-<P>
-
-<A NAME="Modifying Shell Behavior"></A>
-<HR SIZE="6">
-<A NAME="SEC59"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC58"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC60"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 4.3 Modifying Shell Behavior </H2>
-<!--docid::SEC59::-->
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC60">4.3.1 The Set Builtin</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Change the values of shell attributes and
-                               positional parameters.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Modify shell optional behavior.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="The Set Builtin"></A>
-<HR SIZE="6">
-<A NAME="SEC60"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC59"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC61"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC59"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 4.3.1 The Set Builtin </H3>
-<!--docid::SEC60::-->
-<P>
-
-This builtin is so complicated that it deserves its own section.  <CODE>set</CODE>
-allows you to change the values of shell options and set the positional
-parameters, or to display the names and values of shell variables.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>set</CODE>
-<DD><A NAME="IDX108"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>set [--abefhkmnptuvxBCEHPT] [-o <VAR>option</VAR>] [<VAR>argument</VAR> <small>...</small>]
-set [+abefhkmnptuvxBCEHPT] [+o <VAR>option</VAR>] [<VAR>argument</VAR> <small>...</small>]
-</pre></td></tr></table><P>
-
-If no options or arguments are supplied, <CODE>set</CODE> displays the names
-and values of all shell variables and functions, sorted according to the
-current locale, in a format that may be reused as input
-for setting or resetting the currently-set variables.
-Read-only variables cannot be reset.
-In POSIX mode, only shell variables are listed.
-</P><P>
-
-When options are supplied, they set or unset shell attributes.
-Options, if specified, have the following meanings:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-a</CODE>
-<DD>Mark variables and function which are modified or created for export
-to the environment of subsequent commands.
-<P>
-
-<DT><CODE>-b</CODE>
-<DD>Cause the status of terminated background jobs to be reported
-immediately, rather than before printing the next primary prompt.
-<P>
-
-<DT><CODE>-e</CODE>
-<DD>Exit immediately if a simple command (see section <A HREF="b.html#SEC16">3.2.1 Simple Commands</A>) exits
-with a non-zero status, unless the command that fails is part of the
-command list immediately following a <CODE>while</CODE> or <CODE>until</CODE> keyword,
-part of the test in an <CODE>if</CODE> statement,
-part of a <CODE>&#38;&#38;</CODE> or <CODE>||</CODE> list,
-any command in a pipeline but the last,
-or if the command's return status is being inverted using <CODE>!</CODE>.
-A trap on <CODE>ERR</CODE>, if set, is executed before the shell exits.
-<P>
-
-<DT><CODE>-f</CODE>
-<DD>Disable file name generation (globbing).
-<P>
-
-<DT><CODE>-h</CODE>
-<DD>Locate and remember (hash) commands as they are looked up for execution.
-This option is enabled by default.
-<P>
-
-<DT><CODE>-k</CODE>
-<DD>All arguments in the form of assignment statements are placed
-in the environment for a command, not just those that precede
-the command name.
-<P>
-
-<DT><CODE>-m</CODE>
-<DD>Job control is enabled (see section <A HREF="b.html#SEC89">7. Job Control</A>).
-<P>
-
-<DT><CODE>-n</CODE>
-<DD>Read commands but do not execute them; this may be used to check a
-script for syntax errors.
-This option is ignored by interactive shells.
-<P>
-
-<DT><CODE>-o <VAR>option-name</VAR></CODE>
-<DD><P>
-
-Set the option corresponding to <VAR>option-name</VAR>:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>allexport</CODE>
-<DD>Same as <CODE>-a</CODE>.
-<P>
-
-<DT><CODE>braceexpand</CODE>
-<DD>Same as <CODE>-B</CODE>.
-<P>
-
-<DT><CODE>emacs</CODE>
-<DD>Use an <CODE>emacs</CODE>-style line editing interface (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>).
-<P>
-
-<DT><CODE>errexit</CODE>
-<DD>Same as <CODE>-e</CODE>.
-<P>
-
-<DT><CODE>errtrace</CODE>
-<DD>Same as <CODE>-E</CODE>.
-<P>
-
-<DT><CODE>functrace</CODE>
-<DD>Same as <CODE>-T</CODE>.
-<P>
-
-<DT><CODE>hashall</CODE>
-<DD>Same as <CODE>-h</CODE>.
-<P>
-
-<DT><CODE>histexpand</CODE>
-<DD>Same as <CODE>-H</CODE>.
-<P>
-
-<DT><CODE>history</CODE>
-<DD>Enable command history, as described in <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>.
-This option is on by default in interactive shells.
-<P>
-
-<DT><CODE>ignoreeof</CODE>
-<DD>An interactive shell will not exit upon reading EOF.
-<P>
-
-<DT><CODE>keyword</CODE>
-<DD>Same as <CODE>-k</CODE>.
-<P>
-
-<DT><CODE>monitor</CODE>
-<DD>Same as <CODE>-m</CODE>.
-<P>
-
-<DT><CODE>noclobber</CODE>
-<DD>Same as <CODE>-C</CODE>.
-<P>
-
-<DT><CODE>noexec</CODE>
-<DD>Same as <CODE>-n</CODE>.
-<P>
-
-<DT><CODE>noglob</CODE>
-<DD>Same as <CODE>-f</CODE>.
-<P>
-
-<DT><CODE>nolog</CODE>
-<DD>Currently ignored.
-<P>
-
-<DT><CODE>notify</CODE>
-<DD>Same as <CODE>-b</CODE>.
-<P>
-
-<DT><CODE>nounset</CODE>
-<DD>Same as <CODE>-u</CODE>.
-<P>
-
-<DT><CODE>onecmd</CODE>
-<DD>Same as <CODE>-t</CODE>.
-<P>
-
-<DT><CODE>physical</CODE>
-<DD>Same as <CODE>-P</CODE>.
-<P>
-
-<DT><CODE>pipefail</CODE>
-<DD>If set, the return value of a pipeline is the value of the last
-(rightmost) command to exit with a non-zero status, or zero if all
-commands in the pipeline exit successfully.
-This option is disabled by default.
-<P>
-
-<DT><CODE>posix</CODE>
-<DD>Change the behavior of Bash where the default operation differs
-from the POSIX standard to match the standard
-(see section <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>).
-This is intended to make Bash behave as a strict superset of that
-standard.
-<P>
-
-<DT><CODE>privileged</CODE>
-<DD>Same as <CODE>-p</CODE>.
-<P>
-
-<DT><CODE>verbose</CODE>
-<DD>Same as <CODE>-v</CODE>.
-<P>
-
-<DT><CODE>vi</CODE>
-<DD>Use a <CODE>vi</CODE>-style line editing interface.
-<P>
-
-<DT><CODE>xtrace</CODE>
-<DD>Same as <CODE>-x</CODE>.
-</DL>
-<P>
-
-<DT><CODE>-p</CODE>
-<DD>Turn on privileged mode.
-In this mode, the <CODE>$BASH_ENV</CODE> and <CODE>$ENV</CODE> files are not
-processed, shell functions are not inherited from the environment,
-and the <CODE>SHELLOPTS</CODE> variable, if it appears in the environment,
-is ignored.
-If the shell is started with the effective user (group) id not equal to the
-real user (group) id, and the <CODE>-p</CODE> option is not supplied, these actions
-are taken and the effective user id is set to the real user id.
-If the <CODE>-p</CODE> option is supplied at startup, the effective user id is
-not reset.
-Turning this option off causes the effective user
-and group ids to be set to the real user and group ids.
-<P>
-
-<DT><CODE>-t</CODE>
-<DD>Exit after reading and executing one command.
-<P>
-
-<DT><CODE>-u</CODE>
-<DD>Treat unset variables as an error when performing parameter expansion.
-An error message will be written to the standard error, and a non-interactive
-shell will exit.
-<P>
-
-<DT><CODE>-v</CODE>
-<DD>Print shell input lines as they are read.
-<P>
-
-<DT><CODE>-x</CODE>
-<DD>Print a trace of simple commands, <CODE>for</CODE> commands, <CODE>case</CODE>
-commands, <CODE>select</CODE> commands, and arithmetic <CODE>for</CODE> commands
-and their arguments or associated word lists after they are
-expanded and before they are executed.  The value of the <CODE>PS4</CODE>
-variable is expanded and the resultant value is printed before
-the command and its expanded arguments.
-<P>
-
-<DT><CODE>-B</CODE>
-<DD>The shell will perform brace expansion (see section <A HREF="b.html#SEC28">3.5.1 Brace Expansion</A>).
-This option is on by default.
-<P>
-
-<DT><CODE>-C</CODE>
-<DD>Prevent output redirection using <SAMP>`&#62;'</SAMP>, <SAMP>`&#62;&#38;'</SAMP>, and <SAMP>`&#60;&#62;'</SAMP>
-from overwriting existing files.
-<P>
-
-<DT><CODE>-E</CODE>
-<DD>If set, any trap on <CODE>ERR</CODE> is inherited by shell functions, command
-substitutions, and commands executed in a subshell environment.
-The <CODE>ERR</CODE> trap is normally not inherited in such cases.
-<P>
-
-<DT><CODE>-H</CODE>
-<DD>Enable <SAMP>`!'</SAMP> style history substitution (see section <A HREF="b.html#SEC120">9.3 History Expansion</A>).
-This option is on by default for interactive shells.
-<P>
-
-<DT><CODE>-P</CODE>
-<DD>If set, do not follow symbolic links when performing commands such as
-<CODE>cd</CODE> which change the current directory.  The physical directory
-is used instead.  By default, Bash follows
-the logical chain of directories when performing commands
-which change the current directory.
-<P>
-
-For example, if <TT>`/usr/sys'</TT> is a symbolic link to <TT>`/usr/local/sys'</TT>
-then:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>$ cd /usr/sys; echo $PWD
-/usr/sys
-$ cd ..; pwd
-/usr
-</pre></td></tr></table></P><P>
-
-If <CODE>set -P</CODE> is on, then:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>$ cd /usr/sys; echo $PWD
-/usr/local/sys
-$ cd ..; pwd
-/usr/local
-</pre></td></tr></table></P><P>
-
-<DT><CODE>-T</CODE>
-<DD>If set, any trap on <CODE>DEBUG</CODE> and <CODE>RETURN</CODE> are inherited by
-shell functions, command substitutions, and commands executed
-in a subshell environment.
-The <CODE>DEBUG</CODE> and <CODE>RETURN</CODE> traps are normally not inherited
-in such cases.
-<P>
-
-<DT><CODE>--</CODE>
-<DD>If no arguments follow this option, then the positional parameters are
-unset.  Otherwise, the positional parameters are set to the
-<VAR>arguments</VAR>, even if some of them begin with a <SAMP>`-'</SAMP>.
-<P>
-
-<DT><CODE>-</CODE>
-<DD>Signal the end of options, cause all remaining <VAR>arguments</VAR>
-to be assigned to the positional parameters.  The <SAMP>`-x'</SAMP>
-and <SAMP>`-v'</SAMP>  options are turned off.
-If there are no arguments, the positional parameters remain unchanged.
-</DL>
-<P>
-
-Using <SAMP>`+'</SAMP> rather than <SAMP>`-'</SAMP> causes these options to be
-turned off.  The options can also be used upon invocation of the
-shell.  The current set of options may be found in <CODE>$-</CODE>.
-</P><P>
-
-The remaining N <VAR>arguments</VAR> are positional parameters and are
-assigned, in order, to <CODE>$1</CODE>, <CODE>$2</CODE>, <small>...</small>  <CODE>$N</CODE>.
-The special parameter <CODE>#</CODE> is set to N.
-</P><P>
-
-The return status is always zero unless an invalid option is supplied.
-</DL>
-<P>
-
-<A NAME="The Shopt Builtin"></A>
-<HR SIZE="6">
-<A NAME="SEC61"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC60"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC59"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 4.3.2 The Shopt Builtin </H3>
-<!--docid::SEC61::-->
-<P>
-
-This builtin allows you to change additional shell optional behavior.
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>shopt</CODE>
-<DD><A NAME="IDX109"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>shopt [-pqsu] [-o] [<VAR>optname</VAR> <small>...</small>]
-</pre></td></tr></table>Toggle the values of variables controlling optional shell behavior.
-With no options, or with the <SAMP>`-p'</SAMP> option, a list of all settable
-options is displayed, with an indication of whether or not each is set.
-The <SAMP>`-p'</SAMP> option causes output to be displayed in a form that
-may be reused as input.
-Other options have the following meanings:
-<P>
-
-<DL COMPACT>
-<DT><CODE>-s</CODE>
-<DD>Enable (set) each <VAR>optname</VAR>.
-<P>
-
-<DT><CODE>-u</CODE>
-<DD>Disable (unset) each <VAR>optname</VAR>.
-<P>
-
-<DT><CODE>-q</CODE>
-<DD>Suppresses normal output; the return status
-indicates whether the <VAR>optname</VAR> is set or unset.
-If multiple <VAR>optname</VAR> arguments are given with <SAMP>`-q'</SAMP>,
-the return status is zero if all <VAR>optnames</VAR> are enabled;
-non-zero otherwise.
-<P>
-
-<DT><CODE>-o</CODE>
-<DD>Restricts the values of
-<VAR>optname</VAR> to be those defined for the <SAMP>`-o'</SAMP> option to the
-<CODE>set</CODE> builtin (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-</DL>
-<P>
-
-If either <SAMP>`-s'</SAMP> or <SAMP>`-u'</SAMP>
-is used with no <VAR>optname</VAR> arguments, the display is limited to
-those options which are set or unset, respectively.
-</P><P>
-
-Unless otherwise noted, the <CODE>shopt</CODE> options are disabled (off)
-by default.
-</P><P>
-
-The return status when listing options is zero if all <VAR>optnames</VAR>
-are enabled, non-zero otherwise.  When setting or unsetting options,
-the return status is zero unless an <VAR>optname</VAR> is not a valid shell
-option.
-</P><P>
-
-The list of <CODE>shopt</CODE> options is:
-<DL COMPACT>
-
-<DT><CODE>autocd</CODE>
-<DD>If set, a command name that is the name of a directory is executed as if
-it were the argument to the <CODE>cd</CODE> command.
-This option is only used by interactive shells.
-<P>
-
-<DT><CODE>cdable_vars</CODE>
-<DD>If this is set, an argument to the <CODE>cd</CODE> builtin command that
-is not a directory is assumed to be the name of a variable whose
-value is the directory to change to.
-<P>
-
-<DT><CODE>cdspell</CODE>
-<DD>If set, minor errors in the spelling of a directory component in a
-<CODE>cd</CODE> command will be corrected.
-The errors checked for are transposed characters,
-a missing character, and a character too many.
-If a correction is found, the corrected path is printed,
-and the command proceeds.
-This option is only used by interactive shells.
-<P>
-
-<DT><CODE>checkhash</CODE>
-<DD>If this is set, Bash checks that a command found in the hash
-table exists before trying to execute it.  If a hashed command no
-longer exists, a normal path search is performed.
-<P>
-
-<DT><CODE>checkjobs</CODE>
-<DD>If set, Bash lists the status of any stopped and running jobs before
-exiting an interactive shell.  If any jobs are running, this causes
-the exit to be deferred until a second exit is attempted without an
-intervening command (see section <A HREF="b.html#SEC89">7. Job Control</A>).
-The shell always postpones exiting if any jobs are stopped.
-<P>
-
-<DT><CODE>checkwinsize</CODE>
-<DD>If set, Bash checks the window size after each command
-and, if necessary, updates the values of    
-<CODE>LINES</CODE> and <CODE>COLUMNS</CODE>.
-<P>
-
-<DT><CODE>cmdhist</CODE>
-<DD>If set, Bash
-attempts to save all lines of a multiple-line
-command in the same history entry.  This allows
-easy re-editing of multi-line commands.
-<P>
-
-<DT><CODE>dotglob</CODE>
-<DD>If set, Bash includes filenames beginning with a `.' in
-the results of filename expansion.
-<P>
-
-<DT><CODE>execfail</CODE>
-<DD>If this is set, a non-interactive shell will not exit if
-it cannot execute the file specified as an argument to the <CODE>exec</CODE>
-builtin command.  An interactive shell does not exit if <CODE>exec</CODE>
-fails.
-<P>
-
-<DT><CODE>expand_aliases</CODE>
-<DD>If set, aliases are expanded as described below under Aliases,
-<A HREF="b.html#SEC82">6.6 Aliases</A>.
-This option is enabled by default for interactive shells.
-<P>
-
-<DT><CODE>extdebug</CODE>
-<DD>If set, behavior intended for use by debuggers is enabled:
-<P>
-
-<OL>
-<LI>
-The <SAMP>`-F'</SAMP> option to the <CODE>declare</CODE> builtin (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>)
-displays the source file name and line number corresponding to each function
-name supplied as an argument.
-<P>
-
-<LI>
-If the command run by the <CODE>DEBUG</CODE> trap returns a non-zero value, the
-next command is skipped and not executed.
-<P>
-
-<LI>
-If the command run by the <CODE>DEBUG</CODE> trap returns a value of 2, and the
-shell is executing in a subroutine (a shell function or a shell script
-executed by the <CODE>.</CODE> or <CODE>source</CODE> builtins), a call to
-<CODE>return</CODE> is simulated.
-<P>
-
-<LI>
-<CODE>BASH_ARGC</CODE> and <CODE>BASH_ARGV</CODE> are updated as described in their
-descriptions (see section <A HREF="b.html#SEC65">5.2 Bash Variables</A>).
-<P>
-
-<LI>
-Function tracing is enabled:  command substitution, shell functions, and
-subshells invoked with <CODE>( <VAR>command</VAR> )</CODE> inherit the
-<CODE>DEBUG</CODE> and <CODE>RETURN</CODE> traps.
-<P>
-
-<LI>
-Error tracing is enabled:  command substitution, shell functions, and
-subshells invoked with <CODE>( <VAR>command</VAR> )</CODE> inherit the
-<CODE>ERROR</CODE> trap.
-</OL>
-<P>
-
-<DT><CODE>extglob</CODE>
-<DD>If set, the extended pattern matching features described above
-(see section <A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A>) are enabled.
-<P>
-
-<DT><CODE>extquote</CODE>
-<DD>If set, <CODE>$'<VAR>string</VAR>'</CODE> and <CODE>$"<VAR>string</VAR>"</CODE> quoting is  
-performed within <CODE>${<VAR>parameter</VAR>}</CODE> expansions                     
-enclosed in double quotes.  This option is enabled by default. 
-<P>
-
-<DT><CODE>failglob</CODE>
-<DD>If set, patterns which fail to match filenames during pathname expansion
-result in an expansion error.
-<P>
-
-<DT><CODE>force_fignore</CODE>
-<DD>If set, the suffixes specified by the <CODE>FIGNORE</CODE> shell variable
-cause words to be ignored when performing word completion even if
-the ignored words are the only possible completions.
-See section <A HREF="b.html#SEC65">5.2 Bash Variables</A>, for a description of <CODE>FIGNORE</CODE>.
-This option is enabled by default.
-<P>
-
-<DT><CODE>gnu_errfmt</CODE>
-<DD>If set, shell error messages are written in the standard GNU error
-message format.
-<P>
-
-<DT><CODE>histappend</CODE>
-<DD>If set, the history list is appended to the file named by the value
-of the <CODE>HISTFILE</CODE>
-variable when the shell exits, rather than overwriting the file.
-<P>
-
-<DT><CODE>histreedit</CODE>
-<DD>If set, and Readline
-is being used, a user is given the opportunity to re-edit a
-failed history substitution.
-<P>
-
-<DT><CODE>histverify</CODE>
-<DD>If set, and Readline
-is being used, the results of history substitution are not immediately
-passed to the shell parser.  Instead, the resulting line is loaded into
-the Readline editing buffer, allowing further modification.
-<P>
-
-<DT><CODE>hostcomplete</CODE>
-<DD>If set, and Readline is being used, Bash will attempt to perform
-hostname completion when a word containing a <SAMP>`@'</SAMP> is being
-completed (see section <A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A>).  This option is enabled
-by default.
-<P>
-
-<DT><CODE>huponexit</CODE>
-<DD>If set, Bash will send <CODE>SIGHUP</CODE> to all jobs when an interactive
-login shell exits (see section <A HREF="b.html#SEC54">3.7.6 Signals</A>).
-<P>
-
-<DT><CODE>interactive_comments</CODE>
-<DD>Allow a word beginning with <SAMP>`#'</SAMP>
-to cause that word and all remaining characters on that
-line to be ignored in an interactive shell.
-This option is enabled by default.
-<P>
-
-<DT><CODE>lithist</CODE>
-<DD>If enabled, and the <CODE>cmdhist</CODE>
-option is enabled, multi-line commands are saved to the history with
-embedded newlines rather than using semicolon separators where possible.
-<P>
-
-<DT><CODE>login_shell</CODE>
-<DD>The shell sets this option if it is started as a login shell
-(see section <A HREF="b.html#SEC67">6.1 Invoking Bash</A>).
-The value may not be changed.
-<P>
-
-<DT><CODE>mailwarn</CODE>
-<DD>If set, and a file that Bash is checking for mail has been  
-accessed since the last time it was checked, the message
-<CODE>"The mail in <VAR>mailfile</VAR> has been read"</CODE> is displayed.
-<P>
-
-<DT><CODE>no_empty_cmd_completion</CODE>
-<DD>If set, and Readline is being used, Bash will not attempt to search
-the <CODE>PATH</CODE> for possible completions when completion is attempted
-on an empty line.
-<P>
-
-<DT><CODE>nocaseglob</CODE>
-<DD>If set, Bash matches filenames in a case-insensitive fashion when
-performing filename expansion.
-<P>
-
-<DT><CODE>nocasematch</CODE>
-<DD>If set, Bash matches patterns in a case-insensitive fashion when
-performing matching while executing <CODE>case</CODE> or <CODE>[[</CODE>
-conditional commands.
-<P>
-
-<DT><CODE>nullglob</CODE>
-<DD>If set, Bash allows filename patterns which match no
-files to expand to a null string, rather than themselves.
-<P>
-
-<DT><CODE>progcomp</CODE>
-<DD>If set, the programmable completion facilities
-(see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>) are enabled.
-This option is enabled by default.
-<P>
-
-<DT><CODE>promptvars</CODE>
-<DD>If set, prompt strings undergo
-parameter expansion, command substitution, arithmetic
-expansion, and quote removal after being expanded
-as described below (see section <A HREF="b.html#SEC86">6.9 Controlling the Prompt</A>).
-This option is enabled by default.
-<P>
-
-<DT><CODE>restricted_shell</CODE>
-<DD>The shell sets this option if it is started in restricted mode
-(see section <A HREF="b.html#SEC87">6.10 The Restricted Shell</A>).
-The value may not be changed.
-This is not reset when the startup files are executed, allowing
-the startup files to discover whether or not a shell is restricted.
-<P>
-
-<DT><CODE>shift_verbose</CODE>
-<DD>If this is set, the <CODE>shift</CODE>
-builtin prints an error message when the shift count exceeds the
-number of positional parameters.
-<P>
-
-<DT><CODE>sourcepath</CODE>
-<DD>If set, the <CODE>source</CODE> builtin uses the value of <CODE>PATH</CODE>
-to find the directory containing the file supplied as an argument.
-This option is enabled by default.
-<P>
-
-<DT><CODE>xpg_echo</CODE>
-<DD>If set, the <CODE>echo</CODE> builtin expands backslash-escape sequences
-by default.
-<P>
-
-</DL>
-<P>
-
-The return status when listing options is zero if all <VAR>optnames</VAR>
-are enabled, non-zero otherwise.
-When setting or unsetting options, the return status is zero unless an
-<VAR>optname</VAR> is not a valid shell option.
-</P><P>
-
-</DL>
-<P>
-
-<A NAME="Special Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC62"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC61"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC56"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 4.4 Special Builtins </H2>
-<!--docid::SEC62::-->
-<P>
-
-For historical reasons, the POSIX standard has classified
-several builtin commands as <EM>special</EM>.
-When Bash is executing in POSIX mode, the special builtins
-differ from other builtin commands in three respects:
-</P><P>
-
-<OL>
-<LI>
-Special builtins are found before shell functions during command lookup.
-<P>
-
-<LI>
-If a special builtin returns an error status, a non-interactive shell exits.
-<P>
-
-<LI>
-Assignment statements preceding the command stay in effect in the shell
-environment after the command completes.
-</OL>
-<P>
-
-When Bash is not executing in POSIX mode, these builtins behave no
-differently than the rest of the Bash builtin commands.
-The Bash POSIX mode is described in <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>. 
-</P><P>
-
-These are the POSIX special builtins:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>break : . continue eval exec exit export readonly return set
-shift trap unset
-</pre></td></tr></table></P><P>
-
-<A NAME="Shell Variables"></A>
-<HR SIZE="6">
-<A NAME="SEC63"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC62"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC64"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 5. Shell Variables </H1>
-<!--docid::SEC63::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables which Bash uses in the same way
-                               as the Bourne Shell.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">List of variables that exist in Bash.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-This chapter describes the shell variables that Bash uses.
-Bash automatically assigns default values to a number of variables.
-</P><P>
-
-<A NAME="Bourne Shell Variables"></A>
-<HR SIZE="6">
-<A NAME="SEC64"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC65"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 5.1 Bourne Shell Variables </H2>
-<!--docid::SEC64::-->
-<P>
-
-Bash uses certain shell variables in the same way as the Bourne shell.
-In some cases, Bash assigns a default value to the variable.
-</P><P>
-
-<DL COMPACT>
-
-<A NAME="IDX110"></A>
-<DT><CODE>CDPATH</CODE>
-<DD><A NAME="IDX111"></A>
-A colon-separated list of directories used as a search path for
-the <CODE>cd</CODE> builtin command.
-<P>
-
-<A NAME="IDX112"></A>
-<DT><CODE>HOME</CODE>
-<DD><A NAME="IDX113"></A>
-The current user's home directory; the default for the <CODE>cd</CODE> builtin
-command.
-The value of this variable is also used by tilde expansion
-(see section <A HREF="b.html#SEC29">3.5.2 Tilde Expansion</A>).
-<P>
-
-<A NAME="IDX114"></A>
-<DT><CODE>IFS</CODE>
-<DD><A NAME="IDX115"></A>
-A list of characters that separate fields; used when the shell splits
-words as part of expansion.
-<P>
-
-<A NAME="IDX116"></A>
-<DT><CODE>MAIL</CODE>
-<DD><A NAME="IDX117"></A>
-If this parameter is set to a filename and the <CODE>MAILPATH</CODE> variable
-is not set, Bash informs the user of the arrival of mail in
-the specified file.
-<P>
-
-<A NAME="IDX118"></A>
-<DT><CODE>MAILPATH</CODE>
-<DD><A NAME="IDX119"></A>
-A colon-separated list of filenames which the shell periodically checks
-for new mail.
-Each list entry can specify the message that is printed when new mail
-arrives in the mail file by separating the file name from the message with
-a <SAMP>`?'</SAMP>.
-When used in the text of the message, <CODE>$_</CODE> expands to the name of
-the current mail file.
-<P>
-
-<A NAME="IDX120"></A>
-<DT><CODE>OPTARG</CODE>
-<DD><A NAME="IDX121"></A>
-The value of the last option argument processed by the <CODE>getopts</CODE> builtin.
-<P>
-
-<A NAME="IDX122"></A>
-<DT><CODE>OPTIND</CODE>
-<DD><A NAME="IDX123"></A>
-The index of the last option argument processed by the <CODE>getopts</CODE> builtin.
-<P>
-
-<A NAME="IDX124"></A>
-<DT><CODE>PATH</CODE>
-<DD><A NAME="IDX125"></A>
-A colon-separated list of directories in which the shell looks for
-commands.
-A zero-length (null) directory name in the value of <CODE>PATH</CODE> indicates the
-current directory.
-A null directory name may appear as two adjacent colons, or as an initial
-or trailing colon.
-<P>
-
-<A NAME="IDX126"></A>
-<DT><CODE>PS1</CODE>
-<DD><A NAME="IDX127"></A>
-The primary prompt string.  The default value is <SAMP>`\s-\v\$ '</SAMP>.
-See section <A HREF="b.html#SEC86">6.9 Controlling the Prompt</A>, for the complete list of escape
-sequences that are expanded before <CODE>PS1</CODE> is displayed.
-<P>
-
-<A NAME="IDX128"></A>
-<DT><CODE>PS2</CODE>
-<DD><A NAME="IDX129"></A>
-The secondary prompt string.  The default value is <SAMP>`&#62; '</SAMP>.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Bash Variables"></A>
-<HR SIZE="6">
-<A NAME="SEC65"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC64"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC63"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 5.2 Bash Variables </H2>
-<!--docid::SEC65::-->
-<P>
-
-These variables are set or used by Bash, but other shells
-do not normally treat them specially.
-</P><P>
-
-A few variables used by Bash are described in different chapters:
-variables for controlling the job control facilities
-(see section <A HREF="b.html#SEC92">7.3 Job Control Variables</A>).
-</P><P>
-
-<DL COMPACT>
-
-<A NAME="IDX130"></A>
-<DT><CODE>BASH</CODE>
-<DD><A NAME="IDX131"></A>
-The full pathname used to execute the current instance of Bash.
-<P>
-
-<A NAME="IDX132"></A>
-<DT><CODE>BASHPID</CODE>
-<DD><A NAME="IDX133"></A>
-Expands to the process id of the current Bash process.
-This differs from <CODE>$$</CODE> under certain circumstances, such as subshells
-that do not require Bash to be re-initialized.
-<P>
-
-<A NAME="IDX134"></A>
-<DT><CODE>BASH_ARGC</CODE>
-<DD><A NAME="IDX135"></A>
-An array variable whose values are the number of parameters in each
-frame of the current bash execution call stack.  The number of
-parameters to the current subroutine (shell function or script executed
-with <CODE>.</CODE> or <CODE>source</CODE>) is at the top of the stack.  When a
-subroutine is executed, the number of parameters passed is pushed onto
-<CODE>BASH_ARGC</CODE>.
-The shell sets <CODE>BASH_ARGC</CODE> only when in extended debugging mode
-(see <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>
-for a description of the <CODE>extdebug</CODE> option to the <CODE>shopt</CODE>
-builtin).
-<P>
-
-<A NAME="IDX136"></A>
-<DT><CODE>BASH_ARGV</CODE>
-<DD><A NAME="IDX137"></A>
-An array variable containing all of the parameters in the current bash
-execution call stack.  The final parameter of the last subroutine call
-is at the top of the stack; the first parameter of the initial call is
-at the bottom.  When a subroutine is executed, the parameters supplied
-are pushed onto <CODE>BASH_ARGV</CODE>.
-The shell sets <CODE>BASH_ARGV</CODE> only when in extended debugging mode
-(see <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>
-for a description of the <CODE>extdebug</CODE> option to the <CODE>shopt</CODE>
-builtin).
-<P>
-
-<A NAME="IDX138"></A>
-<DT><CODE>BASH_COMMAND</CODE>
-<DD><A NAME="IDX139"></A>
-The command currently being executed or about to be executed, unless the
-shell is executing a command as the result of a trap,
-in which case it is the command executing at the time of the trap.
-<P>
-
-<A NAME="IDX140"></A>
-<DT><CODE>BASH_ENV</CODE>
-<DD><A NAME="IDX141"></A>
-If this variable is set when Bash is invoked to execute a shell
-script, its value is expanded and used as the name of a startup file
-to read before executing the script.  See section <A HREF="b.html#SEC68">6.2 Bash Startup Files</A>.
-<P>
-
-<A NAME="IDX142"></A>
-<DT><CODE>BASH_EXECUTION_STRING</CODE>
-<DD><A NAME="IDX143"></A>
-The command argument to the <SAMP>`-c'</SAMP> invocation option.
-<P>
-
-<A NAME="IDX144"></A>
-<DT><CODE>BASH_LINENO</CODE>
-<DD><A NAME="IDX145"></A>
-An array variable whose members are the line numbers in source files
-corresponding to each member of <VAR>FUNCNAME</VAR>.
-<CODE>${BASH_LINENO[$i]}</CODE> is the line number in the source file where
-<CODE>${FUNCNAME[$i]}</CODE> was called.
-The corresponding source file name is <CODE>${BASH_SOURCE[$i]}</CODE>.
-Use <CODE>LINENO</CODE> to obtain the current line number.
-<P>
-
-<A NAME="IDX146"></A>
-<DT><CODE>BASH_REMATCH</CODE>
-<DD><A NAME="IDX147"></A>
-An array variable whose members are assigned by the <SAMP>`=~'</SAMP> binary
-operator to the <CODE>[[</CODE> conditional command
-(see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>).
-The element with index 0 is the portion of the string
-matching the entire regular expression.
-The element with index <VAR>n</VAR> is the portion of the
-string matching the <VAR>n</VAR>th parenthesized subexpression.
-This variable is read-only.
-<P>
-
-<A NAME="IDX148"></A>
-<DT><CODE>BASH_SOURCE</CODE>
-<DD><A NAME="IDX149"></A>
-An array variable whose members are the source filenames corresponding
-to the elements in the <CODE>FUNCNAME</CODE> array variable.
-<P>
-
-<A NAME="IDX150"></A>
-<DT><CODE>BASH_SUBSHELL</CODE>
-<DD><A NAME="IDX151"></A>
-Incremented by one each time a subshell or subshell environment is spawned.
-The initial value is 0.
-<P>
-
-<A NAME="IDX152"></A>
-<DT><CODE>BASH_VERSINFO</CODE>
-<DD><A NAME="IDX153"></A>
-A readonly array variable (see section <A HREF="b.html#SEC83">6.7 Arrays</A>)
-whose members hold version information for this instance of Bash.
-The values assigned to the array members are as follows:
-<P>
-
-<DL COMPACT>
-
-<DT><CODE>BASH_VERSINFO[0]</CODE>
-<DD>The major version number (the <VAR>release</VAR>).
-<P>
-
-<DT><CODE>BASH_VERSINFO[1]</CODE>
-<DD>The minor version number (the <VAR>version</VAR>).
-<P>
-
-<DT><CODE>BASH_VERSINFO[2]</CODE>
-<DD>The patch level.
-<P>
-
-<DT><CODE>BASH_VERSINFO[3]</CODE>
-<DD>The build version.
-<P>
-
-<DT><CODE>BASH_VERSINFO[4]</CODE>
-<DD>The release status (e.g., <VAR>beta1</VAR>).
-<P>
-
-<DT><CODE>BASH_VERSINFO[5]</CODE>
-<DD>The value of <CODE>MACHTYPE</CODE>.
-<P>
-
-</DL>
-<P>
-
-<A NAME="IDX154"></A>
-<DT><CODE>BASH_VERSION</CODE>
-<DD><A NAME="IDX155"></A>
-The version number of the current instance of Bash.
-<P>
-
-<A NAME="IDX156"></A>
-<DT><CODE>COLUMNS</CODE>
-<DD><A NAME="IDX157"></A>
-Used by the <CODE>select</CODE> builtin command to determine the terminal width
-when printing selection lists.  Automatically set upon receipt of a
-<CODE>SIGWINCH</CODE>.
-<P>
-
-<A NAME="IDX158"></A>
-<DT><CODE>COMP_CWORD</CODE>
-<DD><A NAME="IDX159"></A>
-An index into <CODE>${COMP_WORDS}</CODE> of the word containing the current
-cursor position.
-This variable is available only in shell functions invoked by the
-programmable completion facilities (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-<P>
-
-<A NAME="IDX160"></A>
-<DT><CODE>COMP_LINE</CODE>
-<DD><A NAME="IDX161"></A>
-The current command line.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-<P>
-
-<A NAME="IDX162"></A>
-<DT><CODE>COMP_POINT</CODE>
-<DD><A NAME="IDX163"></A>
-The index of the current cursor position relative to the beginning of
-the current command.
-If the current cursor position is at the end of the current command,
-the value of this variable is equal to <CODE>${#COMP_LINE}</CODE>.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-<P>
-
-<A NAME="IDX164"></A>
-<DT><CODE>COMP_TYPE</CODE>
-<DD><A NAME="IDX165"></A>
-Set to an integer value corresponding to the type of completion attempted
-that caused a completion function to be called:
-<VAR>TAB</VAR>, for normal completion,
-<SAMP>`?'</SAMP>, for listing completions after successive tabs,
-<SAMP>`!'</SAMP>, for listing alternatives on partial word completion,
-<SAMP>`@'</SAMP>, to list completions if the word is not unmodified,
-or
-<SAMP>`%'</SAMP>, for menu completion.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-<P>
-
-<A NAME="IDX166"></A>
-<DT><CODE>COMP_KEY</CODE>
-<DD><A NAME="IDX167"></A>
-The key (or final key of a key sequence) used to invoke the current
-completion function.
-<P>
-
-<A NAME="IDX168"></A>
-<DT><CODE>COMP_WORDBREAKS</CODE>
-<DD><A NAME="IDX169"></A>
-The set of characters that the Readline library treats as word
-separators when performing word completion.
-If <CODE>COMP_WORDBREAKS</CODE> is unset, it loses its special properties,
-even if it is subsequently reset.
-<P>
-
-<A NAME="IDX170"></A>
-<DT><CODE>COMP_WORDS</CODE>
-<DD><A NAME="IDX171"></A>
-An array variable consisting of the individual
-words in the current command line.
-The words are split on shell metacharacters as the shell parser would
-separate them.
-This variable is available only in shell functions invoked by the
-programmable completion facilities (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-<P>
-
-<A NAME="IDX172"></A>
-<DT><CODE>COMPREPLY</CODE>
-<DD><A NAME="IDX173"></A>
-An array variable from which Bash reads the possible completions
-generated by a shell function invoked by the programmable completion
-facility (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-<P>
-
-<A NAME="IDX174"></A>
-<DT><CODE>DIRSTACK</CODE>
-<DD><A NAME="IDX175"></A>
-An array variable containing the current contents of the directory stack.
-Directories appear in the stack in the order they are displayed by the
-<CODE>dirs</CODE> builtin.
-Assigning to members of this array variable may be used to modify
-directories already in the stack, but the <CODE>pushd</CODE> and <CODE>popd</CODE>
-builtins must be used to add and remove directories.
-Assignment to this variable will not change the current directory.
-If <CODE>DIRSTACK</CODE> is unset, it loses its special properties, even if
-it is subsequently reset.
-<P>
-
-<A NAME="IDX176"></A>
-<DT><CODE>EMACS</CODE>
-<DD><A NAME="IDX177"></A>
-If Bash finds this variable in the environment when the shell
-starts with value <SAMP>`t'</SAMP>, it assumes that the shell is running in an
-emacs shell buffer and disables line editing.
-<P>
-
-<A NAME="IDX178"></A>
-<DT><CODE>EUID</CODE>
-<DD><A NAME="IDX179"></A>
-The numeric effective user id of the current user.  This variable
-is readonly.
-<P>
-
-<A NAME="IDX180"></A>
-<DT><CODE>FCEDIT</CODE>
-<DD><A NAME="IDX181"></A>
-The editor used as a default by the <SAMP>`-e'</SAMP> option to the <CODE>fc</CODE>
-builtin command.
-<P>
-
-<A NAME="IDX182"></A>
-<DT><CODE>FIGNORE</CODE>
-<DD><A NAME="IDX183"></A>
-A colon-separated list of suffixes to ignore when performing
-filename completion.
-A file name whose suffix matches one of the entries in 
-<CODE>FIGNORE</CODE>
-is excluded from the list of matched file names.  A sample
-value is <SAMP>`.o:~'</SAMP>
-<P>
-
-<A NAME="IDX184"></A>
-<DT><CODE>FUNCNAME</CODE>
-<DD><A NAME="IDX185"></A>
-An array variable containing the names of all shell functions
-currently in the execution call stack.
-The element with index 0 is the name of any currently-executing
-shell function.
-The bottom-most element is <CODE>"main"</CODE>.
-This variable exists only when a shell function is executing.
-Assignments to <CODE>FUNCNAME</CODE> have no effect and return an error status.
-If <CODE>FUNCNAME</CODE> is unset, it loses its special properties, even if
-it is subsequently reset.
-<P>
-
-<A NAME="IDX186"></A>
-<DT><CODE>GLOBIGNORE</CODE>
-<DD><A NAME="IDX187"></A>
-A colon-separated list of patterns defining the set of filenames to
-be ignored by filename expansion.
-If a filename matched by a filename expansion pattern also matches one
-of the patterns in <CODE>GLOBIGNORE</CODE>, it is removed from the list
-of matches.
-<P>
-
-<A NAME="IDX188"></A>
-<DT><CODE>GROUPS</CODE>
-<DD><A NAME="IDX189"></A>
-An array variable containing the list of groups of which the current    
-user is a member.
-Assignments to <CODE>GROUPS</CODE> have no effect and return an error status.
-If <CODE>GROUPS</CODE> is unset, it loses its special properties, even if it is
-subsequently reset.
-<P>
-
-<A NAME="IDX190"></A>
-<DT><CODE>histchars</CODE>
-<DD><A NAME="IDX191"></A>
-Up to three characters which control history expansion, quick
-substitution, and tokenization (see section <A HREF="b.html#SEC120">9.3 History Expansion</A>).
-The first character is the
-<VAR>history expansion</VAR> character, that is, the character which signifies the
-start of a history expansion, normally <SAMP>`!'</SAMP>.  The second character is the
-character which signifies `quick substitution' when seen as the first
-character on a line, normally <SAMP>`^'</SAMP>.  The optional third character is the
-character which indicates that the remainder of the line is a comment when
-found as the first character of a word, usually <SAMP>`#'</SAMP>.  The history
-comment character causes history substitution to be skipped for the
-remaining words on the line.  It does not necessarily cause the shell
-parser to treat the rest of the line as a comment.
-<P>
-
-<A NAME="IDX192"></A>
-<DT><CODE>HISTCMD</CODE>
-<DD><A NAME="IDX193"></A>
-The history number, or index in the history list, of the current
-command.  If <CODE>HISTCMD</CODE> is unset, it loses its special properties,
-even if it is subsequently reset.
-<P>
-
-<A NAME="IDX194"></A>
-<DT><CODE>HISTCONTROL</CODE>
-<DD><A NAME="IDX195"></A>
-A colon-separated list of values controlling how commands are saved on
-the history list.
-If the list of values includes <SAMP>`ignorespace'</SAMP>, lines which begin
-with a space character are not saved in the history list.
-A value of <SAMP>`ignoredups'</SAMP> causes lines which match the previous
-history entry to not be saved.
-A value of <SAMP>`ignoreboth'</SAMP> is shorthand for
-<SAMP>`ignorespace'</SAMP> and <SAMP>`ignoredups'</SAMP>.
-A value of <SAMP>`erasedups'</SAMP> causes all previous lines matching the
-current line to be removed from the history list before that line
-is saved.
-Any value not in the above list is ignored.
-If <CODE>HISTCONTROL</CODE> is unset, or does not include a valid value, 
-all lines read by the shell parser are saved on the history list, 
-subject to the value of <CODE>HISTIGNORE</CODE>.
-The second and subsequent lines of a multi-line compound command are
-not tested, and are added to the history regardless of the value of
-<CODE>HISTCONTROL</CODE>.
-<P>
-
-<A NAME="IDX196"></A>
-<DT><CODE>HISTFILE</CODE>
-<DD><A NAME="IDX197"></A>
-The name of the file to which the command history is saved.  The
-default value is <TT>`~/.bash_history'</TT>.
-<P>
-
-<A NAME="IDX198"></A>
-<DT><CODE>HISTFILESIZE</CODE>
-<DD><A NAME="IDX199"></A>
-The maximum number of lines contained in the history file.  When this
-variable is assigned a value, the history file is truncated, if
-necessary, by removing the oldest entries,
-to contain no more than that number of lines.
-The history file is also truncated to this size after
-writing it when an interactive shell exits.
-The default value is 500.
-<P>
-
-<A NAME="IDX200"></A>
-<DT><CODE>HISTIGNORE</CODE>
-<DD><A NAME="IDX201"></A>
-A colon-separated list of patterns used to decide which command
-lines should be saved on the history list.  Each pattern is
-anchored at the beginning of the line and must match the complete
-line (no implicit <SAMP>`*'</SAMP> is appended).  Each pattern is tested
-against the line after the checks specified by <CODE>HISTCONTROL</CODE>
-are applied.  In addition to the normal shell pattern matching
-characters, <SAMP>`&#38;'</SAMP> matches the previous history line.  <SAMP>`&#38;'</SAMP>
-may be escaped using a backslash; the backslash is removed
-before attempting a match. 
-The second and subsequent lines of a multi-line compound command are
-not tested, and are added to the history regardless of the value of
-<CODE>HISTIGNORE</CODE>.
-<P>
-
-<CODE>HISTIGNORE</CODE> subsumes the function of <CODE>HISTCONTROL</CODE>.  A
-pattern of <SAMP>`&#38;'</SAMP> is identical to <CODE>ignoredups</CODE>, and a
-pattern of <SAMP>`[ ]*'</SAMP> is identical to <CODE>ignorespace</CODE>. 
-Combining these two patterns, separating them with a colon,
-provides the functionality of <CODE>ignoreboth</CODE>. 
-</P><P>
-
-<A NAME="IDX202"></A>
-<DT><CODE>HISTSIZE</CODE>
-<DD><A NAME="IDX203"></A>
-The maximum number of commands to remember on the history list.
-The default value is 500.
-<P>
-
-<A NAME="IDX204"></A>
-<DT><CODE>HISTTIMEFORMAT</CODE>
-<DD><A NAME="IDX205"></A>
-If this variable is set and not null, its value is used as a format string
-for <VAR>strftime</VAR> to print the time stamp associated with each history
-entry displayed by the <CODE>history</CODE> builtin.
-If this variable is set, time stamps are written to the history file so
-they may be preserved across shell sessions.
-<P>
-
-<A NAME="IDX206"></A>
-<DT><CODE>HOSTFILE</CODE>
-<DD><A NAME="IDX207"></A>
-Contains the name of a file in the same format as <TT>`/etc/hosts'</TT> that
-should be read when the shell needs to complete a hostname.
-The list of possible hostname completions may be changed while the shell
-is running;
-the next time hostname completion is attempted after the
-value is changed, Bash adds the contents of the new file to the
-existing list.
-If <CODE>HOSTFILE</CODE> is set, but has no value, Bash attempts to read 
-<TT>`/etc/hosts'</TT> to obtain the list of possible hostname completions.
-When <CODE>HOSTFILE</CODE> is unset, the hostname list is cleared.
-<P>
-
-<A NAME="IDX208"></A>
-<DT><CODE>HOSTNAME</CODE>
-<DD><A NAME="IDX209"></A>
-The name of the current host.
-<P>
-
-<A NAME="IDX210"></A>
-<DT><CODE>HOSTTYPE</CODE>
-<DD><A NAME="IDX211"></A>
-A string describing the machine Bash is running on.
-<P>
-
-<A NAME="IDX212"></A>
-<DT><CODE>IGNOREEOF</CODE>
-<DD><A NAME="IDX213"></A>
-Controls the action of the shell on receipt of an <CODE>EOF</CODE> character
-as the sole input.  If set, the value denotes the number
-of consecutive <CODE>EOF</CODE> characters that can be read as the
-first character on an input line
-before the shell will exit.  If the variable exists but does not
-have a numeric value (or has no value) then the default is 10.
-If the variable does not exist, then <CODE>EOF</CODE> signifies the end of 
-input to the shell.  This is only in effect for interactive shells.
-<P>
-
-<A NAME="IDX214"></A>
-<DT><CODE>INPUTRC</CODE>
-<DD><A NAME="IDX215"></A>
-The name of the Readline initialization file, overriding the default
-of <TT>`~/.inputrc'</TT>.
-<P>
-
-<A NAME="IDX216"></A>
-<DT><CODE>LANG</CODE>
-<DD><A NAME="IDX217"></A>
-Used to determine the locale category for any category not specifically
-selected with a variable starting with <CODE>LC_</CODE>.
-<P>
-
-<A NAME="IDX218"></A>
-<DT><CODE>LC_ALL</CODE>
-<DD><A NAME="IDX219"></A>
-This variable overrides the value of <CODE>LANG</CODE> and any other
-<CODE>LC_</CODE> variable specifying a locale category.
-<P>
-
-<A NAME="IDX220"></A>
-<DT><CODE>LC_COLLATE</CODE>
-<DD><A NAME="IDX221"></A>
-This variable determines the collation order used when sorting the
-results of filename expansion, and
-determines the behavior of range expressions, equivalence classes,
-and collating sequences within filename expansion and pattern matching
-(see section <A HREF="b.html#SEC35">3.5.8 Filename Expansion</A>).
-<P>
-
-<A NAME="IDX222"></A>
-<DT><CODE>LC_CTYPE</CODE>
-<DD><A NAME="IDX223"></A>
-This variable determines the interpretation of characters and the
-behavior of character classes within filename expansion and pattern
-matching (see section <A HREF="b.html#SEC35">3.5.8 Filename Expansion</A>).
-<P>
-
-<A NAME="IDX224"></A>
-<DT><CODE>LC_MESSAGES</CODE>
-<DD><A NAME="IDX225"></A>
-This variable determines the locale used to translate double-quoted
-strings preceded by a <SAMP>`$'</SAMP> (see section <A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A>).
-<P>
-
-<A NAME="IDX226"></A>
-<DT><CODE>LC_NUMERIC</CODE>
-<DD><A NAME="IDX227"></A>
-This variable determines the locale category used for number formatting.
-<P>
-
-<A NAME="IDX228"></A>
-<DT><CODE>LINENO</CODE>
-<DD><A NAME="IDX229"></A>
-The line number in the script or shell function currently executing.
-<P>
-
-<A NAME="IDX230"></A>
-<DT><CODE>LINES</CODE>
-<DD><A NAME="IDX231"></A>
-Used by the <CODE>select</CODE> builtin command to determine the column length
-for printing selection lists.  Automatically set upon receipt of a
-<CODE>SIGWINCH</CODE>.
-<P>
-
-<A NAME="IDX232"></A>
-<DT><CODE>MACHTYPE</CODE>
-<DD><A NAME="IDX233"></A>
-A string that fully describes the system type on which Bash
-is executing, in the standard GNU <VAR>cpu-company-system</VAR> format.
-<P>
-
-<A NAME="IDX234"></A>
-<DT><CODE>MAILCHECK</CODE>
-<DD><A NAME="IDX235"></A>
-How often (in seconds) that the shell should check for mail in the
-files specified in the <CODE>MAILPATH</CODE> or <CODE>MAIL</CODE> variables.
-The default is 60 seconds.  When it is time to check
-for mail, the shell does so before displaying the primary prompt.
-If this variable is unset, or set to a value that is not a number
-greater than or equal to zero, the shell disables mail checking.
-<P>
-
-<A NAME="IDX236"></A>
-<DT><CODE>OLDPWD</CODE>
-<DD><A NAME="IDX237"></A>
-The previous working directory as set by the <CODE>cd</CODE> builtin.
-<P>
-
-<A NAME="IDX238"></A>
-<DT><CODE>OPTERR</CODE>
-<DD><A NAME="IDX239"></A>
-If set to the value 1, Bash displays error messages
-generated by the <CODE>getopts</CODE> builtin command.
-<P>
-
-<A NAME="IDX240"></A>
-<DT><CODE>OSTYPE</CODE>
-<DD><A NAME="IDX241"></A>
-A string describing the operating system Bash is running on.
-<P>
-
-<A NAME="IDX242"></A>
-<DT><CODE>PIPESTATUS</CODE>
-<DD><A NAME="IDX243"></A>
-An array variable (see section <A HREF="b.html#SEC83">6.7 Arrays</A>)
-containing a list of exit status values from the processes
-in the most-recently-executed foreground pipeline (which may
-contain only a single command).
-<P>
-
-<A NAME="IDX244"></A>
-<DT><CODE>POSIXLY_CORRECT</CODE>
-<DD><A NAME="IDX245"></A>
-If this variable is in the environment when <CODE>bash</CODE> starts, the shell
-enters POSIX mode (see section <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>) before reading the
-startup files, as if the <SAMP>`--posix'</SAMP> invocation option had been supplied.
-If it is set while the shell is running, <CODE>bash</CODE> enables POSIX mode,
-as if the command
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>set -o posix</CODE>
-</pre></td></tr></table>had been executed.  
-<P>
-
-<A NAME="IDX246"></A>
-<DT><CODE>PPID</CODE>
-<DD><A NAME="IDX247"></A>
-The process ID of the shell's parent process.  This variable
-is readonly.
-<P>
-
-<A NAME="IDX248"></A>
-<DT><CODE>PROMPT_COMMAND</CODE>
-<DD><A NAME="IDX249"></A>
-If set, the value is interpreted as a command to execute
-before the printing of each primary prompt (<CODE>$PS1</CODE>).
-<P>
-
-<A NAME="IDX250"></A>
-<DT><CODE>PS3</CODE>
-<DD><A NAME="IDX251"></A>
-The value of this variable is used as the prompt for the
-<CODE>select</CODE> command.  If this variable is not set, the
-<CODE>select</CODE> command prompts with <SAMP>`#? '</SAMP>
-<P>
-
-<A NAME="IDX252"></A>
-<DT><CODE>PS4</CODE>
-<DD><A NAME="IDX253"></A>
-The value is the prompt printed before the command line is echoed
-when the <SAMP>`-x'</SAMP> option is set (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-The first character of <CODE>PS4</CODE> is replicated multiple times, as
-necessary, to indicate multiple levels of indirection.
-The default is <SAMP>`+ '</SAMP>.
-<P>
-
-<A NAME="IDX254"></A>
-<DT><CODE>PWD</CODE>
-<DD><A NAME="IDX255"></A>
-The current working directory as set by the <CODE>cd</CODE> builtin.
-<P>
-
-<A NAME="IDX256"></A>
-<DT><CODE>RANDOM</CODE>
-<DD><A NAME="IDX257"></A>
-Each time this parameter is referenced, a random integer
-between 0 and 32767 is generated.  Assigning a value to this
-variable seeds the random number generator.
-<P>
-
-<A NAME="IDX258"></A>
-<DT><CODE>REPLY</CODE>
-<DD><A NAME="IDX259"></A>
-The default variable for the <CODE>read</CODE> builtin.
-<P>
-
-<A NAME="IDX260"></A>
-<DT><CODE>SECONDS</CODE>
-<DD><A NAME="IDX261"></A>
-This variable expands to the number of seconds since the
-shell was started.  Assignment to this variable resets
-the count to the value assigned, and the expanded value
-becomes the value assigned plus the number of seconds
-since the assignment.
-<P>
-
-<A NAME="IDX262"></A>
-<DT><CODE>SHELL</CODE>
-<DD><A NAME="IDX263"></A>
-The full pathname to the shell is kept in this environment variable.
-If it is not set when the shell starts,
-Bash assigns to it the full pathname of the current user's login shell.
-<P>
-
-<A NAME="IDX264"></A>
-<DT><CODE>SHELLOPTS</CODE>
-<DD><A NAME="IDX265"></A>
-A colon-separated list of enabled shell options.  Each word in
-the list is a valid argument for the <SAMP>`-o'</SAMP> option to the
-<CODE>set</CODE> builtin command (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-The options appearing in <CODE>SHELLOPTS</CODE> are those reported
-as <SAMP>`on'</SAMP> by <SAMP>`set -o'</SAMP>.
-If this variable is in the environment when Bash
-starts up, each shell option in the list will be enabled before
-reading any startup files.  This variable is readonly.
-<P>
-
-<A NAME="IDX266"></A>
-<DT><CODE>SHLVL</CODE>
-<DD><A NAME="IDX267"></A>
-Incremented by one each time a new instance of Bash is started.  This is
-intended to be a count of how deeply your Bash shells are nested.
-<P>
-
-<A NAME="IDX268"></A>
-<DT><CODE>TIMEFORMAT</CODE>
-<DD><A NAME="IDX269"></A>
-The value of this parameter is used as a format string specifying
-how the timing information for pipelines prefixed with the <CODE>time</CODE>
-reserved word should be displayed.
-The <SAMP>`%'</SAMP> character introduces an
-escape sequence that is expanded to a time value or other
-information.
-The escape sequences and their meanings are as
-follows; the braces denote optional portions. 
-<P>
-
-<DL COMPACT>
-
-<DT><CODE>%%</CODE>
-<DD>A literal <SAMP>`%'</SAMP>.
-<P>
-
-<DT><CODE>%[<VAR>p</VAR>][l]R</CODE>
-<DD>The elapsed time in seconds. 
-<P>
-
-<DT><CODE>%[<VAR>p</VAR>][l]U</CODE>
-<DD>The number of CPU seconds spent in user mode. 
-<P>
-
-<DT><CODE>%[<VAR>p</VAR>][l]S</CODE>
-<DD>The number of CPU seconds spent in system mode. 
-<P>
-
-<DT><CODE>%P</CODE>
-<DD>The CPU percentage, computed as (%U + %S) / %R. 
-</DL>
-<P>
-
-The optional <VAR>p</VAR> is a digit specifying the precision, the number of
-fractional digits after a decimal point.
-A value of 0 causes no decimal point or fraction to be output.
-At most three places after the decimal point may be specified; values
-of <VAR>p</VAR> greater than 3 are changed to 3.
-If <VAR>p</VAR> is not specified, the value 3 is used. 
-</P><P>
-
-The optional <CODE>l</CODE> specifies a longer format, including minutes, of
-the form <VAR>MM</VAR>m<VAR>SS</VAR>.<VAR>FF</VAR>s.
-The value of <VAR>p</VAR> determines whether or not the fraction is included. 
-</P><P>
-
-If this variable is not set, Bash acts as if it had the value
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</CODE>
-</pre></td></tr></table>If the value is null, no timing information is displayed.
-A trailing newline is added when the format string is displayed.
-</P><P>
-
-<A NAME="IDX270"></A>
-<DT><CODE>TMOUT</CODE>
-<DD><A NAME="IDX271"></A>
-If set to a value greater than zero, <CODE>TMOUT</CODE> is treated as the
-default timeout for the <CODE>read</CODE> builtin (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-The <CODE>select</CODE> command (see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>) terminates
-if input does not arrive after <CODE>TMOUT</CODE> seconds when input is coming
-from a terminal.
-<P>
-
-In an interactive shell, the value is interpreted as
-the number of seconds to wait for input after issuing the primary
-prompt when the shell is interactive.
-Bash terminates after that number of seconds if input does
-not arrive.
-</P><P>
-
-<A NAME="IDX272"></A>
-<DT><CODE>TMPDIR</CODE>
-<DD><A NAME="IDX273"></A>
-If set, Bash uses its value as the name of a directory in which
-Bash creates temporary files for the shell's use.
-<P>
-
-<A NAME="IDX274"></A>
-<DT><CODE>UID</CODE>
-<DD><A NAME="IDX275"></A>
-The numeric real user id of the current user.  This variable is readonly.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Bash Features"></A>
-<HR SIZE="6">
-<A NAME="SEC66"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC65"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC67"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 6. Bash Features </H1>
-<!--docid::SEC66::-->
-<P>
-
-This section describes features unique to Bash.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC67">6.1 Invoking Bash</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Command line options that you can give
-                               to Bash.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC68">6.2 Bash Startup Files</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">When and how Bash executes scripts.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC76">6.3 Interactive Shells</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What an interactive shell is.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Primitives used in composing expressions for
-                               the <CODE>test</CODE> builtin.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC81">6.5 Shell Arithmetic</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Arithmetic on shell variables.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC82">6.6 Aliases</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Substituting one command for another.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC83">6.7 Arrays</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Array Variables.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC84">6.8 The Directory Stack</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">History of visited directories.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC86">6.9 Controlling the Prompt</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Controlling the PS1 string.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC87">6.10 The Restricted Shell</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A more controlled mode of shell execution.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Making Bash behave more closely to what
-                               the POSIX standard specifies.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Invoking Bash"></A>
-<HR SIZE="6">
-<A NAME="SEC67"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC68"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.1 Invoking Bash </H2>
-<!--docid::SEC67::-->
-<P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <VAR>option</VAR>] [-O <VAR>shopt_option</VAR>] [<VAR>argument</VAR> <small>...</small>]
-bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <VAR>option</VAR>] [-O <VAR>shopt_option</VAR>] -c <VAR>string</VAR> [<VAR>argument</VAR> <small>...</small>]
-bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <VAR>option</VAR>] [-O <VAR>shopt_option</VAR>] [<VAR>argument</VAR> <small>...</small>]
-</pre></td></tr></table></P><P>
-
-In addition to the single-character shell command-line options
-(see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>), there are several multi-character
-options that you can use.  These options must appear on the command
-line before the single-character options to be recognized. 
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>--debugger</CODE>
-<DD>Arrange for the debugger profile to be executed before the shell
-starts.  Turns on extended debugging mode (see <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>
-for a description of the <CODE>extdebug</CODE> option to the <CODE>shopt</CODE>
-builtin) and shell function tracing
-(see <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A> for a description of the <CODE>-o functrace</CODE>
-option).
-<P>
-
-<DT><CODE>--dump-po-strings</CODE>
-<DD>A list of all double-quoted strings preceded by <SAMP>`$'</SAMP>
-is printed on the standard output
-in the GNU <CODE>gettext</CODE> PO (portable object) file format.
-Equivalent to <SAMP>`-D'</SAMP> except for the output format.
-<P>
-
-<DT><CODE>--dump-strings</CODE>
-<DD>Equivalent to <SAMP>`-D'</SAMP>.
-<P>
-
-<DT><CODE>--help</CODE>
-<DD>Display a usage message on standard output and exit successfully.
-<P>
-
-<DT><CODE>--init-file <VAR>filename</VAR></CODE>
-<DD><DT><CODE>--rcfile <VAR>filename</VAR></CODE>
-<DD>Execute commands from <VAR>filename</VAR> (instead of <TT>`~/.bashrc'</TT>)
-in an interactive shell.
-<P>
-
-<DT><CODE>--login</CODE>
-<DD>Equivalent to <SAMP>`-l'</SAMP>.
-<P>
-
-<DT><CODE>--noediting</CODE>
-<DD>Do not use the GNU Readline library (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>)
-to read  command lines when the shell is interactive.
-<P>
-
-<DT><CODE>--noprofile</CODE>
-<DD>Don't load the system-wide startup file <TT>`/etc/profile'</TT>
-or any of the personal initialization files
-<TT>`~/.bash_profile'</TT>, <TT>`~/.bash_login'</TT>, or <TT>`~/.profile'</TT>
-when Bash is invoked as a login shell.
-<P>
-
-<DT><CODE>--norc</CODE>
-<DD>Don't read the <TT>`~/.bashrc'</TT> initialization file in an
-interactive shell.  This is on by default if the shell is
-invoked as <CODE>sh</CODE>.
-<P>
-
-<DT><CODE>--posix</CODE>
-<DD>Change the behavior of Bash where the default operation differs
-from the POSIX standard to match the standard.  This
-is intended to make Bash behave as a strict superset of that
-standard.  See section <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>, for a description of the Bash
-POSIX mode.
-<P>
-
-<DT><CODE>--restricted</CODE>
-<DD>Make the shell a restricted shell (see section <A HREF="b.html#SEC87">6.10 The Restricted Shell</A>).
-<P>
-
-<DT><CODE>--verbose</CODE>
-<DD>Equivalent to <SAMP>`-v'</SAMP>.  Print shell input lines as they're read.
-<P>
-
-<DT><CODE>--version</CODE>
-<DD>Show version information for this instance of
-Bash on the standard output and exit successfully.
-<P>
-
-</DL>
-<P>
-
-There are several single-character options that may be supplied at
-invocation which are not available with the <CODE>set</CODE> builtin.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-c <VAR>string</VAR></CODE>
-<DD>Read and execute commands from <VAR>string</VAR> after processing the
-options, then exit.  Any remaining arguments are assigned to the
-positional parameters, starting with <CODE>$0</CODE>.
-<P>
-
-<DT><CODE>-i</CODE>
-<DD>Force the shell to run interactively.  Interactive shells are
-described in <A HREF="b.html#SEC76">6.3 Interactive Shells</A>.
-<P>
-
-<DT><CODE>-l</CODE>
-<DD>Make this shell act as if it had been directly invoked by login.
-When the shell is interactive, this is equivalent to starting a
-login shell with <SAMP>`exec -l bash'</SAMP>.
-When the shell is not interactive, the login shell startup files will
-be executed.
-<SAMP>`exec bash -l'</SAMP> or <SAMP>`exec bash --login'</SAMP>
-will replace the current shell with a Bash login shell.
-See section <A HREF="b.html#SEC68">6.2 Bash Startup Files</A>, for a description of the special behavior
-of a login shell.
-<P>
-
-<DT><CODE>-r</CODE>
-<DD>Make the shell a restricted shell (see section <A HREF="b.html#SEC87">6.10 The Restricted Shell</A>).
-<P>
-
-<DT><CODE>-s</CODE>
-<DD>If this option is present, or if no arguments remain after option
-processing, then commands are read from the standard input.
-This option allows the positional parameters to be set
-when invoking an interactive shell.
-<P>
-
-<DT><CODE>-D</CODE>
-<DD>A list of all double-quoted strings preceded by <SAMP>`$'</SAMP>
-is printed on the standard output.
-These are the strings that
-are subject to language translation when the current locale
-is not <CODE>C</CODE> or <CODE>POSIX</CODE> (see section <A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A>).
-This implies the <SAMP>`-n'</SAMP> option; no commands will be executed.
-<P>
-
-<DT><CODE>[-+]O [<VAR>shopt_option</VAR>]</CODE>
-<DD><VAR>shopt_option</VAR> is one of the shell options accepted by the
-<CODE>shopt</CODE> builtin (see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>).
-If <VAR>shopt_option</VAR> is present, <SAMP>`-O'</SAMP> sets the value of that option;
-<SAMP>`+O'</SAMP> unsets it.  
-If <VAR>shopt_option</VAR> is not supplied, the names and values of the shell
-options accepted by <CODE>shopt</CODE> are printed on the standard output.
-If the invocation option is <SAMP>`+O'</SAMP>, the output is displayed in a format
-that may be reused as input.
-<P>
-
-<DT><CODE>--</CODE>
-<DD>A <CODE>--</CODE> signals the end of options and disables further option
-processing.
-Any arguments after the <CODE>--</CODE> are treated as filenames and arguments.
-<P>
-
-</DL>
-<P>
-
-<A NAME="IDX276"></A>
-A <EM>login</EM> shell is one whose first character of argument zero is
-<SAMP>`-'</SAMP>, or one invoked with the <SAMP>`--login'</SAMP> option.
-</P><P>
-
-<A NAME="IDX277"></A>
-An <EM>interactive</EM> shell is one started without non-option arguments,
-unless <SAMP>`-s'</SAMP> is specified,
-without specifying the <SAMP>`-c'</SAMP> option, and whose input and output are both
-connected to terminals (as determined by <CODE>isatty(3)</CODE>), or one
-started with the <SAMP>`-i'</SAMP> option.  See section <A HREF="b.html#SEC76">6.3 Interactive Shells</A>, for more
-information.
-</P><P>
-
-If arguments remain after option processing, and neither the
-<SAMP>`-c'</SAMP> nor the <SAMP>`-s'</SAMP>
-option has been supplied, the first argument is assumed to
-be the name of a file containing shell commands (see section <A HREF="b.html#SEC55">3.8 Shell Scripts</A>).
-When Bash is invoked in this fashion, <CODE>$0</CODE>
-is set to the name of the file, and the positional parameters
-are set to the remaining arguments.
-Bash reads and executes commands from this file, then exits.   
-Bash's exit status is the exit status of the last command executed
-in the script.  If no commands are executed, the exit status is 0.
-</P><P>
-
-<A NAME="Bash Startup Files"></A>
-<HR SIZE="6">
-<A NAME="SEC68"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC67"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC76"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC76"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.2 Bash Startup Files </H2>
-<!--docid::SEC68::-->
-<P>
-
-This section describes how Bash executes its startup files.
-If any of the files exist but cannot be read, Bash reports an error.
-Tildes are expanded in file names as described above under
-Tilde Expansion (see section <A HREF="b.html#SEC29">3.5.2 Tilde Expansion</A>).
-</P><P>
-
-Interactive shells are described in <A HREF="b.html#SEC76">6.3 Interactive Shells</A>.
-</P><P>
-
-<A NAME="SEC69"></A>
-<H4> Invoked as an interactive login shell, or with <SAMP>`--login'</SAMP> </H4>
-<!--docid::SEC69::-->
-<P>
-
-When Bash is invoked as an interactive login shell, or as a
-non-interactive shell with the <SAMP>`--login'</SAMP> option, it first reads and
-executes commands from the file <TT>`/etc/profile'</TT>, if that file exists.
-After reading that file, it looks for <TT>`~/.bash_profile'</TT>,
-<TT>`~/.bash_login'</TT>, and <TT>`~/.profile'</TT>, in that order, and reads
-and executes commands from the first one that exists and is readable.
-The <SAMP>`--noprofile'</SAMP> option may be used when the shell is started to
-inhibit this behavior.
-</P><P>
-
-When a login shell exits, Bash reads and executes commands from
-the file <TT>`~/.bash_logout'</TT>, if it exists.
-</P><P>
-
-<A NAME="SEC70"></A>
-<H4> Invoked as an interactive non-login shell </H4>
-<!--docid::SEC70::-->
-<P>
-
-When an interactive shell that is not a login shell is started, Bash
-reads and executes commands from <TT>`~/.bashrc'</TT>, if that file exists.
-This may be inhibited by using the <SAMP>`--norc'</SAMP> option.
-The <SAMP>`--rcfile <VAR>file</VAR>'</SAMP> option will force Bash to read and
-execute commands from <VAR>file</VAR> instead of <TT>`~/.bashrc'</TT>.
-</P><P>
-
-So, typically, your <TT>`~/.bash_profile'</TT> contains the line
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>if [ -f ~/.bashrc ]; then . ~/.bashrc; fi</CODE>
-</pre></td></tr></table>after (or before) any login-specific initializations.
-</P><P>
-
-<A NAME="SEC71"></A>
-<H4> Invoked non-interactively </H4>
-<!--docid::SEC71::-->
-<P>
-
-When Bash is started non-interactively, to run a shell script,
-for example, it looks for the variable <CODE>BASH_ENV</CODE> in the environment,
-expands its value if it appears there, and uses the expanded value as
-the name of a file to read and execute.  Bash behaves as if the
-following command were executed:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi</CODE>
-</pre></td></tr></table>but the value of the <CODE>PATH</CODE> variable is not used to search for the
-file name.
-</P><P>
-
-As noted above, if a non-interactive shell is invoked with the
-<SAMP>`--login'</SAMP> option, Bash attempts to read and execute commands from the
-login shell startup files. 
-</P><P>
-
-<A NAME="SEC72"></A>
-<H4> Invoked with name <CODE>sh</CODE> </H4>
-<!--docid::SEC72::-->
-<P>
-
-If Bash is invoked with the name <CODE>sh</CODE>, it tries to mimic the
-startup behavior of historical versions of <CODE>sh</CODE> as closely as
-possible, while conforming to the POSIX standard as well.
-</P><P>
-
-When invoked as an interactive login shell, or as a non-interactive
-shell with the <SAMP>`--login'</SAMP> option, it first attempts to read
-and execute commands from <TT>`/etc/profile'</TT> and <TT>`~/.profile'</TT>, in
-that order.
-The <SAMP>`--noprofile'</SAMP> option may be used to inhibit this behavior.
-When invoked as an interactive shell with the name <CODE>sh</CODE>, Bash
-looks for the variable <CODE>ENV</CODE>, expands its value if it is defined,
-and uses the expanded value as the name of a file to read and execute.
-Since a shell invoked as <CODE>sh</CODE> does not attempt to read and execute
-commands from any other startup files, the <SAMP>`--rcfile'</SAMP> option has
-no effect.
-A non-interactive shell invoked with the name <CODE>sh</CODE> does not attempt
-to read any other startup files.
-</P><P>
-
-When invoked as <CODE>sh</CODE>, Bash enters POSIX mode after
-the startup files are read.
-</P><P>
-
-<A NAME="SEC73"></A>
-<H4> Invoked in POSIX mode </H4>
-<!--docid::SEC73::-->
-<P>
-
-When Bash is started in POSIX mode, as with the
-<SAMP>`--posix'</SAMP> command line option, it follows the POSIX standard
-for startup files.
-In this mode, interactive shells expand the <CODE>ENV</CODE> variable
-and commands are read and executed from the file whose name is the
-expanded value.
-No other startup files are read.
-</P><P>
-
-<A NAME="SEC74"></A>
-<H4> Invoked by remote shell daemon </H4>
-<!--docid::SEC74::-->
-<P>
-
-Bash attempts to determine when it is being run by the remote shell
-daemon, usually <CODE>rshd</CODE>.  If Bash determines it is being run by
-rshd, it reads and executes commands from <TT>`~/.bashrc'</TT>, if that
-file exists and is readable.
-It will not do this if invoked as <CODE>sh</CODE>.
-The <SAMP>`--norc'</SAMP> option may be used to inhibit this behavior, and the
-<SAMP>`--rcfile'</SAMP> option may be used to force another file to be read, but
-<CODE>rshd</CODE> does not generally invoke the shell with those options or
-allow them to be specified.
-</P><P>
-
-<A NAME="SEC75"></A>
-<H4> Invoked with unequal effective and real UID/GIDs </H4>
-<!--docid::SEC75::-->
-<P>
-
-If Bash is started with the effective user (group) id not equal to the
-real user (group) id, and the <CODE>-p</CODE> option is not supplied, no startup
-files are read, shell functions are not inherited from the environment,
-the <CODE>SHELLOPTS</CODE> variable, if it appears in the environment, is ignored,
-and the effective user id is set to the real user id.
-If the <CODE>-p</CODE> option is supplied at invocation, the startup behavior is
-the same, but the effective user id is not reset.
-</P><P>
-
-<A NAME="Interactive Shells"></A>
-<HR SIZE="6">
-<A NAME="SEC76"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC68"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC77"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.3 Interactive Shells </H2>
-<!--docid::SEC76::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC77">6.3.1 What is an Interactive Shell?</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What determines whether a shell is Interactive.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC78">6.3.2 Is this Shell Interactive?</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to tell if a shell is interactive.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC79">6.3.3 Interactive Shell Behavior</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What changes in a interactive shell?</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="What is an Interactive Shell?"></A>
-<HR SIZE="6">
-<A NAME="SEC77"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC76"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC78"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC76"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 6.3.1 What is an Interactive Shell? </H3>
-<!--docid::SEC77::-->
-<P>
-
-An interactive shell
-is one started without non-option arguments, unless <SAMP>`-s'</SAMP> is
-specified, without specifying the <SAMP>`-c'</SAMP> option, and
-whose input and error output are both
-connected to terminals (as determined by <CODE>isatty(3)</CODE>),
-or one started with the <SAMP>`-i'</SAMP> option.
-</P><P>
-
-An interactive shell generally reads from and writes to a user's
-terminal.
-</P><P>
-
-The <SAMP>`-s'</SAMP> invocation option may be used to set the positional parameters
-when an interactive shell is started.
-</P><P>
-
-<A NAME="Is this Shell Interactive?"></A>
-<HR SIZE="6">
-<A NAME="SEC78"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC77"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC79"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC79"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC76"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 6.3.2 Is this Shell Interactive? </H3>
-<!--docid::SEC78::-->
-<P>
-
-To determine within a startup script whether or not Bash is
-running interactively,
-test the value of the <SAMP>`-'</SAMP> special parameter.
-It contains <CODE>i</CODE> when the shell is interactive.  For example:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>case "$-" in
-*i*)   echo This shell is interactive ;;
-*)     echo This shell is not interactive ;;
-esac
-</pre></td></tr></table></P><P>
-
-Alternatively, startup scripts may examine the variable
-<CODE>PS1</CODE>; it is unset in non-interactive shells, and set in
-interactive shells.  Thus:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>if [ -z "$PS1" ]; then
-        echo This shell is not interactive
-else
-        echo This shell is interactive
-fi
-</pre></td></tr></table></P><P>
-
-<A NAME="Interactive Shell Behavior"></A>
-<HR SIZE="6">
-<A NAME="SEC79"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC78"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC76"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 6.3.3 Interactive Shell Behavior </H3>
-<!--docid::SEC79::-->
-<P>
-
-When the shell is running interactively, it changes its behavior in
-several ways.
-</P><P>
-
-<OL>
-<LI>
-Startup files are read and executed as described in <A HREF="b.html#SEC68">6.2 Bash Startup Files</A>.
-<P>
-
-<LI>
-Job Control (see section <A HREF="b.html#SEC89">7. Job Control</A>) is enabled by default.  When job
-control is in effect, Bash ignores the keyboard-generated job control
-signals <CODE>SIGTTIN</CODE>, <CODE>SIGTTOU</CODE>, and <CODE>SIGTSTP</CODE>.
-<P>
-
-<LI>
-Bash expands and displays <CODE>PS1</CODE> before reading the first line
-of a command, and expands and displays <CODE>PS2</CODE> before reading the
-second and subsequent lines of a multi-line command.
-<P>
-
-<LI>
-Bash executes the value of the <CODE>PROMPT_COMMAND</CODE> variable as a command
-before printing the primary prompt, <CODE>$PS1</CODE>
-(see section <A HREF="b.html#SEC65">5.2 Bash Variables</A>).
-<P>
-
-<LI>
-Readline (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>) is used to read commands from
-the user's terminal.
-<P>
-
-<LI>
-Bash inspects the value of the <CODE>ignoreeof</CODE> option to <CODE>set -o</CODE>
-instead of exiting immediately when it receives an <CODE>EOF</CODE> on its
-standard input when reading a command (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<LI>
-Command history (see section <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>)
-and history expansion (see section <A HREF="b.html#SEC120">9.3 History Expansion</A>)
-are enabled by default.
-Bash will save the command history to the file named by <CODE>$HISTFILE</CODE>
-when an interactive shell exits.
-<P>
-
-<LI>
-Alias expansion (see section <A HREF="b.html#SEC82">6.6 Aliases</A>) is performed by default.
-<P>
-
-<LI>
-In the absence of any traps, Bash ignores <CODE>SIGTERM</CODE>
-(see section <A HREF="b.html#SEC54">3.7.6 Signals</A>).
-<P>
-
-<LI>
-In the absence of any traps, <CODE>SIGINT</CODE> is caught and handled
-((see section <A HREF="b.html#SEC54">3.7.6 Signals</A>).
-<CODE>SIGINT</CODE> will interrupt some shell builtins.
-<P>
-
-<LI>
-An interactive login shell sends a <CODE>SIGHUP</CODE> to all jobs on exit
-if the <CODE>huponexit</CODE> shell option has been enabled (see section <A HREF="b.html#SEC54">3.7.6 Signals</A>).
-<P>
-
-<LI>
-The <SAMP>`-n'</SAMP> invocation option is ignored, and <SAMP>`set -n'</SAMP> has
-no effect (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<LI>
-Bash will check for mail periodically, depending on the values of the
-<CODE>MAIL</CODE>, <CODE>MAILPATH</CODE>, and <CODE>MAILCHECK</CODE> shell variables
-(see section <A HREF="b.html#SEC65">5.2 Bash Variables</A>).
-<P>
-
-<LI>
-Expansion errors due to references to unbound shell variables after
-<SAMP>`set -u'</SAMP> has been enabled will not cause the shell to exit
-(see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<LI>
-The shell will not exit on expansion errors caused by <VAR>var</VAR> being unset
-or null in <CODE>${<VAR>var</VAR>:?<VAR>word</VAR>}</CODE> expansions
-(see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-Redirection errors encountered by shell builtins will not cause the
-shell to exit.
-<P>
-
-<LI>
-When running in POSIX mode, a special builtin returning an error
-status will not cause the shell to exit (see section <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>).
-<P>
-
-<LI>
-A failed <CODE>exec</CODE> will not cause the shell to exit
-(see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-<P>
-
-<LI>
-Parser syntax errors will not cause the shell to exit.
-<P>
-
-<LI>
-Simple spelling correction for directory arguments to the <CODE>cd</CODE>
-builtin is enabled by default (see the description of the <CODE>cdspell</CODE>
-option to the <CODE>shopt</CODE> builtin in <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>).
-<P>
-
-<LI>
-The shell will check the value of the <CODE>TMOUT</CODE> variable and exit
-if a command is not read within the specified number of seconds after
-printing <CODE>$PS1</CODE> (see section <A HREF="b.html#SEC65">5.2 Bash Variables</A>).
-<P>
-
-</OL>
-<P>
-
-<A NAME="Bash Conditional Expressions"></A>
-<HR SIZE="6">
-<A NAME="SEC80"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC79"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC81"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC81"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.4 Bash Conditional Expressions </H2>
-<!--docid::SEC80::-->
-<P>
-
-Conditional expressions are used by the <CODE>[[</CODE> compound command
-and the <CODE>test</CODE> and <CODE>[</CODE> builtin commands.
-</P><P>
-
-Expressions may be unary or binary.
-Unary expressions are often used to examine the status of a file.
-There are string operators and numeric comparison operators as well.
-If the <VAR>file</VAR> argument to one of the primaries is of the form
-<TT>`/dev/fd/<VAR>N</VAR>'</TT>, then file descriptor <VAR>N</VAR> is checked.
-If the <VAR>file</VAR> argument to one of the primaries is one of
-<TT>`/dev/stdin'</TT>, <TT>`/dev/stdout'</TT>, or <TT>`/dev/stderr'</TT>, file
-descriptor 0, 1, or 2, respectively, is checked.
-</P><P>
-
-Unless otherwise specified, primaries that operate on files follow symbolic
-links and operate on the target of the link, rather than the link itself.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-a <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists.
-<P>
-
-<DT><CODE>-b <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a block special file.
-<P>
-
-<DT><CODE>-c <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a character special file.
-<P>
-
-<DT><CODE>-d <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a directory.
-<P>
-
-<DT><CODE>-e <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists.
-<P>
-
-<DT><CODE>-f <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a regular file.
-<P>
-
-<DT><CODE>-g <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and its set-group-id bit is set.
-<P>
-
-<DT><CODE>-h <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a symbolic link.
-<P>
-
-<DT><CODE>-k <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and its "sticky" bit is set.
-<P>
-
-<DT><CODE>-p <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a named pipe (FIFO).
-<P>
-
-<DT><CODE>-r <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is readable.
-<P>
-
-<DT><CODE>-s <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and has a size greater than zero.
-<P>
-
-<DT><CODE>-t <VAR>fd</VAR></CODE>
-<DD>True if file descriptor <VAR>fd</VAR> is open and refers to a terminal.
-<P>
-
-<DT><CODE>-u <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and its set-user-id bit is set.
-<P>
-
-<DT><CODE>-w <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is writable.
-<P>
-
-<DT><CODE>-x <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is executable.
-<P>
-
-<DT><CODE>-O <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is owned by the effective user id.
-<P>
-
-<DT><CODE>-G <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is owned by the effective group id.
-<P>
-
-<DT><CODE>-L <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a symbolic link.
-<P>
-
-<DT><CODE>-S <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and is a socket.
-<P>
-
-<DT><CODE>-N <VAR>file</VAR></CODE>
-<DD>True if <VAR>file</VAR> exists and has been modified since it was last read.
-<P>
-
-<DT><CODE><VAR>file1</VAR> -nt <VAR>file2</VAR></CODE>
-<DD>True if <VAR>file1</VAR> is newer (according to modification date)
-than <VAR>file2</VAR>, or if <VAR>file1</VAR> exists and <VAR>file2</VAR> does not.
-<P>
-
-<DT><CODE><VAR>file1</VAR> -ot <VAR>file2</VAR></CODE>
-<DD>True if <VAR>file1</VAR> is older than <VAR>file2</VAR>,
-or if <VAR>file2</VAR> exists and <VAR>file1</VAR> does not.
-<P>
-
-<DT><CODE><VAR>file1</VAR> -ef <VAR>file2</VAR></CODE>
-<DD>True if <VAR>file1</VAR> and <VAR>file2</VAR> refer to the same device and
-inode numbers.
-<P>
-
-<DT><CODE>-o <VAR>optname</VAR></CODE>
-<DD>True if shell option <VAR>optname</VAR> is enabled.
-The list of options appears in the description of the <SAMP>`-o'</SAMP>
-option to the <CODE>set</CODE> builtin (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<DT><CODE>-z <VAR>string</VAR></CODE>
-<DD>True if the length of <VAR>string</VAR> is zero.
-<P>
-
-<DT><CODE>-n <VAR>string</VAR></CODE>
-<DD><DT><CODE><VAR>string</VAR></CODE>
-<DD>True if the length of <VAR>string</VAR> is non-zero.
-<P>
-
-<DT><CODE><VAR>string1</VAR> == <VAR>string2</VAR></CODE>
-<DD>True if the strings are equal.
-<SAMP>`='</SAMP> may be used in place of <SAMP>`=='</SAMP> for strict POSIX compliance.
-<P>
-
-<DT><CODE><VAR>string1</VAR> != <VAR>string2</VAR></CODE>
-<DD>True if the strings are not equal.
-<P>
-
-<DT><CODE><VAR>string1</VAR> &#60; <VAR>string2</VAR></CODE>
-<DD>True if <VAR>string1</VAR> sorts before <VAR>string2</VAR> lexicographically
-in the current locale.
-<P>
-
-<DT><CODE><VAR>string1</VAR> &#62; <VAR>string2</VAR></CODE>
-<DD>True if <VAR>string1</VAR> sorts after <VAR>string2</VAR> lexicographically
-in the current locale.
-<P>
-
-<DT><CODE><VAR>arg1</VAR> OP <VAR>arg2</VAR></CODE>
-<DD><CODE>OP</CODE> is one of 
-<SAMP>`-eq'</SAMP>, <SAMP>`-ne'</SAMP>, <SAMP>`-lt'</SAMP>, <SAMP>`-le'</SAMP>, <SAMP>`-gt'</SAMP>, or <SAMP>`-ge'</SAMP>.
-These arithmetic binary operators return true if <VAR>arg1</VAR>
-is equal to, not equal to, less than, less than or equal to,
-greater than, or greater than or equal to <VAR>arg2</VAR>,
-respectively.  <VAR>Arg1</VAR> and <VAR>arg2</VAR>
-may be positive or negative integers.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Shell Arithmetic"></A>
-<HR SIZE="6">
-<A NAME="SEC81"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC80"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC82"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC82"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.5 Shell Arithmetic </H2>
-<!--docid::SEC81::-->
-<P>
-
-The shell allows arithmetic expressions to be evaluated, as one of
-the shell expansions or by the <CODE>let</CODE> and the <SAMP>`-i'</SAMP> option
-to the <CODE>declare</CODE> builtins.
-</P><P>
-
-Evaluation is done in fixed-width integers with no check for overflow,
-though division by 0 is trapped and flagged as an error.
-The operators and their precedence, associativity, and values
-are the same as in the C language.
-The following list of operators is grouped into levels of
-equal-precedence operators.
-The levels are listed in order of decreasing precedence. 
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE><VAR>id</VAR>++ <VAR>id</VAR>--</CODE>
-<DD>variable post-increment and post-decrement 
-<P>
-
-<DT><CODE>++<VAR>id</VAR> --<VAR>id</VAR></CODE>
-<DD>variable pre-increment and pre-decrement
-<P>
-
-<DT><CODE>- +</CODE>
-<DD>unary minus and plus
-<P>
-
-<DT><CODE>! ~</CODE>
-<DD>logical and bitwise negation
-<P>
-
-<DT><CODE>**</CODE>
-<DD>exponentiation
-<P>
-
-<DT><CODE>* / %</CODE>
-<DD>multiplication, division, remainder
-<P>
-
-<DT><CODE>+ -</CODE>
-<DD>addition, subtraction
-<P>
-
-<DT><CODE>&#60;&#60; &#62;&#62;</CODE>
-<DD>left and right bitwise shifts
-<P>
-
-<DT><CODE>&#60;= &#62;= &#60; &#62;</CODE>
-<DD>comparison
-<P>
-
-<DT><CODE>== !=</CODE>
-<DD>equality and inequality
-<P>
-
-<DT><CODE>&#38;</CODE>
-<DD>bitwise AND
-<P>
-
-<DT><CODE>^</CODE>
-<DD>bitwise exclusive OR
-<P>
-
-<DT><CODE>|</CODE>
-<DD>bitwise OR
-<P>
-
-<DT><CODE>&#38;&#38;</CODE>
-<DD>logical AND
-<P>
-
-<DT><CODE>||</CODE>
-<DD>logical OR
-<P>
-
-<DT><CODE>expr ? expr : expr</CODE>
-<DD>conditional operator
-<P>
-
-<DT><CODE>= *= /= %= += -= &#60;&#60;= &#62;&#62;= &#38;= ^= |=</CODE>
-<DD>assignment
-<P>
-
-<DT><CODE>expr1 , expr2</CODE>
-<DD>comma
-</DL>
-<P>
-
-Shell variables are allowed as operands; parameter expansion is
-performed before the expression is evaluated. 
-Within an expression, shell variables may also be referenced by name
-without using the parameter expansion syntax.
-A shell variable that is null or unset evaluates to 0 when referenced
-by name without using the parameter expansion syntax.
-The value of a variable is evaluated as an arithmetic expression
-when it is referenced, or when a variable which has been given the  
-<VAR>integer</VAR> attribute using <SAMP>`declare -i'</SAMP> is assigned a value.
-A null value evaluates to 0.
-A shell variable need not have its integer attribute turned on
-to be used in an expression.
-</P><P>
-
-Constants with a leading 0 are interpreted as octal numbers.
-A leading <SAMP>`0x'</SAMP> or <SAMP>`0X'</SAMP> denotes hexadecimal.  Otherwise,
-numbers take the form [<VAR>base</VAR><CODE>#</CODE>]<VAR>n</VAR>, where <VAR>base</VAR>
-is a decimal number between 2 and 64 representing the arithmetic
-base, and <VAR>n</VAR> is a number in that base.  If <VAR>base</VAR><CODE>#</CODE> is
-omitted, then base 10 is used.
-The digits greater than 9 are represented by the lowercase letters,
-the uppercase letters, <SAMP>`@'</SAMP>, and <SAMP>`_'</SAMP>, in that order.
-If <VAR>base</VAR> is less than or equal to 36, lowercase and uppercase
-letters may be used interchangeably to represent numbers between 10
-and 35.
-</P><P>
-
-Operators are evaluated in order of precedence.  Sub-expressions in
-parentheses are evaluated first and may override the precedence
-rules above.
-</P><P>
-
-<A NAME="Aliases"></A>
-<HR SIZE="6">
-<A NAME="SEC82"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC81"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC83"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC83"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.6 Aliases </H2>
-<!--docid::SEC82::-->
-<P>
-
-<VAR>Aliases</VAR> allow a string to be substituted for a word when it is used
-as the first word of a simple command.
-The shell maintains a list of aliases that may be set and unset with
-the <CODE>alias</CODE> and <CODE>unalias</CODE> builtin commands.
-</P><P>
-
-The first word of each simple command, if unquoted, is checked to see
-if it has an alias.
-If so, that word is replaced by the text of the alias.
-The characters <SAMP>`/'</SAMP>, <SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, <SAMP>`='</SAMP> and any of the
-shell metacharacters or quoting characters listed above may not appear
-in an alias name.
-The replacement text may contain any valid
-shell input, including shell metacharacters.
-The first word of the replacement text is tested for
-aliases, but a word that is identical to an alias being expanded
-is not expanded a second time.
-This means that one may alias <CODE>ls</CODE> to <CODE>"ls -F"</CODE>,
-for instance, and Bash does not try to recursively expand the
-replacement text. If the last character of the alias value is a
-space or tab character, then the next command word following the
-alias is also checked for alias expansion.
-</P><P>
-
-Aliases are created and listed with the <CODE>alias</CODE>
-command, and removed with the <CODE>unalias</CODE> command.
-</P><P>
-
-There is no mechanism for using arguments in the replacement text,
-as in <CODE>csh</CODE>.
-If arguments are needed, a shell function should be used
-(see section <A HREF="b.html#SEC23">3.3 Shell Functions</A>).
-</P><P>
-
-Aliases are not expanded when the shell is not interactive,
-unless the <CODE>expand_aliases</CODE> shell option is set using
-<CODE>shopt</CODE> (see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>).
-</P><P>
-
-The rules concerning the definition and use of aliases are
-somewhat confusing.  Bash
-always reads at least one complete line
-of input before executing any
-of the commands on that line.  Aliases are expanded when a
-command is read, not when it is executed.  Therefore, an
-alias definition appearing on the same line as another
-command does not take effect until the next line of input is read.
-The commands following the alias definition
-on that line are not affected by the new alias.
-This behavior is also an issue when functions are executed.
-Aliases are expanded when a function definition is read,
-not when the function is executed, because a function definition
-is itself a compound command.  As a consequence, aliases
-defined in a function are not available until after that
-function is executed.  To be safe, always put
-alias definitions on a separate line, and do not use <CODE>alias</CODE>
-in compound commands.
-</P><P>
-
-For almost every purpose, shell functions are preferred over aliases.
-</P><P>
-
-<A NAME="Arrays"></A>
-<HR SIZE="6">
-<A NAME="SEC83"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC82"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC84"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC84"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.7 Arrays </H2>
-<!--docid::SEC83::-->
-<P>
-
-Bash provides one-dimensional array variables.  Any variable may be used as
-an array; the <CODE>declare</CODE> builtin will explicitly declare an array.
-There is no maximum
-limit on the size of an array, nor any requirement that members
-be indexed or assigned contiguously.  Arrays are zero-based.
-</P><P>
-
-An array is created automatically if any variable is assigned to using
-the syntax
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>name[<VAR>subscript</VAR>]=<VAR>value</VAR>
-</pre></td></tr></table></P><P>
-
-The <VAR>subscript</VAR>
-is treated as an arithmetic expression that must evaluate to a number
-greater than or equal to zero.  To explicitly declare an array, use
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>declare -a <VAR>name</VAR>
-</pre></td></tr></table>The syntax
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>declare -a <VAR>name</VAR>[<VAR>subscript</VAR>]
-</pre></td></tr></table>is also accepted; the <VAR>subscript</VAR> is ignored.  Attributes may be
-specified for an array variable using the <CODE>declare</CODE> and
-<CODE>readonly</CODE> builtins.  Each attribute applies to all members of
-an array.
-</P><P>
-
-Arrays are assigned to using compound assignments of the form
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>name=(value<VAR>1</VAR> <small>...</small> value<VAR>n</VAR>)
-</pre></td></tr></table>where each
-<VAR>value</VAR> is of the form <CODE>[[<VAR>subscript</VAR>]=]</CODE><VAR>string</VAR>.  If
-the optional subscript is supplied, that index is assigned to;
-otherwise the index of the element assigned is the last index assigned
-to by the statement plus one.  Indexing starts at zero.
-This syntax is also accepted by the <CODE>declare</CODE>
-builtin.  Individual array elements may be assigned to using the
-<CODE>name[</CODE><VAR>subscript</VAR><CODE>]=</CODE><VAR>value</VAR> syntax introduced above.
-</P><P>
-
-Any element of an array may be referenced using
-<CODE>${name[</CODE><VAR>subscript</VAR><CODE>]}</CODE>.
-The braces are required to avoid
-conflicts with the shell's filename expansion operators.  If the
-<VAR>subscript</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>, the word expands to all members
-of the array <VAR>name</VAR>.  These subscripts differ only when the word
-appears within double quotes.
-If the word is double-quoted,
-<CODE>${name[*]}</CODE> expands to a single word with
-the value of each array member separated by the first character of the
-<CODE>IFS</CODE> variable, and <CODE>${name[@]}</CODE> expands each element of
-<VAR>name</VAR> to a separate word.  When there are no array members,
-<CODE>${name[@]}</CODE> expands to nothing.
-If the double-quoted expansion occurs within a word, the expansion of
-the first parameter is joined with the beginning part of the original
-word, and the expansion of the last parameter is joined with the last
-part of the original word.
-This is analogous to the
-expansion of the special parameters <SAMP>`@'</SAMP> and <SAMP>`*'</SAMP>. 
-<CODE>${#name[</CODE><VAR>subscript</VAR><CODE>]}</CODE> expands to the length of
-<CODE>${name[</CODE><VAR>subscript</VAR><CODE>]}</CODE>.
-If <VAR>subscript</VAR> is <SAMP>`@'</SAMP> or
-<SAMP>`*'</SAMP>, the expansion is the number of elements in the array. 
-Referencing an array variable without a subscript is equivalent to
-referencing element zero. 
-</P><P>
-
-The <CODE>unset</CODE> builtin is used to destroy arrays.
-<CODE>unset</CODE> <VAR>name</VAR>[<VAR>subscript</VAR>]
-destroys the array element at index <VAR>subscript</VAR>.
-Care must be taken to avoid unwanted side effects caused by filename
-generation.
-<CODE>unset</CODE> <VAR>name</VAR>, where <VAR>name</VAR> is an array, removes the
-entire array. A subscript of <SAMP>`*'</SAMP> or <SAMP>`@'</SAMP> also removes the
-entire array.
-</P><P>
-
-The <CODE>declare</CODE>, <CODE>local</CODE>, and <CODE>readonly</CODE>
-builtins each accept a <SAMP>`-a'</SAMP>
-option to specify an array.  The <CODE>read</CODE>
-builtin accepts a <SAMP>`-a'</SAMP>
-option to assign a list of words read from the standard input
-to an array, and can read values from the standard input into
-individual array elements.  The <CODE>set</CODE> and <CODE>declare</CODE>
-builtins display array values in a way that allows them to be
-reused as input.
-</P><P>
-
-<A NAME="The Directory Stack"></A>
-<HR SIZE="6">
-<A NAME="SEC84"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC83"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC85"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC86"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC86"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.8 The Directory Stack </H2>
-<!--docid::SEC84::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC85">6.8.1 Directory Stack Builtins</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Bash builtin commands to manipulate
-                                       the directory stack.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-The directory stack is a list of recently-visited directories.  The
-<CODE>pushd</CODE> builtin adds directories to the stack as it changes
-the current directory, and the <CODE>popd</CODE> builtin removes specified
-directories from the stack and changes the current directory to
-the directory removed.  The <CODE>dirs</CODE> builtin displays the contents
-of the directory stack.
-</P><P>
-
-The contents of the directory stack are also visible
-as the value of the <CODE>DIRSTACK</CODE> shell variable.
-</P><P>
-
-<A NAME="Directory Stack Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC85"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC84"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC86"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC86"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC84"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC86"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 6.8.1 Directory Stack Builtins </H3>
-<!--docid::SEC85::-->
-<P>
-
-<DL COMPACT>
-
-<DT><CODE>dirs</CODE>
-<DD><A NAME="IDX278"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>dirs [+<VAR>N</VAR> | -<VAR>N</VAR>] [-clpv]
-</pre></td></tr></table>Display the list of currently remembered directories.  Directories
-are added to the list with the <CODE>pushd</CODE> command; the
-<CODE>popd</CODE> command removes directories from the list.
-<DL COMPACT>
-<DT><CODE>+<VAR>N</VAR></CODE>
-<DD>Displays the <VAR>N</VAR>th directory (counting from the left of the
-list printed by <CODE>dirs</CODE> when invoked without options), starting
-with zero.
-<DT><CODE>-<VAR>N</VAR></CODE>
-<DD>Displays the <VAR>N</VAR>th directory (counting from the right of the
-list printed by <CODE>dirs</CODE> when invoked without options), starting
-with zero.
-<DT><CODE>-c</CODE>
-<DD>Clears the directory stack by deleting all of the elements.
-<DT><CODE>-l</CODE>
-<DD>Produces a longer listing; the default listing format uses a 
-tilde to denote the home directory.
-<DT><CODE>-p</CODE>
-<DD>Causes <CODE>dirs</CODE> to print the directory stack with one entry per
-line.
-<DT><CODE>-v</CODE>
-<DD>Causes <CODE>dirs</CODE> to print the directory stack with one entry per
-line, prefixing each entry with its index in the stack.
-</DL>
-<P>
-
-<DT><CODE>popd</CODE>
-<DD><A NAME="IDX279"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>popd [+<VAR>N</VAR> | -<VAR>N</VAR>] [-n]
-</pre></td></tr></table><P>
-
-Remove the top entry from the directory stack, and <CODE>cd</CODE>
-to the new top directory.
-When no arguments are given, <CODE>popd</CODE>
-removes the top directory from the stack and
-performs a <CODE>cd</CODE> to the new top directory.  The
-elements are numbered from 0 starting at the first directory listed with
-<CODE>dirs</CODE>; i.e., <CODE>popd</CODE> is equivalent to <CODE>popd +0</CODE>.
-<DL COMPACT>
-<DT><CODE>+<VAR>N</VAR></CODE>
-<DD>Removes the <VAR>N</VAR>th directory (counting from the left of the
-list printed by <CODE>dirs</CODE>), starting with zero.
-<DT><CODE>-<VAR>N</VAR></CODE>
-<DD>Removes the <VAR>N</VAR>th directory (counting from the right of the
-list printed by <CODE>dirs</CODE>), starting with zero.
-<DT><CODE>-n</CODE>
-<DD>Suppresses the normal change of directory when removing directories
-from the stack, so that only the stack is manipulated.
-</DL>
-<P>
-
-<A NAME="IDX280"></A>
-<DT><CODE>pushd</CODE>
-<DD><TABLE><tr><td>&nbsp;</td><td class=example><pre>pushd [-n] [<VAR>+N</VAR> | <VAR>-N</VAR> | <VAR>dir</VAR> ]
-</pre></td></tr></table><P>
-
-Save the current directory on the top of the directory stack
-and then <CODE>cd</CODE> to <VAR>dir</VAR>.
-With no arguments, <CODE>pushd</CODE> exchanges the top two directories.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-n</CODE>
-<DD>Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
-<DT><CODE>+<VAR>N</VAR></CODE>
-<DD>Brings the <VAR>N</VAR>th directory (counting from the left of the
-list printed by <CODE>dirs</CODE>, starting with zero) to the top of
-the list by rotating the stack.
-<DT><CODE>-<VAR>N</VAR></CODE>
-<DD>Brings the <VAR>N</VAR>th directory (counting from the right of the
-list printed by <CODE>dirs</CODE>, starting with zero) to the top of
-the list by rotating the stack.
-<DT><CODE><VAR>dir</VAR></CODE>
-<DD>Makes the current working directory be the top of the stack, and then
-executes the equivalent of `<CODE>cd</CODE> <VAR>dir</VAR>'.
-<CODE>cd</CODE>s to <VAR>dir</VAR>.
-</DL>
-<P>
-
-</DL>
-<P>
-
-<A NAME="Printing a Prompt"></A>
-<HR SIZE="6">
-<A NAME="SEC86"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC85"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC87"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.9 Controlling the Prompt </H2>
-<!--docid::SEC86::-->
-<P>
-
-The value of the variable <CODE>PROMPT_COMMAND</CODE> is examined just before
-Bash prints each primary prompt.  If <CODE>PROMPT_COMMAND</CODE> is set and
-has a non-null value, then the
-value is executed just as if it had been typed on the command line.
-</P><P>
-
-In addition, the following table describes the special characters which
-can appear in the prompt variables:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>\a</CODE>
-<DD>A bell character.
-<DT><CODE>\d</CODE>
-<DD>The date, in "Weekday Month Date" format (e.g., "Tue May 26").
-<DT><CODE>\D{<VAR>format</VAR>}</CODE>
-<DD>The <VAR>format</VAR> is passed to <CODE>strftime</CODE>(3) and the result is inserted
-into the prompt string; an empty <VAR>format</VAR> results in a locale-specific
-time representation.  The braces are required.
-<DT><CODE>\e</CODE>
-<DD>An escape character.
-<DT><CODE>\h</CODE>
-<DD>The hostname, up to the first `.'.
-<DT><CODE>\H</CODE>
-<DD>The hostname.
-<DT><CODE>\j</CODE>
-<DD>The number of jobs currently managed by the shell.
-<DT><CODE>\l</CODE>
-<DD>The basename of the shell's terminal device name.
-<DT><CODE>\n</CODE>
-<DD>A newline.
-<DT><CODE>\r</CODE>
-<DD>A carriage return.
-<DT><CODE>\s</CODE>
-<DD>The name of the shell, the basename of <CODE>$0</CODE> (the portion
-following the final slash).
-<DT><CODE>\t</CODE>
-<DD>The time, in 24-hour HH:MM:SS format.
-<DT><CODE>\T</CODE>
-<DD>The time, in 12-hour HH:MM:SS format.
-<DT><CODE>\@</CODE>
-<DD>The time, in 12-hour am/pm format.
-<DT><CODE>\A</CODE>
-<DD>The time, in 24-hour HH:MM format.
-<DT><CODE>\u</CODE>
-<DD>The username of the current user.
-<DT><CODE>\v</CODE>
-<DD>The version of Bash (e.g., 2.00)          
-<DT><CODE>\V</CODE>
-<DD>The release of Bash, version + patchlevel (e.g., 2.00.0)
-<DT><CODE>\w</CODE>
-<DD>The current working directory, with <CODE>$HOME</CODE> abbreviated with a tilde.
-<DT><CODE>\W</CODE>
-<DD>The basename of <CODE>$PWD</CODE>, with <CODE>$HOME</CODE> abbreviated with a tilde.
-<DT><CODE>\!</CODE>
-<DD>The history number of this command.
-<DT><CODE>\#</CODE>
-<DD>The command number of this command.
-<DT><CODE>\$</CODE>
-<DD>If the effective uid is 0, <CODE>#</CODE>, otherwise <CODE>$</CODE>.
-<DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>The character whose ASCII code is the octal value <VAR>nnn</VAR>.
-<DT><CODE>\\</CODE>
-<DD>A backslash.
-<DT><CODE>\[</CODE>
-<DD>Begin a sequence of non-printing characters.  This could be used to
-embed a terminal control sequence into the prompt.
-<DT><CODE>\]</CODE>
-<DD>End a sequence of non-printing characters.
-</DL>
-<P>
-
-The command number and the history number are usually different:
-the history number of a command is its position in the history
-list, which may include commands restored from the history file
-(see section <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>), while the command number is
-the position in the sequence of commands executed during the current
-shell session.
-</P><P>
-
-After the string is decoded, it is expanded via
-parameter expansion, command substitution, arithmetic
-expansion, and quote removal, subject to the value of the
-<CODE>promptvars</CODE> shell option (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-</P><P>
-
-<A NAME="The Restricted Shell"></A>
-<HR SIZE="6">
-<A NAME="SEC87"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC86"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC88"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC68"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.10 The Restricted Shell </H2>
-<!--docid::SEC87::-->
-<P>
-
-If Bash is started with the name <CODE>rbash</CODE>, or the
-<SAMP>`--restricted'</SAMP>
-or
-<SAMP>`-r'</SAMP>
-option is supplied at invocation, the shell becomes restricted.
-A restricted shell is used to
-set up an environment more controlled than the standard shell.
-A restricted shell behaves identically to <CODE>bash</CODE>
-with the exception that the following are disallowed or not performed:
-</P><P>
-
-<UL>
-<LI>
-Changing directories with the <CODE>cd</CODE> builtin.
-<LI>
-Setting or unsetting the values of the <CODE>SHELL</CODE>, <CODE>PATH</CODE>,
-<CODE>ENV</CODE>, or <CODE>BASH_ENV</CODE> variables.
-<LI>
-Specifying command names containing slashes.
-<LI>
-Specifying a filename containing a slash as an argument to the <CODE>.</CODE>
-builtin command.
-<LI>
-Specifying a filename containing a slash as an argument to the <SAMP>`-p'</SAMP>
-option to the <CODE>hash</CODE> builtin command.
-<LI>
-Importing function definitions from the shell environment at startup.
-<LI>
-Parsing the value of <CODE>SHELLOPTS</CODE> from the shell environment at startup.
-<LI>
-Redirecting output using the <SAMP>`&#62;'</SAMP>, <SAMP>`&#62;|'</SAMP>, <SAMP>`&#60;&#62;'</SAMP>, <SAMP>`&#62;&#38;'</SAMP>,
-<SAMP>`&#38;&#62;'</SAMP>, and <SAMP>`&#62;&#62;'</SAMP> redirection operators.
-<LI>
-Using the <CODE>exec</CODE> builtin to replace the shell with another command.
-<LI>
-Adding or deleting builtin commands with the
-<SAMP>`-f'</SAMP> and <SAMP>`-d'</SAMP> options to the <CODE>enable</CODE> builtin.
-<LI>
-Using the <CODE>enable</CODE> builtin command to enable disabled shell builtins.
-<LI>
-Specifying the <SAMP>`-p'</SAMP> option to the <CODE>command</CODE> builtin.
-<LI>
-Turning off restricted mode with <SAMP>`set +r'</SAMP> or <SAMP>`set +o restricted'</SAMP>.
-</UL>
-<P>
-
-These restrictions are enforced after any startup files are read.
-</P><P>
-
-When a command that is found to be a shell script is executed
-(see section <A HREF="b.html#SEC55">3.8 Shell Scripts</A>), <CODE>rbash</CODE> turns off any restrictions in
-the shell spawned to execute the script.
-</P><P>
-
-<A NAME="Bash POSIX Mode"></A>
-<HR SIZE="6">
-<A NAME="SEC88"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC87"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC68"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC66"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 6.11 Bash POSIX Mode </H2>
-<!--docid::SEC88::-->
-<P>
-
-Starting Bash with the <SAMP>`--posix'</SAMP> command-line option or executing
-<SAMP>`set -o posix'</SAMP> while Bash is running will cause Bash to conform more
-closely to the POSIX standard by changing the behavior to
-match that specified by POSIX in areas where the Bash default differs.
-</P><P>
-
-When invoked as <CODE>sh</CODE>, Bash enters POSIX mode after reading the
-startup files.
-</P><P>
-
-The following list is what's changed when `POSIX mode' is in effect:
-</P><P>
-
-<OL>
-<LI>
-When a command in the hash table no longer exists, Bash will re-search
-<CODE>$PATH</CODE> to find the new location.  This is also available with
-<SAMP>`shopt -s checkhash'</SAMP>.
-<P>
-
-<LI>
-The message printed by the job control code and builtins when a job
-exits with a non-zero status is `Done(status)'.
-<P>
-
-<LI>
-The message printed by the job control code and builtins when a job
-is stopped is `Stopped(<VAR>signame</VAR>)', where <VAR>signame</VAR> is, for
-example, <CODE>SIGTSTP</CODE>.
-<P>
-
-<LI>
-The <CODE>bg</CODE> builtin uses the required format to describe each job placed
-in the background, which does not include an indication of whether the job
-is the current or previous job.
-<P>
-
-<LI>
-Reserved words appearing in a context where reserved words are recognized
-do not undergo alias expansion.
-<P>
-
-<LI>
-The POSIX <CODE>PS1</CODE> and <CODE>PS2</CODE> expansions of <SAMP>`!'</SAMP> to
-the history number and <SAMP>`!!'</SAMP> to <SAMP>`!'</SAMP> are enabled,
-and parameter expansion is performed on the values of <CODE>PS1</CODE> and
-<CODE>PS2</CODE> regardless of the setting of the <CODE>promptvars</CODE> option.
-<P>
-
-<LI>
-The POSIX startup files are executed (<CODE>$ENV</CODE>) rather than
-the normal Bash files.
-<P>
-
-<LI>
-Tilde expansion is only performed on assignments preceding a command
-name, rather than on all assignment statements on the line.
-<P>
-
-<LI>
-The default history file is <TT>`~/.sh_history'</TT> (this is the
-default value of <CODE>$HISTFILE</CODE>).
-<P>
-
-<LI>
-The output of <SAMP>`kill -l'</SAMP> prints all the signal names on a single line,
-separated by spaces, without the <SAMP>`SIG'</SAMP> prefix.
-<P>
-
-<LI>
-The <CODE>kill</CODE> builtin does not accept signal names with a <SAMP>`SIG'</SAMP>
-prefix.
-<P>
-
-<LI>
-Non-interactive shells exit if <VAR>filename</VAR> in <CODE>.</CODE> <VAR>filename</VAR>
-is not found.
-<P>
-
-<LI>
-Non-interactive shells exit if a syntax error in an arithmetic expansion
-results in an invalid expression.
-<P>
-
-<LI>
-Redirection operators do not perform filename expansion on the word
-in the redirection unless the shell is interactive.
-<P>
-
-<LI>
-Redirection operators do not perform word splitting on the word in the
-redirection.
-<P>
-
-<LI>
-Function names must be valid shell <CODE>name</CODE>s.  That is, they may not
-contain characters other than letters, digits, and underscores, and
-may not start with a digit.  Declaring a function with an invalid name
-causes a fatal syntax error in non-interactive shells.
-<P>
-
-<LI>
-POSIX special builtins are found before shell functions
-during command lookup.
-<P>
-
-<LI>
-If a POSIX special builtin returns an error status, a
-non-interactive shell exits.  The fatal errors are those listed in
-the POSIX standard, and include things like passing incorrect options,
-redirection errors, variable assignment errors for assignments preceding
-the command name, and so on.
-<P>
-
-<LI>
-If <CODE>CDPATH</CODE> is set, the <CODE>cd</CODE> builtin will not implicitly
-append the current directory to it.  This means that <CODE>cd</CODE> will
-fail if no valid directory name can be constructed from
-any of the entries in <CODE>$CDPATH</CODE>, even if the a directory with
-the same name as the name given as an argument to <CODE>cd</CODE> exists
-in the current directory.
-<P>
-
-<LI>
-A non-interactive shell exits with an error status if a variable
-assignment error occurs when no command name follows the assignment
-statements.
-A variable assignment error occurs, for example, when trying to assign
-a value to a readonly variable.
-<P>
-
-<LI>
-A non-interactive shell exits with an error status if the iteration
-variable in a <CODE>for</CODE> statement or the selection variable in a
-<CODE>select</CODE> statement is a readonly variable.
-<P>
-
-<LI>
-Process substitution is not available.
-<P>
-
-<LI>
-Assignment statements preceding POSIX special builtins
-persist in the shell environment after the builtin completes.
-<P>
-
-<LI>
-Assignment statements preceding shell function calls persist in the
-shell environment after the function returns, as if a POSIX
-special builtin command had been executed.
-<P>
-
-<LI>
-The <CODE>export</CODE> and <CODE>readonly</CODE> builtin commands display their
-output in the format required by POSIX.
-<P>
-
-<LI>
-The <CODE>trap</CODE> builtin displays signal names without the leading
-<CODE>SIG</CODE>.
-<P>
-
-<LI>
-The <CODE>trap</CODE> builtin doesn't check the first argument for a possible
-signal specification and revert the signal handling to the original
-disposition if it is, unless that argument consists solely of digits and
-is a valid signal number.  If users want to reset the handler for a given
-signal to the original disposition, they should use <SAMP>`-'</SAMP> as the
-first argument.
-<P>
-
-<LI>
-The <CODE>.</CODE> and <CODE>source</CODE> builtins do not search the current directory
-for the filename argument if it is not found by searching <CODE>PATH</CODE>.
-<P>
-
-<LI>
-Subshells spawned to execute command substitutions inherit the value of
-the <SAMP>`-e'</SAMP> option from the parent shell.  When not in POSIX mode,
-Bash clears the <SAMP>`-e'</SAMP> option in such subshells.
-<P>
-
-<LI>
-Alias expansion is always enabled, even in non-interactive shells.
-<P>
-
-<LI>
-When the <CODE>alias</CODE> builtin displays alias definitions, it does not
-display them with a leading <SAMP>`alias '</SAMP> unless the <SAMP>`-p'</SAMP> option
-is supplied.
-<P>
-
-<LI>
-When the <CODE>set</CODE> builtin is invoked without options, it does not display
-shell function names and definitions.
-<P>
-
-<LI>
-When the <CODE>set</CODE> builtin is invoked without options, it displays
-variable values without quotes, unless they contain shell metacharacters,
-even if the result contains nonprinting characters.
-<P>
-
-<LI>
-When the <CODE>cd</CODE> builtin is invoked in <VAR>logical</VAR> mode, and the pathname
-constructed from <CODE>$PWD</CODE> and the directory name supplied as an argument
-does not refer to an existing directory, <CODE>cd</CODE> will fail instead of
-falling back to <VAR>physical</VAR> mode.
-<P>
-
-<LI>
-When the <CODE>pwd</CODE> builtin is supplied the <SAMP>`-P'</SAMP> option, it resets
-<CODE>$PWD</CODE> to a pathname containing no symlinks.
-<P>
-
-<LI>
-The <CODE>pwd</CODE> builtin verifies that the value it prints is the same as the
-current directory, even if it is not asked to check the file system with the
-<SAMP>`-P'</SAMP> option.
-<P>
-
-<LI>
-When listing the history, the <CODE>fc</CODE> builtin does not include an
-indication of whether or not a history entry has been modified.
-<P>
-
-<LI>
-The default editor used by <CODE>fc</CODE> is <CODE>ed</CODE>.
-<P>
-
-<LI>
-The <CODE>type</CODE> and <CODE>command</CODE> builtins will not report a non-executable
-file as having been found, though the shell will attempt to execute such a
-file if it is the only so-named file found in <CODE>$PATH</CODE>.
-<P>
-
-<LI>
-The <CODE>vi</CODE> editing mode will invoke the <CODE>vi</CODE> editor directly when
-the <SAMP>`v'</SAMP> command is run, instead of checking <CODE>$FCEDIT</CODE> and
-<CODE>$EDITOR</CODE>.
-<P>
-
-<LI>
-When the <CODE>xpg_echo</CODE> option is enabled, Bash does not attempt to interpret
-any arguments to <CODE>echo</CODE> as options.  Each argument is displayed, after
-escape characters are converted.
-<P>
-
-</OL>
-<P>
-
-There is other POSIX behavior that Bash does not implement by
-default even when in POSIX mode.
-Specifically:
-</P><P>
-
-<OL>
-
-<LI>
-The <CODE>fc</CODE> builtin checks <CODE>$EDITOR</CODE> as a program to edit history
-entries if <CODE>FCEDIT</CODE> is unset, rather than defaulting directly to
-<CODE>ed</CODE>.  <CODE>fc</CODE> uses <CODE>ed</CODE> if <CODE>EDITOR</CODE> is unset.
-<P>
-
-<LI>
-As noted above, Bash requires the <CODE>xpg_echo</CODE> option to be enabled for
-the <CODE>echo</CODE> builtin to be fully conformant.
-<P>
-
-</OL>
-<P>
-
-Bash can be configured to be POSIX-conformant by default, by specifying
-the <SAMP>`--enable-strict-posix-default'</SAMP> to <CODE>configure</CODE> when building
-(see section <A HREF="b.html#SEC132">10.8 Optional Features</A>).
-</P><P>
-
-<A NAME="Job Control"></A>
-<HR SIZE="6">
-<A NAME="SEC89"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC88"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC90"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 7. Job Control </H1>
-<!--docid::SEC89::-->
-<P>
-
-This chapter discusses what job control is, how it works, and how
-Bash allows you to access its facilities.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC90">7.1 Job Control Basics</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How job control works.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Bash builtin commands used to interact
-                               with job control.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC92">7.3 Job Control Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables Bash uses to customize job
-                               control.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Job Control Basics"></A>
-<HR SIZE="6">
-<A NAME="SEC90"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC91"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 7.1 Job Control Basics </H2>
-<!--docid::SEC90::-->
-<P>
-
-Job control
-refers to the ability to selectively stop (suspend)
-the execution of processes and continue (resume)
-their execution at a later point.  A user typically employs
-this facility via an interactive interface supplied jointly
-by the system's terminal driver and Bash.
-</P><P>
-
-The shell associates a <VAR>job</VAR> with each pipeline.  It keeps a
-table of currently executing jobs, which may be listed with the
-<CODE>jobs</CODE> command.  When Bash starts a job
-asynchronously, it prints a line that looks
-like:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>[1] 25647
-</pre></td></tr></table>indicating that this job is job number 1 and that the process ID
-of the last process in the pipeline associated with this job is
-25647.  All of the processes in a single pipeline are members of
-the same job.  Bash uses the <VAR>job</VAR> abstraction as the
-basis for job control. 
-</P><P>
-
-To facilitate the implementation of the user interface to job
-control, the operating system maintains the notion of a current terminal
-process group ID.  Members of this process group (processes whose
-process group ID is equal to the current terminal process group
-ID) receive keyboard-generated signals such as <CODE>SIGINT</CODE>. 
-These processes are said to be in the foreground.  Background
-processes are those whose process group ID differs from the
-terminal's; such processes are immune to keyboard-generated
-signals.  Only foreground processes are allowed to read from or
-write to the terminal.  Background processes which attempt to
-read from (write to) the terminal are sent a <CODE>SIGTTIN</CODE>
-(<CODE>SIGTTOU</CODE>) signal by the terminal driver, which, unless
-caught, suspends the process. 
-</P><P>
-
-If the operating system on which Bash is running supports
-job control, Bash contains facilities to use it.  Typing the
-<VAR>suspend</VAR> character (typically <SAMP>`^Z'</SAMP>, Control-Z) while a
-process is running causes that process to be stopped and returns
-control to Bash.  Typing the <VAR>delayed suspend</VAR> character
-(typically <SAMP>`^Y'</SAMP>, Control-Y) causes the process to be stopped
-when it attempts to read input from the terminal, and control to
-be returned to Bash.  The user then manipulates the state of
-this job, using the <CODE>bg</CODE> command to continue it in the
-background, the <CODE>fg</CODE> command to continue it in the
-foreground, or the <CODE>kill</CODE> command to kill it.  A <SAMP>`^Z'</SAMP>
-takes effect immediately, and has the additional side effect of
-causing pending output and typeahead to be discarded. 
-</P><P>
-
-There are a number of ways to refer to a job in the shell.  The
-character <SAMP>`%'</SAMP> introduces a job name.
-</P><P>
-
-Job number <CODE>n</CODE> may be referred to as <SAMP>`%n'</SAMP>.
-The symbols <SAMP>`%%'</SAMP> and  <SAMP>`%+'</SAMP> refer to the shell's notion of the
-current job, which is the last job stopped while it was in the foreground
-or started in the background.
-A single <SAMP>`%'</SAMP> (with no accompanying job specification) also refers
-to the current job.
-The previous job may be referenced using <SAMP>`%-'</SAMP>.  In output
-pertaining to jobs (e.g., the output of the <CODE>jobs</CODE> command),
-the current job is always flagged with a <SAMP>`+'</SAMP>, and the
-previous job with a <SAMP>`-'</SAMP>. 
-</P><P>
-
-A job may also be referred to
-using a prefix of the name used to start it, or using a substring
-that appears in its command line.  For example, <SAMP>`%ce'</SAMP> refers
-to a stopped <CODE>ce</CODE> job. Using <SAMP>`%?ce'</SAMP>, on the
-other hand, refers to any job containing the string <SAMP>`ce'</SAMP> in
-its command line.  If the prefix or substring matches more than one job,
-Bash reports an error.
-</P><P>
-
-Simply naming a job can be used to bring it into the foreground:
-<SAMP>`%1'</SAMP> is a synonym for <SAMP>`fg %1'</SAMP>, bringing job 1 from the
-background into the foreground.  Similarly, <SAMP>`%1 &#38;'</SAMP> resumes
-job 1 in the background, equivalent to <SAMP>`bg %1'</SAMP>
-</P><P>
-
-The shell learns immediately whenever a job changes state. 
-Normally, Bash waits until it is about to print a prompt
-before reporting changes in a job's status so as to not interrupt
-any other output.
-If the <SAMP>`-b'</SAMP> option to the <CODE>set</CODE> builtin is enabled,
-Bash reports such changes immediately (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-Any trap on <CODE>SIGCHLD</CODE> is executed for each child process
-that exits.
-</P><P>
-
-If an attempt to exit Bash is made while jobs are stopped, (or running, if
-the <CODE>checkjobs</CODE> option is enabled -- see <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>), the
-shell prints a warning message, and if the <CODE>checkjobs</CODE> option is
-enabled, lists the jobs and their statuses.
-The <CODE>jobs</CODE> command may then be used to inspect their status.
-If a second attempt to exit is made without an intervening command,
-Bash does not print another warning, and any stopped jobs are terminated.
-</P><P>
-
-<A NAME="Job Control Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC91"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC90"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC92"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC92"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 7.2 Job Control Builtins </H2>
-<!--docid::SEC91::-->
-<P>
-
-<DL COMPACT>
-
-<DT><CODE>bg</CODE>
-<DD><A NAME="IDX281"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bg [<VAR>jobspec</VAR> <small>...</small>]
-</pre></td></tr></table>Resume each suspended job <VAR>jobspec</VAR> in the background, as if it
-had been started with <SAMP>`&#38;'</SAMP>.
-If <VAR>jobspec</VAR> is not supplied, the current job is used.
-The return status is zero unless it is run when job control is not
-enabled, or, when run with job control enabled, any
-<VAR>jobspec</VAR> was not found or specifies a job
-that was started without job control.
-<P>
-
-<DT><CODE>fg</CODE>
-<DD><A NAME="IDX282"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>fg [<VAR>jobspec</VAR>]
-</pre></td></tr></table>Resume the job <VAR>jobspec</VAR> in the foreground and make it the current job.
-If <VAR>jobspec</VAR> is not supplied, the current job is used.
-The return status is that of the command placed into the foreground,
-or non-zero if run when job control is disabled or, when run with
-job control enabled, <VAR>jobspec</VAR> does not specify a valid job or
-<VAR>jobspec</VAR> specifies a job that was started without job control.
-<P>
-
-<DT><CODE>jobs</CODE>
-<DD><A NAME="IDX283"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>jobs [-lnprs] [<VAR>jobspec</VAR>]
-jobs -x <VAR>command</VAR> [<VAR>arguments</VAR>]
-</pre></td></tr></table><P>
-
-The first form lists the active jobs.  The options have the
-following meanings:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-l</CODE>
-<DD>List process IDs in addition to the normal information.
-<P>
-
-<DT><CODE>-n</CODE>
-<DD>Display information only about jobs that have changed status since
-the user was last notified of their status.
-<P>
-
-<DT><CODE>-p</CODE>
-<DD>List only the process ID of the job's process group leader.
-<P>
-
-<DT><CODE>-r</CODE>
-<DD>Restrict output to running jobs.
-<P>
-
-<DT><CODE>-s</CODE>
-<DD>Restrict output to stopped jobs.
-</DL>
-<P>
-
-If <VAR>jobspec</VAR> is given,
-output is restricted to information about that job. 
-If <VAR>jobspec</VAR> is not supplied, the status of all jobs is
-listed.
-</P><P>
-
-If the <SAMP>`-x'</SAMP> option is supplied, <CODE>jobs</CODE> replaces any
-<VAR>jobspec</VAR> found in <VAR>command</VAR> or <VAR>arguments</VAR> with the
-corresponding process group ID, and executes <VAR>command</VAR>,
-passing it <VAR>argument</VAR>s, returning its exit status. 
-</P><P>
-
-<DT><CODE>kill</CODE>
-<DD><A NAME="IDX284"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>kill [-s <VAR>sigspec</VAR>] [-n <VAR>signum</VAR>] [-<VAR>sigspec</VAR>] <VAR>jobspec</VAR> or <VAR>pid</VAR>
-kill -l [<VAR>exit_status</VAR>]
-</pre></td></tr></table>Send a signal specified by <VAR>sigspec</VAR> or <VAR>signum</VAR> to the process
-named by job specification <VAR>jobspec</VAR> or process ID <VAR>pid</VAR>.
-<VAR>sigspec</VAR> is either a case-insensitive signal name such as
-<CODE>SIGINT</CODE> (with or without the <CODE>SIG</CODE> prefix)
-or a signal number; <VAR>signum</VAR> is a signal number.
-If <VAR>sigspec</VAR> and <VAR>signum</VAR> are not present, <CODE>SIGTERM</CODE> is used.
-The <SAMP>`-l'</SAMP> option lists the signal names.
-If any arguments are supplied when <SAMP>`-l'</SAMP> is given, the names of the
-signals corresponding to the arguments are listed, and the return status
-is zero.
-<VAR>exit_status</VAR> is a number specifying a signal number or the exit
-status of a process terminated by a signal.
-The return status is zero if at least one signal was successfully sent,
-or non-zero if an error occurs or an invalid option is encountered.
-<P>
-
-<DT><CODE>wait</CODE>
-<DD><A NAME="IDX285"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>wait [<VAR>jobspec</VAR> or <VAR>pid</VAR> ...]
-</pre></td></tr></table>Wait until the child process specified by each process ID <VAR>pid</VAR>
-or job specification <VAR>jobspec</VAR> exits and return the exit status of the
-last command waited for.
-If a job spec is given, all processes in the job are waited for.
-If no arguments are given, all currently active child processes are
-waited for, and the return status is zero.
-If neither <VAR>jobspec</VAR> nor <VAR>pid</VAR> specifies an active child process
-of the shell, the return status is 127.
-<P>
-
-<DT><CODE>disown</CODE>
-<DD><A NAME="IDX286"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>disown [-ar] [-h] [<VAR>jobspec</VAR> <small>...</small>]
-</pre></td></tr></table>Without options, each <VAR>jobspec</VAR> is removed from the table of
-active jobs.
-If the <SAMP>`-h'</SAMP> option is given, the job is not removed from the table,
-but is marked so that <CODE>SIGHUP</CODE> is not sent to the job if the shell
-receives a <CODE>SIGHUP</CODE>.
-If <VAR>jobspec</VAR> is not present, and neither the <SAMP>`-a'</SAMP> nor <SAMP>`-r'</SAMP>
-option is supplied, the current job is used.
-If no <VAR>jobspec</VAR> is supplied, the <SAMP>`-a'</SAMP> option means to remove or
-mark all jobs; the <SAMP>`-r'</SAMP> option without a <VAR>jobspec</VAR>
-argument restricts operation to running jobs.
-<P>
-
-<DT><CODE>suspend</CODE>
-<DD><A NAME="IDX287"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>suspend [-f]
-</pre></td></tr></table>Suspend the execution of this shell until it receives a
-<CODE>SIGCONT</CODE> signal.  The <SAMP>`-f'</SAMP> option means to suspend
-even if the shell is a login shell.
-<P>
-
-</DL>
-<P>
-
-When job control is not active, the <CODE>kill</CODE> and <CODE>wait</CODE>
-builtins do not accept <VAR>jobspec</VAR> arguments.  They must be
-supplied process IDs.
-</P><P>
-
-<A NAME="Job Control Variables"></A>
-<HR SIZE="6">
-<A NAME="SEC92"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC91"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC89"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 7.3 Job Control Variables </H2>
-<!--docid::SEC92::-->
-<P>
-
-<DL COMPACT>
-
-<A NAME="IDX288"></A>
-<DT><CODE>auto_resume</CODE>
-<DD><A NAME="IDX289"></A>
-This variable controls how the shell interacts with the user and
-job control.  If this variable exists then single word simple
-commands without redirections are treated as candidates for resumption
-of an existing job.  There is no ambiguity allowed; if there is
-more than one job beginning with the string typed, then
-the most recently accessed job will be selected.
-The name of a stopped job, in this context, is the command line
-used to start it.  If this variable is set to the value <SAMP>`exact'</SAMP>,
-the string supplied must match the name of a stopped job exactly;
-if set to <SAMP>`substring'</SAMP>,
-the string supplied needs to match a substring of the name of a
-stopped job.  The <SAMP>`substring'</SAMP> value provides functionality
-analogous to the <SAMP>`%?'</SAMP> job ID (see section <A HREF="b.html#SEC90">7.1 Job Control Basics</A>).
-If set to any other value, the supplied string must
-be a prefix of a stopped job's name; this provides functionality
-analogous to the <SAMP>`%'</SAMP> job ID.
-<P>
-
-</DL>
-<P>
-
-<A NAME="IDX290"></A>
-</P><P>
-
-<A NAME="Command Line Editing"></A>
-<HR SIZE="6">
-<A NAME="SEC93"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC92"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC94"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 8. Command Line Editing </H1>
-<!--docid::SEC93::-->
-<P>
-
-This chapter describes the basic features of the GNU
-command line editing interface.
-Command line editing is provided by the Readline library, which is
-used by several different programs, including Bash.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC94">8.1 Introduction to Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC95">8.2 Readline Interaction</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC101">8.3 Readline Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC105">8.4 Bindable Readline Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands
-                               available for binding</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC114">8.5 Readline vi Mode</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline
-                               behave like the vi editor.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC115">8.6 Programmable Completion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to specify the possible completions for
-                               a specific command.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Builtin commands to specify how to
-                               complete arguments for a particular command.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Introduction and Notation"></A>
-<HR SIZE="6">
-<A NAME="SEC94"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.1 Introduction to Line Editing </H2>
-<!--docid::SEC94::-->
-<P>
-
-The following paragraphs describe the notation used to represent
-keystrokes.
-</P><P>
-
-The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
-produced when the <KBD>k</KBD> key is pressed while the Control key
-is depressed.
-</P><P>
-
-The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
-produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD>
-key is pressed.
-The Meta key is labeled <KBD>ALT</KBD> on many keyboards.
-On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of
-the space bar), the <KBD>ALT</KBD> on the left side is generally set to
-work as a Meta key.
-The <KBD>ALT</KBD> key on the right may also be configured to work as a
-Meta key or may be configured as some other modifier, such as a
-Compose key for typing accented characters.
-</P><P>
-
-If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as
-a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD>
-<EM>first</EM>, and then typing <KBD>k</KBD>.
-Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
-</P><P>
-
-The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
-character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
-</P><P>
-
-In addition, several keys have their own names.  Specifically,
-<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all
-stand for themselves when seen in this text, or in an init file
-(see section <A HREF="b.html#SEC101">8.3 Readline Init File</A>).
-If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will
-produce the desired character.
-The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on
-some keyboards.
-</P><P>
-
-<A NAME="Readline Interaction"></A>
-<HR SIZE="6">
-<A NAME="SEC95"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC94"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC96"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.2 Readline Interaction </H2>
-<!--docid::SEC95::-->
-<P>
-
-Often during an interactive session you type in a long line of text,
-only to notice that the first word on the line is misspelled.  The
-Readline library gives you a set of commands for manipulating the text
-as you type it in, allowing you to just fix your typo, and not forcing
-you to retype the majority of the line.  Using these editing commands,
-you move the cursor to the place that needs correction, and delete or
-insert the text of the corrections.  Then, when you are satisfied with
-the line, you simply press <KBD>RET</KBD>.  You do not have to be at the
-end of the line to press <KBD>RET</KBD>; the entire line is accepted
-regardless of the location of the cursor within the line.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC96">8.2.1 Readline Bare Essentials</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC97">8.2.2 Readline Movement Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC98">8.2.3 Readline Killing Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC99">8.2.4 Readline Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC100">8.2.5 Searching for Commands in the History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Readline Bare Essentials"></A>
-<HR SIZE="6">
-<A NAME="SEC96"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC97"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.2.1 Readline Bare Essentials </H3>
-<!--docid::SEC96::-->
-<P>
-
-In order to enter characters into the line, simply type them.  The typed
-character appears where the cursor was, and then the cursor moves one
-space to the right.  If you mistype a character, you can use your
-erase character to back up and delete the mistyped character.
-</P><P>
-
-Sometimes you may mistype a character, and
-not notice the error until you have typed several other characters.  In
-that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then
-correct your mistake.  Afterwards, you can move the cursor to the right
-with <KBD>C-f</KBD>.
-</P><P>
-
-When you add text in the middle of a line, you will notice that characters
-to the right of the cursor are `pushed over' to make room for the text
-that you have inserted.  Likewise, when you delete text behind the cursor,
-characters to the right of the cursor are `pulled back' to fill in the
-blank space created by the removal of the text.  A list of the bare
-essentials for editing the text of an input line follows.
-</P><P>
-
-<DL COMPACT>
-<DT><KBD>C-b</KBD>
-<DD>Move back one character.
-<DT><KBD>C-f</KBD>
-<DD>Move forward one character.
-<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD>
-<DD>Delete the character to the left of the cursor.
-<DT><KBD>C-d</KBD>
-<DD>Delete the character underneath the cursor.
-<DT>Printing characters
-<DD>Insert the character into the line at the cursor.
-<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD>
-<DD>Undo the last editing command.  You can undo all the way back to an
-empty line.
-</DL>
-<P>
-
-(Depending on your configuration, the <KBD>Backspace</KBD> key be set to
-delete the character to the left of the cursor and the <KBD>DEL</KBD> key set
-to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather
-than the character to the left of the cursor.)
-</P><P>
-
-<A NAME="Readline Movement Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC97"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC96"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC98"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC98"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.2.2 Readline Movement Commands </H3>
-<!--docid::SEC97::-->
-<P>
-
-The above table describes the most basic keystrokes that you need
-in order to do editing of the input line.  For your convenience, many
-other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>,
-<KBD>C-d</KBD>, and <KBD>DEL</KBD>.  Here are some commands for moving more rapidly
-about the line.
-</P><P>
-
-<DL COMPACT>
-<DT><KBD>C-a</KBD>
-<DD>Move to the start of the line.
-<DT><KBD>C-e</KBD>
-<DD>Move to the end of the line.
-<DT><KBD>M-f</KBD>
-<DD>Move forward a word, where a word is composed of letters and digits.
-<DT><KBD>M-b</KBD>
-<DD>Move backward a word.
-<DT><KBD>C-l</KBD>
-<DD>Clear the screen, reprinting the current line at the top.
-</DL>
-<P>
-
-Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
-forward a word.  It is a loose convention that control keystrokes
-operate on characters while meta keystrokes operate on words.
-</P><P>
-
-<A NAME="Readline Killing Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC98"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC97"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC99"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC99"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.2.3 Readline Killing Commands </H3>
-<!--docid::SEC98::-->
-<P>
-
-<A NAME="IDX291"></A>
-<A NAME="IDX292"></A>
-</P><P>
-
-<EM>Killing</EM> text means to delete the text from the line, but to save
-it away for later use, usually by <EM>yanking</EM> (re-inserting)
-it back into the line.
-(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
-</P><P>
-
-If the description for a command says that it `kills' text, then you can
-be sure that you can get the text back in a different (or the same)
-place later.
-</P><P>
-
-When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
-Any number of consecutive kills save all of the killed text together, so
-that when you yank it back, you get it all.  The kill
-ring is not line specific; the text that you killed on a previously
-typed line is available to be yanked back later, when you are typing
-another line.
-<A NAME="IDX293"></A>
-</P><P>
-
-Here is the list of commands for killing text.
-</P><P>
-
-<DL COMPACT>
-<DT><KBD>C-k</KBD>
-<DD>Kill the text from the current cursor position to the end of the line.
-<P>
-
-<DT><KBD>M-d</KBD>
-<DD>Kill from the cursor to the end of the current word, or, if between
-words, to the end of the next word.
-Word boundaries are the same as those used by <KBD>M-f</KBD>.
-<P>
-
-<DT><KBD>M-<KBD>DEL</KBD></KBD>
-<DD>Kill from the cursor the start of the current word, or, if between
-words, to the start of the previous word.
-Word boundaries are the same as those used by <KBD>M-b</KBD>.
-<P>
-
-<DT><KBD>C-w</KBD>
-<DD>Kill from the cursor to the previous whitespace.  This is different than
-<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ.
-<P>
-
-</DL>
-<P>
-
-Here is how to <EM>yank</EM> the text back into the line.  Yanking
-means to copy the most-recently-killed text from the kill buffer.
-</P><P>
-
-<DL COMPACT>
-<DT><KBD>C-y</KBD>
-<DD>Yank the most recently killed text back into the buffer at the cursor.
-<P>
-
-<DT><KBD>M-y</KBD>
-<DD>Rotate the kill-ring, and yank the new top.  You can only do this if
-the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
-</DL>
-<P>
-
-<A NAME="Readline Arguments"></A>
-<HR SIZE="6">
-<A NAME="SEC99"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC98"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC100"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC100"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.2.4 Readline Arguments </H3>
-<!--docid::SEC99::-->
-<P>
-
-You can pass numeric arguments to Readline commands.  Sometimes the
-argument acts as a repeat count, other times it is the <I>sign</I> of the
-argument that is significant.  If you pass a negative argument to a
-command which normally acts in a forward direction, that command will
-act in a backward direction.  For example, to kill text back to the
-start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
-</P><P>
-
-The general way to pass numeric arguments to a command is to type meta
-digits before the command.  If the first `digit' typed is a minus
-sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative.  Once
-you have typed one meta digit to get the argument started, you can type
-the remainder of the digits, and then the command.  For example, to give
-the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>,
-which will delete the next ten characters on the input line.
-</P><P>
-
-<A NAME="Searching"></A>
-<HR SIZE="6">
-<A NAME="SEC100"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC99"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC95"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.2.5 Searching for Commands in the History </H3>
-<!--docid::SEC100::-->
-<P>
-
-Readline provides commands for searching through the command history
-(see section <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>)
-for lines containing a specified string.
-There are two search modes:  <EM>incremental</EM> and <EM>non-incremental</EM>.
-</P><P>
-
-Incremental searches begin before the user has finished typing the
-search string.
-As each character of the search string is typed, Readline displays
-the next entry from the history matching the string typed so far.
-An incremental search requires only as many characters as needed to
-find the desired history entry.
-To search backward in the history for a particular string, type
-<KBD>C-r</KBD>.  Typing <KBD>C-s</KBD> searches forward through the history.
-The characters present in the value of the <CODE>isearch-terminators</CODE> variable
-are used to terminate an incremental search.
-If that variable has not been assigned a value, the <KBD>ESC</KBD> and
-<KBD>C-J</KBD> characters will terminate an incremental search.
-<KBD>C-g</KBD> will abort an incremental search and restore the original line.
-When the search is terminated, the history entry containing the
-search string becomes the current line.
-</P><P>
-
-To find other matching entries in the history list, type <KBD>C-r</KBD> or
-<KBD>C-s</KBD> as appropriate.
-This will search backward or forward in the history for the next
-entry matching the search string typed so far.
-Any other key sequence bound to a Readline command will terminate
-the search and execute that command.
-For instance, a <KBD>RET</KBD> will terminate the search and accept
-the line, thereby executing the command from the history list.
-A movement command will terminate the search, make the last line found
-the current line, and begin editing.
-</P><P>
-
-Readline remembers the last incremental search string.  If two
-<KBD>C-r</KBD>s are typed without any intervening characters defining a new
-search string, any remembered search string is used.
-</P><P>
-
-Non-incremental searches read the entire search string before starting
-to search for matching history lines.  The search string may be
-typed by the user or be part of the contents of the current line.
-</P><P>
-
-<A NAME="Readline Init File"></A>
-<HR SIZE="6">
-<A NAME="SEC101"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC100"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC102"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.3 Readline Init File </H2>
-<!--docid::SEC101::-->
-<P>
-
-Although the Readline library comes with a set of Emacs-like
-keybindings installed by default, it is possible to use a different set
-of keybindings.
-Any user can customize programs that use Readline by putting
-commands in an <EM>inputrc</EM> file, conventionally in his home directory.
-The name of this
-file is taken from the value of the shell variable <CODE>INPUTRC</CODE>.  If
-that variable is unset, the default is <TT>`~/.inputrc'</TT>.  If that
-file does not exist or cannot be read, the ultimate default is
-<TT>`/etc/inputrc'</TT>.
-</P><P>
-
-When a program which uses the Readline library starts up, the
-init file is read, and the key bindings are set.
-</P><P>
-
-In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
-incorporating any changes that you might have made to it.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR>
-</TABLE>
-
-<br>
-<TABLE BORDER=0 CELLSPACING=0>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC103">8.3.2 Conditional Init Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR>
-</TABLE>
-
-<br>
-<TABLE BORDER=0 CELLSPACING=0>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC104">8.3.3 Sample Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Readline Init File Syntax"></A>
-<HR SIZE="6">
-<A NAME="SEC102"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC103"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.3.1 Readline Init File Syntax </H3>
-<!--docid::SEC102::-->
-<P>
-
-There are only a few basic constructs allowed in the
-Readline init file.  Blank lines are ignored.
-Lines beginning with a <SAMP>`#'</SAMP> are comments.
-Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
-constructs (see section <A HREF="b.html#SEC103">8.3.2 Conditional Init Constructs</A>).  Other lines
-denote variable settings and key bindings.
-</P><P>
-
-<DL COMPACT>
-<DT>Variable Settings
-<DD>You can modify the run-time behavior of Readline by
-altering the values of variables in Readline
-using the <CODE>set</CODE> command within the init file.
-The syntax is simple:
-<P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR>
-</pre></td></tr></table></P><P>
-
-Here, for example, is how to
-change from the default Emacs-like key binding to use
-<CODE>vi</CODE> line editing commands:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>set editing-mode vi
-</pre></td></tr></table></P><P>
-
-Variable names and values, where appropriate, are recognized without regard
-to case.  Unrecognized variable names are ignored.
-</P><P>
-
-Boolean variables (those that can be set to on or off) are set to on if
-the value is null or empty, <VAR>on</VAR> (case-insensitive), or 1.  Any other
-value results in the variable being set to off.
-</P><P>
-
-The <CODE>bind -V</CODE> command lists the current Readline variable names
-and values.  See section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>.
-</P><P>
-
-A great deal of run-time behavior is changeable with the following
-variables.
-</P><P>
-
-<A NAME="IDX294"></A>
-<DL COMPACT>
-
-<DT><CODE>bell-style</CODE>
-<DD><A NAME="IDX295"></A>
-Controls what happens when Readline wants to ring the terminal bell.
-If set to <SAMP>`none'</SAMP>, Readline never rings the bell.  If set to
-<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
-If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
-the terminal's bell.
-<P>
-
-<DT><CODE>bind-tty-special-chars</CODE>
-<DD><A NAME="IDX296"></A>
-If set to <SAMP>`on'</SAMP>, Readline attempts to bind the control characters  
-treated specially by the kernel's terminal driver to their Readline
-equivalents.
-<P>
-
-<DT><CODE>comment-begin</CODE>
-<DD><A NAME="IDX297"></A>
-The string to insert at the beginning of the line when the
-<CODE>insert-comment</CODE> command is executed.  The default value
-is <CODE>"#"</CODE>.
-<P>
-
-<DT><CODE>completion-ignore-case</CODE>
-<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
-in a case-insensitive fashion.
-The default value is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>completion-query-items</CODE>
-<DD><A NAME="IDX298"></A>
-The number of possible completions that determines when the user is
-asked whether the list of possibilities should be displayed.
-If the number of possible completions is greater than this value,
-Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed.
-This variable must be set to an integer value greater than or equal to 0.
-A negative value means Readline should never ask.
-The default limit is <CODE>100</CODE>.
-<P>
-
-<DT><CODE>convert-meta</CODE>
-<DD><A NAME="IDX299"></A>
-If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
-eighth bit set to an ASCII key sequence by stripping the eighth
-bit and prefixing an <KBD>ESC</KBD> character, converting them to a
-meta-prefixed key sequence.  The default value is <SAMP>`on'</SAMP>.
-<P>
-
-<DT><CODE>disable-completion</CODE>
-<DD><A NAME="IDX300"></A>
-If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
-Completion  characters will be inserted into the line as if they had
-been mapped to <CODE>self-insert</CODE>.  The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>editing-mode</CODE>
-<DD><A NAME="IDX301"></A>
-The <CODE>editing-mode</CODE> variable controls which default set of
-key bindings is used.  By default, Readline starts up in Emacs editing
-mode, where the keystrokes are most similar to Emacs.  This variable can be
-set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
-<P>
-
-<DT><CODE>enable-keypad</CODE>
-<DD><A NAME="IDX302"></A>
-When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
-keypad when it is called.  Some systems need this to enable the
-arrow keys.  The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>expand-tilde</CODE>
-<DD><A NAME="IDX303"></A>
-If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
-attempts word completion.  The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>history-preserve-point</CODE>
-<DD><A NAME="IDX304"></A>
-If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the
-same location on each history line retrieved with <CODE>previous-history</CODE>
-or <CODE>next-history</CODE>.  The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>horizontal-scroll-mode</CODE>
-<DD><A NAME="IDX305"></A>
-This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>.  Setting it
-to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
-horizontally on a single screen line when they are longer than the width
-of the screen, instead of wrapping onto a new screen line.  By default,
-this variable is set to <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>input-meta</CODE>
-<DD><A NAME="IDX306"></A>
-<A NAME="IDX307"></A>
-If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
-will not clear the eighth bit in the characters it reads),
-regardless of what the terminal claims it can support.  The
-default value is <SAMP>`off'</SAMP>.  The name <CODE>meta-flag</CODE> is a
-synonym for this variable.
-<P>
-
-<DT><CODE>isearch-terminators</CODE>
-<DD><A NAME="IDX308"></A>
-The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (see section <A HREF="b.html#SEC100">8.2.5 Searching for Commands in the History</A>).
-If this variable has not been given a value, the characters <KBD>ESC</KBD> and
-<KBD>C-J</KBD> will terminate an incremental search.
-<P>
-
-<DT><CODE>keymap</CODE>
-<DD><A NAME="IDX309"></A>
-Sets Readline's idea of the current keymap for key binding commands.
-Acceptable <CODE>keymap</CODE> names are
-<CODE>emacs</CODE>,
-<CODE>emacs-standard</CODE>,
-<CODE>emacs-meta</CODE>,
-<CODE>emacs-ctlx</CODE>,
-<CODE>vi</CODE>,
-<CODE>vi-move</CODE>,
-<CODE>vi-command</CODE>, and
-<CODE>vi-insert</CODE>.
-<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is
-equivalent to <CODE>emacs-standard</CODE>.  The default value is <CODE>emacs</CODE>.
-The value of the <CODE>editing-mode</CODE> variable also affects the
-default keymap.
-<P>
-
-<DT><CODE>mark-directories</CODE>
-<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash
-appended.  The default is <SAMP>`on'</SAMP>.
-<P>
-
-<DT><CODE>mark-modified-lines</CODE>
-<DD><A NAME="IDX310"></A>
-This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
-asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified.
-This variable is <SAMP>`off'</SAMP> by default.
-<P>
-
-<DT><CODE>mark-symlinked-directories</CODE>
-<DD><A NAME="IDX311"></A>
-If set to <SAMP>`on'</SAMP>, completed names which are symbolic links
-to directories have a slash appended (subject to the value of
-<CODE>mark-directories</CODE>).
-The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>match-hidden-files</CODE>
-<DD><A NAME="IDX312"></A>
-This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose
-names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename
-completion, unless the leading <SAMP>`.'</SAMP> is
-supplied by the user in the filename to be completed.
-This variable is <SAMP>`on'</SAMP> by default.
-<P>
-
-<DT><CODE>output-meta</CODE>
-<DD><A NAME="IDX313"></A>
-If set to <SAMP>`on'</SAMP>, Readline will display characters with the
-eighth bit set directly rather than as a meta-prefixed escape
-sequence.  The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>page-completions</CODE>
-<DD><A NAME="IDX314"></A>
-If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager
-to display a screenful of possible completions at a time.
-This variable is <SAMP>`on'</SAMP> by default.
-<P>
-
-<DT><CODE>print-completions-horizontally</CODE>
-<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
-sorted horizontally in alphabetical order, rather than down the screen.
-The default is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>show-all-if-ambiguous</CODE>
-<DD><A NAME="IDX315"></A>
-This alters the default behavior of the completion functions.  If
-set to <SAMP>`on'</SAMP>, 
-words which have more than one possible completion cause the
-matches to be listed immediately instead of ringing the bell.
-The default value is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>show-all-if-unmodified</CODE>
-<DD><A NAME="IDX316"></A>
-This alters the default behavior of the completion functions in
-a fashion similar to <VAR>show-all-if-ambiguous</VAR>.
-If set to <SAMP>`on'</SAMP>, 
-words which have more than one possible completion without any
-possible partial completion (the possible completions don't share
-a common prefix) cause the matches to be listed immediately instead
-of ringing the bell.
-The default value is <SAMP>`off'</SAMP>.
-<P>
-
-<DT><CODE>visible-stats</CODE>
-<DD><A NAME="IDX317"></A>
-If set to <SAMP>`on'</SAMP>, a character denoting a file's type
-is appended to the filename when listing possible
-completions.  The default is <SAMP>`off'</SAMP>.
-<P>
-
-</DL>
-<P>
-
-<DT>Key Bindings
-<DD>The syntax for controlling key bindings in the init file is
-simple.  First you need to find the name of the command that you
-want to change.  The following sections contain tables of the command
-name, the default keybinding, if any, and a short description of what
-the command does.
-<P>
-
-Once you know the name of the command, simply place on a line
-in the init file the name of the key
-you wish to bind the command to, a colon, and then the name of the
-command.
-There can be no space between the key name and the colon -- that will be
-interpreted as part of the key name.
-The name of the key can be expressed in different ways, depending on
-what you find most comfortable.
-</P><P>
-
-In addition to command names, readline allows keys to be bound
-to a string that is inserted when the key is pressed (a <VAR>macro</VAR>).
-</P><P>
-
-The <CODE>bind -p</CODE> command displays Readline function names and
-bindings in a format that can put directly into an initialization file.
-See section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>.
-</P><P>
-
-<DL COMPACT>
-<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD><VAR>keyname</VAR> is the name of a key spelled out in English.  For example:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>Control-u: universal-argument
-Meta-Rubout: backward-kill-word
-Control-o: "&#62; output"
-</pre></td></tr></table><P>
-
-In the above example, <KBD>C-u</KBD> is bound to the function
-<CODE>universal-argument</CODE>,
-<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</CODE>, and
-<KBD>C-o</KBD> is bound to run the macro
-expressed on the right hand side (that is, to insert the text
-<SAMP>`&#62; output'</SAMP> into the line).
-</P><P>
-
-A number of symbolic character names are recognized while
-processing this key binding syntax:
-<VAR>DEL</VAR>,
-<VAR>ESC</VAR>,
-<VAR>ESCAPE</VAR>,
-<VAR>LFD</VAR>,
-<VAR>NEWLINE</VAR>,
-<VAR>RET</VAR>,
-<VAR>RETURN</VAR>,
-<VAR>RUBOUT</VAR>,
-<VAR>SPACE</VAR>,
-<VAR>SPC</VAR>,
-and
-<VAR>TAB</VAR>.
-</P><P>
-
-<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
-denoting an entire key sequence can be specified, by placing
-the key sequence in double quotes.  Some GNU Emacs style key
-escapes can be used, as in the following example, but the
-special character names are not recognized.
-<P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-u": universal-argument
-"\C-x\C-r": re-read-init-file
-"\e[11~": "Function Key 1"
-</pre></td></tr></table></P><P>
-
-In the above example, <KBD>C-u</KBD> is again bound to the function
-<CODE>universal-argument</CODE> (just as it was in the first example),
-<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>,
-and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert
-the text <SAMP>`Function Key 1'</SAMP>.
-</P><P>
-
-</DL>
-<P>
-
-The following GNU Emacs style escape sequences are available when
-specifying key sequences:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE><KBD>\C-</KBD></CODE>
-<DD>control prefix
-<DT><CODE><KBD>\M-</KBD></CODE>
-<DD>meta prefix
-<DT><CODE><KBD>\e</KBD></CODE>
-<DD>an escape character
-<DT><CODE><KBD>\\</KBD></CODE>
-<DD>backslash
-<DT><CODE><KBD>\"</KBD></CODE>
-<DD><KBD>"</KBD>, a double quotation mark
-<DT><CODE><KBD>\'</KBD></CODE>
-<DD><KBD>'</KBD>, a single quote or apostrophe
-</DL>
-<P>
-
-In addition to the GNU Emacs style escape sequences, a second
-set of backslash escapes is available:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>\a</CODE>
-<DD>alert (bell)
-<DT><CODE>\b</CODE>
-<DD>backspace
-<DT><CODE>\d</CODE>
-<DD>delete
-<DT><CODE>\f</CODE>
-<DD>form feed
-<DT><CODE>\n</CODE>
-<DD>newline
-<DT><CODE>\r</CODE>
-<DD>carriage return
-<DT><CODE>\t</CODE>
-<DD>horizontal tab
-<DT><CODE>\v</CODE>
-<DD>vertical tab
-<DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
-(one to three digits)
-<DT><CODE>\x<VAR>HH</VAR></CODE>
-<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
-(one or two hex digits)
-</DL>
-<P>
-
-When entering the text of a macro, single or double quotes must
-be used to indicate a macro definition.
-Unquoted text is assumed to be a function name.
-In the macro body, the backslash escapes described above are expanded.
-Backslash will quote any other character in the macro text,
-including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
-For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP>
-insert a single <SAMP>`\'</SAMP> into the line:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-x\\": "\\"
-</pre></td></tr></table></P><P>
-
-</DL>
-<P>
-
-<A NAME="Conditional Init Constructs"></A>
-<HR SIZE="6">
-<A NAME="SEC103"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC102"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC104"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC104"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.3.2 Conditional Init Constructs </H3>
-<!--docid::SEC103::-->
-<P>
-
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key
-bindings and variable settings to be performed as the result
-of tests.  There are four parser directives used.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>$if</CODE>
-<DD>The <CODE>$if</CODE> construct allows bindings to be made based on the
-editing mode, the terminal being used, or the application using
-Readline.  The text of the test extends to the end of the line;
-no characters are required to isolate it.
-<P>
-
-<DL COMPACT>
-<DT><CODE>mode</CODE>
-<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
-whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
-This may be used in conjunction
-with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
-the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
-Readline is starting out in <CODE>emacs</CODE> mode.
-<P>
-
-<DT><CODE>term</CODE>
-<DD>The <CODE>term=</CODE> form may be used to include terminal-specific
-key bindings, perhaps to bind the key sequences output by the
-terminal's function keys.  The word on the right side of the
-<SAMP>`='</SAMP> is tested against both the full name of the terminal and
-the portion of the terminal name before the first <SAMP>`-'</SAMP>.  This
-allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>,
-for instance.
-<P>
-
-<DT><CODE>application</CODE>
-<DD>The <VAR>application</VAR> construct is used to include
-application-specific settings.  Each program using the Readline
-library sets the <VAR>application name</VAR>, and you can test for
-a particular value. 
-This could be used to bind key sequences to functions useful for
-a specific program.  For instance, the following command adds a
-key sequence that quotes the current or previous word in Bash:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>$if Bash
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-$endif
-</pre></td></tr></table></DL>
-<P>
-
-<DT><CODE>$endif</CODE>
-<DD>This command, as seen in the previous example, terminates an
-<CODE>$if</CODE> command.
-<P>
-
-<DT><CODE>$else</CODE>
-<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if
-the test fails.
-<P>
-
-<DT><CODE>$include</CODE>
-<DD>This directive takes a single filename as an argument and reads commands
-and bindings from that file.
-For example, the following directive reads from <TT>`/etc/inputrc'</TT>:
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>$include /etc/inputrc
-</pre></td></tr></table></DL>
-<P>
-
-<A NAME="Sample Init File"></A>
-<HR SIZE="6">
-<A NAME="SEC104"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC103"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC101"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.3.3 Sample Init File </H3>
-<!--docid::SEC104::-->
-<P>
-
-Here is an example of an <VAR>inputrc</VAR> file.  This illustrates key
-binding, variable assignment, and conditional syntax.
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre># This file controls the behaviour of line input editing for
-# programs that use the GNU Readline library.  Existing
-# programs include FTP, Bash, and GDB.
-#
-# You can re-read the inputrc file with C-x C-r.
-# Lines beginning with '#' are comments.
-#
-# First, include any systemwide bindings and variable
-# assignments from /etc/Inputrc
-$include /etc/Inputrc
-
-#
-# Set various bindings for emacs mode.
-
-set editing-mode emacs 
-
-$if mode=emacs
-
-Meta-Control-h:        backward-kill-word      Text after the function name is ignored
-
-#
-# Arrow keys in keypad mode
-#
-#"\M-OD":        backward-char
-#"\M-OC":        forward-char
-#"\M-OA":        previous-history
-#"\M-OB":        next-history
-#
-# Arrow keys in ANSI mode
-#
-"\M-[D":        backward-char
-"\M-[C":        forward-char
-"\M-[A":        previous-history
-"\M-[B":        next-history
-#
-# Arrow keys in 8 bit keypad mode
-#
-#"\M-\C-OD":       backward-char
-#"\M-\C-OC":       forward-char
-#"\M-\C-OA":       previous-history
-#"\M-\C-OB":       next-history
-#
-# Arrow keys in 8 bit ANSI mode
-#
-#"\M-\C-[D":       backward-char
-#"\M-\C-[C":       forward-char
-#"\M-\C-[A":       previous-history
-#"\M-\C-[B":       next-history
-
-C-q: quoted-insert
-
-$endif
-
-# An old-style binding.  This happens to be the default.
-TAB: complete
-
-# Macros that are convenient for shell interaction
-$if Bash
-# edit the path
-"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word --
-# insert open and close double quotes
-# and move to just after the open quote
-"\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes
-# in sequences and macros)
-"\C-x\\": "\\"
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-# Add a binding to refresh the line, which is unbound
-"\C-xr": redraw-current-line
-# Edit variable on current line.
-"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
-$endif
-
-# use a visible bell if one is available
-set bell-style visible
-
-# don't strip characters to 7 bits when reading
-set input-meta on
-
-# allow iso-latin1 characters to be inserted rather
-# than converted to prefix-meta sequences
-set convert-meta off
-
-# display characters with the eighth bit set directly
-# rather than as meta-prefixed characters
-set output-meta on
-
-# if there are more than 150 possible completions for
-# a word, ask the user if he wants to see all of them
-set completion-query-items 150
-
-# For FTP
-$if Ftp
-"\C-xg": "get \M-?"
-"\C-xt": "put \M-?"
-"\M-.": yank-last-arg
-$endif
-</pre></td></tr></table></P><P>
-
-<A NAME="Bindable Readline Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC105"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC104"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC106"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.4 Bindable Readline Commands </H2>
-<!--docid::SEC105::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC110">8.4.5 Specifying Numeric Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-This section describes Readline commands that may be bound to key
-sequences.
-You can list your key bindings by executing
-<CODE>bind -P</CODE> or, for a more terse format, suitable for an
-<VAR>inputrc</VAR> file, <CODE>bind -p</CODE>.  (See section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>.)
-Command names without an accompanying key sequence are unbound by default.
-</P><P>
-
-In the following descriptions, <EM>point</EM> refers to the current cursor
-position, and <EM>mark</EM> refers to a cursor position saved by the
-<CODE>set-mark</CODE> command.
-The text between the point and mark is referred to as the <EM>region</EM>.
-</P><P>
-
-<A NAME="Commands For Moving"></A>
-<HR SIZE="6">
-<A NAME="SEC106"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC107"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.1 Commands For Moving </H3>
-<!--docid::SEC106::-->
-<DL COMPACT>
-<A NAME="IDX318"></A>
-<DT><CODE>beginning-of-line (C-a)</CODE>
-<DD><A NAME="IDX319"></A>
-Move to the start of the current line.
-<P>
-
-<A NAME="IDX320"></A>
-<DT><CODE>end-of-line (C-e)</CODE>
-<DD><A NAME="IDX321"></A>
-Move to the end of the line.
-<P>
-
-<A NAME="IDX322"></A>
-<DT><CODE>forward-char (C-f)</CODE>
-<DD><A NAME="IDX323"></A>
-Move forward a character.
-<P>
-
-<A NAME="IDX324"></A>
-<DT><CODE>backward-char (C-b)</CODE>
-<DD><A NAME="IDX325"></A>
-Move back a character.
-<P>
-
-<A NAME="IDX326"></A>
-<DT><CODE>forward-word (M-f)</CODE>
-<DD><A NAME="IDX327"></A>
-Move forward to the end of the next word.  Words are composed of
-letters and digits.
-<P>
-
-<A NAME="IDX328"></A>
-<DT><CODE>backward-word (M-b)</CODE>
-<DD><A NAME="IDX329"></A>
-Move back to the start of the current or previous word.  Words are
-composed of letters and digits.
-<P>
-
-<A NAME="IDX330"></A>
-<DT><CODE>clear-screen (C-l)</CODE>
-<DD><A NAME="IDX331"></A>
-Clear the screen and redraw the current line,
-leaving the current line at the top of the screen.
-<P>
-
-<A NAME="IDX332"></A>
-<DT><CODE>redraw-current-line ()</CODE>
-<DD><A NAME="IDX333"></A>
-Refresh the current line.  By default, this is unbound.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Commands For History"></A>
-<HR SIZE="6">
-<A NAME="SEC107"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC106"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC108"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC108"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.2 Commands For Manipulating The History </H3>
-<!--docid::SEC107::-->
-<P>
-
-<DL COMPACT>
-<A NAME="IDX334"></A>
-<DT><CODE>accept-line (Newline or Return)</CODE>
-<DD><A NAME="IDX335"></A>
-Accept the line regardless of where the cursor is.
-If this line is
-non-empty, add it to the history list according to the setting of
-the <CODE>HISTCONTROL</CODE> and <CODE>HISTIGNORE</CODE> variables.
-If this line is a modified history line, then restore the history line
-to its original state.
-<P>
-
-<A NAME="IDX336"></A>
-<DT><CODE>previous-history (C-p)</CODE>
-<DD><A NAME="IDX337"></A>
-Move `back' through the history list, fetching the previous command.
-<P>
-
-<A NAME="IDX338"></A>
-<DT><CODE>next-history (C-n)</CODE>
-<DD><A NAME="IDX339"></A>
-Move `forward' through the history list, fetching the next command.
-<P>
-
-<A NAME="IDX340"></A>
-<DT><CODE>beginning-of-history (M-&#60;)</CODE>
-<DD><A NAME="IDX341"></A>
-Move to the first line in the history.
-<P>
-
-<A NAME="IDX342"></A>
-<DT><CODE>end-of-history (M-&#62;)</CODE>
-<DD><A NAME="IDX343"></A>
-Move to the end of the input history, i.e., the line currently
-being entered.
-<P>
-
-<A NAME="IDX344"></A>
-<DT><CODE>reverse-search-history (C-r)</CODE>
-<DD><A NAME="IDX345"></A>
-Search backward starting at the current line and moving `up' through
-the history as necessary.  This is an incremental search.
-<P>
-
-<A NAME="IDX346"></A>
-<DT><CODE>forward-search-history (C-s)</CODE>
-<DD><A NAME="IDX347"></A>
-Search forward starting at the current line and moving `down' through
-the the history as necessary.  This is an incremental search.
-<P>
-
-<A NAME="IDX348"></A>
-<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
-<DD><A NAME="IDX349"></A>
-Search backward starting at the current line and moving `up'
-through the history as necessary using a non-incremental search
-for a string supplied by the user.
-<P>
-
-<A NAME="IDX350"></A>
-<DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
-<DD><A NAME="IDX351"></A>
-Search forward starting at the current line and moving `down'
-through the the history as necessary using a non-incremental search
-for a string supplied by the user.
-<P>
-
-<A NAME="IDX352"></A>
-<DT><CODE>history-search-forward ()</CODE>
-<DD><A NAME="IDX353"></A>
-Search forward through the history for the string of characters
-between the start of the current line and the point.
-This is a non-incremental search.
-By default, this command is unbound.
-<P>
-
-<A NAME="IDX354"></A>
-<DT><CODE>history-search-backward ()</CODE>
-<DD><A NAME="IDX355"></A>
-Search backward through the history for the string of characters
-between the start of the current line and the point.  This
-is a non-incremental search.  By default, this command is unbound.
-<P>
-
-<A NAME="IDX356"></A>
-<DT><CODE>yank-nth-arg (M-C-y)</CODE>
-<DD><A NAME="IDX357"></A>
-Insert the first argument to the previous command (usually
-the second word on the previous line) at point.
-With an argument <VAR>n</VAR>,
-insert the <VAR>n</VAR>th word from the previous command (the words
-in the previous command begin with word 0).  A negative argument
-inserts the <VAR>n</VAR>th word from the end of the previous command.
-Once the argument <VAR>n</VAR> is computed, the argument is extracted
-as if the <SAMP>`!<VAR>n</VAR>'</SAMP> history expansion had been specified.
-<P>
-
-<A NAME="IDX358"></A>
-<DT><CODE>yank-last-arg (M-. or M-_)</CODE>
-<DD><A NAME="IDX359"></A>
-Insert last argument to the previous command (the last word of the
-previous history entry).  With an
-argument, behave exactly like <CODE>yank-nth-arg</CODE>.
-Successive calls to <CODE>yank-last-arg</CODE> move back through the history
-list, inserting the last argument of each line in turn.
-The history expansion facilities are used to extract the last argument,
-as if the <SAMP>`!$'</SAMP> history expansion had been specified.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Commands For Text"></A>
-<HR SIZE="6">
-<A NAME="SEC108"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC107"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC109"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC109"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.3 Commands For Changing Text </H3>
-<!--docid::SEC108::-->
-<P>
-
-<DL COMPACT>
-<A NAME="IDX360"></A>
-<DT><CODE>delete-char (C-d)</CODE>
-<DD><A NAME="IDX361"></A>
-Delete the character at point.  If point is at the
-beginning of the line, there are no characters in the line, and
-the last character typed was not bound to <CODE>delete-char</CODE>, then
-return EOF.
-<P>
-
-<A NAME="IDX362"></A>
-<DT><CODE>backward-delete-char (Rubout)</CODE>
-<DD><A NAME="IDX363"></A>
-Delete the character behind the cursor.  A numeric argument means
-to kill the characters instead of deleting them.
-<P>
-
-<A NAME="IDX364"></A>
-<DT><CODE>forward-backward-delete-char ()</CODE>
-<DD><A NAME="IDX365"></A>
-Delete the character under the cursor, unless the cursor is at the
-end of the line, in which case the character behind the cursor is
-deleted.  By default, this is not bound to a key.
-<P>
-
-<A NAME="IDX366"></A>
-<DT><CODE>quoted-insert (C-q or C-v)</CODE>
-<DD><A NAME="IDX367"></A>
-Add the next character typed to the line verbatim.  This is
-how to insert key sequences like <KBD>C-q</KBD>, for example.
-<P>
-
-<A NAME="IDX368"></A>
-<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE>
-<DD><A NAME="IDX369"></A>
-Insert yourself.
-<P>
-
-<A NAME="IDX370"></A>
-<DT><CODE>transpose-chars (C-t)</CODE>
-<DD><A NAME="IDX371"></A>
-Drag the character before the cursor forward over
-the character at the cursor, moving the
-cursor forward as well.  If the insertion point
-is at the end of the line, then this
-transposes the last two characters of the line.
-Negative arguments have no effect.
-<P>
-
-<A NAME="IDX372"></A>
-<DT><CODE>transpose-words (M-t)</CODE>
-<DD><A NAME="IDX373"></A>
-Drag the word before point past the word after point,
-moving point past that word as well.
-If the insertion point is at the end of the line, this transposes
-the last two words on the line.
-<P>
-
-<A NAME="IDX374"></A>
-<DT><CODE>upcase-word (M-u)</CODE>
-<DD><A NAME="IDX375"></A>
-Uppercase the current (or following) word.  With a negative argument,
-uppercase the previous word, but do not move the cursor.
-<P>
-
-<A NAME="IDX376"></A>
-<DT><CODE>downcase-word (M-l)</CODE>
-<DD><A NAME="IDX377"></A>
-Lowercase the current (or following) word.  With a negative argument,
-lowercase the previous word, but do not move the cursor.
-<P>
-
-<A NAME="IDX378"></A>
-<DT><CODE>capitalize-word (M-c)</CODE>
-<DD><A NAME="IDX379"></A>
-Capitalize the current (or following) word.  With a negative argument,
-capitalize the previous word, but do not move the cursor.
-<P>
-
-<A NAME="IDX380"></A>
-<DT><CODE>overwrite-mode ()</CODE>
-<DD><A NAME="IDX381"></A>
-Toggle overwrite mode.  With an explicit positive numeric argument,
-switches to overwrite mode.  With an explicit non-positive numeric
-argument, switches to insert mode.  This command affects only
-<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently.
-Each call to <CODE>readline()</CODE> starts in insert mode.
-<P>
-
-In overwrite mode, characters bound to <CODE>self-insert</CODE> replace
-the text at point rather than pushing the text to the right.
-Characters bound to <CODE>backward-delete-char</CODE> replace the character
-before point with a space.
-</P><P>
-
-By default, this command is unbound.
-</P><P>
-
-</DL>
-<P>
-
-<A NAME="Commands For Killing"></A>
-<HR SIZE="6">
-<A NAME="SEC109"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC108"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC110"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC110"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.4 Killing And Yanking </H3>
-<!--docid::SEC109::-->
-<P>
-
-<DL COMPACT>
-
-<A NAME="IDX382"></A>
-<DT><CODE>kill-line (C-k)</CODE>
-<DD><A NAME="IDX383"></A>
-Kill the text from point to the end of the line.
-<P>
-
-<A NAME="IDX384"></A>
-<DT><CODE>backward-kill-line (C-x Rubout)</CODE>
-<DD><A NAME="IDX385"></A>
-Kill backward to the beginning of the line.
-<P>
-
-<A NAME="IDX386"></A>
-<DT><CODE>unix-line-discard (C-u)</CODE>
-<DD><A NAME="IDX387"></A>
-Kill backward from the cursor to the beginning of the current line.
-<P>
-
-<A NAME="IDX388"></A>
-<DT><CODE>kill-whole-line ()</CODE>
-<DD><A NAME="IDX389"></A>
-Kill all characters on the current line, no matter where point is.
-By default, this is unbound.
-<P>
-
-<A NAME="IDX390"></A>
-<DT><CODE>kill-word (M-d)</CODE>
-<DD><A NAME="IDX391"></A>
-Kill from point to the end of the current word, or if between
-words, to the end of the next word.
-Word boundaries are the same as <CODE>forward-word</CODE>.
-<P>
-
-<A NAME="IDX392"></A>
-<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE>
-<DD><A NAME="IDX393"></A>
-Kill the word behind point.
-Word boundaries are the same as <CODE>backward-word</CODE>.
-<P>
-
-<A NAME="IDX394"></A>
-<DT><CODE>unix-word-rubout (C-w)</CODE>
-<DD><A NAME="IDX395"></A>
-Kill the word behind point, using white space as a word boundary.
-The killed text is saved on the kill-ring.
-<P>
-
-<A NAME="IDX396"></A>
-<DT><CODE>unix-filename-rubout ()</CODE>
-<DD><A NAME="IDX397"></A>
-Kill the word behind point, using white space and the slash character
-as the word boundaries.
-The killed text is saved on the kill-ring.
-<P>
-
-<A NAME="IDX398"></A>
-<DT><CODE>delete-horizontal-space ()</CODE>
-<DD><A NAME="IDX399"></A>
-Delete all spaces and tabs around point.  By default, this is unbound.
-<P>
-
-<A NAME="IDX400"></A>
-<DT><CODE>kill-region ()</CODE>
-<DD><A NAME="IDX401"></A>
-Kill the text in the current region.
-By default, this command is unbound.
-<P>
-
-<A NAME="IDX402"></A>
-<DT><CODE>copy-region-as-kill ()</CODE>
-<DD><A NAME="IDX403"></A>
-Copy the text in the region to the kill buffer, so it can be yanked
-right away.  By default, this command is unbound.
-<P>
-
-<A NAME="IDX404"></A>
-<DT><CODE>copy-backward-word ()</CODE>
-<DD><A NAME="IDX405"></A>
-Copy the word before point to the kill buffer.
-The word boundaries are the same as <CODE>backward-word</CODE>.
-By default, this command is unbound.
-<P>
-
-<A NAME="IDX406"></A>
-<DT><CODE>copy-forward-word ()</CODE>
-<DD><A NAME="IDX407"></A>
-Copy the word following point to the kill buffer.
-The word boundaries are the same as <CODE>forward-word</CODE>.
-By default, this command is unbound.
-<P>
-
-<A NAME="IDX408"></A>
-<DT><CODE>yank (C-y)</CODE>
-<DD><A NAME="IDX409"></A>
-Yank the top of the kill ring into the buffer at point.
-<P>
-
-<A NAME="IDX410"></A>
-<DT><CODE>yank-pop (M-y)</CODE>
-<DD><A NAME="IDX411"></A>
-Rotate the kill-ring, and yank the new top.  You can only do this if
-the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
-</DL>
-<P>
-
-<A NAME="Numeric Arguments"></A>
-<HR SIZE="6">
-<A NAME="SEC110"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC109"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC111"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC111"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.5 Specifying Numeric Arguments </H3>
-<!--docid::SEC110::-->
-<DL COMPACT>
-
-<A NAME="IDX412"></A>
-<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
-<DD><A NAME="IDX413"></A>
-Add this digit to the argument already accumulating, or start a new
-argument.  <KBD>M--</KBD> starts a negative argument.
-<P>
-
-<A NAME="IDX414"></A>
-<DT><CODE>universal-argument ()</CODE>
-<DD><A NAME="IDX415"></A>
-This is another way to specify an argument.
-If this command is followed by one or more digits, optionally with a
-leading minus sign, those digits define the argument.
-If the command is followed by digits, executing <CODE>universal-argument</CODE>
-again ends the numeric argument, but is otherwise ignored.
-As a special case, if this command is immediately followed by a
-character that is neither a digit or minus sign, the argument count
-for the next command is multiplied by four.
-The argument count is initially one, so executing this function the
-first time makes the argument count four, a second time makes the
-argument count sixteen, and so on.
-By default, this is not bound to a key.
-</DL>
-<P>
-
-<A NAME="Commands For Completion"></A>
-<HR SIZE="6">
-<A NAME="SEC111"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC110"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC112"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC112"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.6 Letting Readline Type For You </H3>
-<!--docid::SEC111::-->
-<P>
-
-<DL COMPACT>
-<A NAME="IDX416"></A>
-<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
-<DD><A NAME="IDX417"></A>
-Attempt to perform completion on the text before point.
-The actual completion performed is application-specific.
-Bash attempts completion treating the text as a variable (if the
-text begins with <SAMP>`$'</SAMP>), username (if the text begins with
-<SAMP>`~'</SAMP>), hostname (if the text begins with <SAMP>`@'</SAMP>), or
-command (including aliases and functions) in turn.  If none 
-of these produces a match, filename completion is attempted.
-<P>
-
-<A NAME="IDX418"></A>
-<DT><CODE>possible-completions (M-?)</CODE>
-<DD><A NAME="IDX419"></A>
-List the possible completions of the text before point.
-<P>
-
-<A NAME="IDX420"></A>
-<DT><CODE>insert-completions (M-*)</CODE>
-<DD><A NAME="IDX421"></A>
-Insert all completions of the text before point that would have
-been generated by <CODE>possible-completions</CODE>.
-<P>
-
-<A NAME="IDX422"></A>
-<DT><CODE>menu-complete ()</CODE>
-<DD><A NAME="IDX423"></A>
-Similar to <CODE>complete</CODE>, but replaces the word to be completed
-with a single match from the list of possible completions.
-Repeated execution of <CODE>menu-complete</CODE> steps through the list
-of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung
-(subject to the setting of <CODE>bell-style</CODE>)
-and the original text is restored.
-An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list
-of matches; a negative argument may be used to move backward
-through the list.
-This command is intended to be bound to <KBD>TAB</KBD>, but is unbound
-by default.
-<P>
-
-<A NAME="IDX424"></A>
-<DT><CODE>delete-char-or-list ()</CODE>
-<DD><A NAME="IDX425"></A>
-Deletes the character under the cursor if not at the beginning or
-end of the line (like <CODE>delete-char</CODE>).
-If at the end of the line, behaves identically to
-<CODE>possible-completions</CODE>.
-This command is unbound by default.
-<P>
-
-<A NAME="IDX426"></A>
-<DT><CODE>complete-filename (M-/)</CODE>
-<DD><A NAME="IDX427"></A>
-Attempt filename completion on the text before point.
-<P>
-
-<A NAME="IDX428"></A>
-<DT><CODE>possible-filename-completions (C-x /)</CODE>
-<DD><A NAME="IDX429"></A>
-List the possible completions of the text before point,
-treating it as a filename.
-<P>
-
-<A NAME="IDX430"></A>
-<DT><CODE>complete-username (M-~)</CODE>
-<DD><A NAME="IDX431"></A>
-Attempt completion on the text before point, treating
-it as a username.
-<P>
-
-<A NAME="IDX432"></A>
-<DT><CODE>possible-username-completions (C-x ~)</CODE>
-<DD><A NAME="IDX433"></A>
-List the possible completions of the text before point,
-treating it as a username.
-<P>
-
-<A NAME="IDX434"></A>
-<DT><CODE>complete-variable (M-$)</CODE>
-<DD><A NAME="IDX435"></A>
-Attempt completion on the text before point, treating
-it as a shell variable.
-<P>
-
-<A NAME="IDX436"></A>
-<DT><CODE>possible-variable-completions (C-x $)</CODE>
-<DD><A NAME="IDX437"></A>
-List the possible completions of the text before point,
-treating it as a shell variable.
-<P>
-
-<A NAME="IDX438"></A>
-<DT><CODE>complete-hostname (M-@)</CODE>
-<DD><A NAME="IDX439"></A>
-Attempt completion on the text before point, treating
-it as a hostname.
-<P>
-
-<A NAME="IDX440"></A>
-<DT><CODE>possible-hostname-completions (C-x @)</CODE>
-<DD><A NAME="IDX441"></A>
-List the possible completions of the text before point,
-treating it as a hostname.
-<P>
-
-<A NAME="IDX442"></A>
-<DT><CODE>complete-command (M-!)</CODE>
-<DD><A NAME="IDX443"></A>
-Attempt completion on the text before point, treating
-it as a command name.  Command completion attempts to
-match the text against aliases, reserved words, shell
-functions, shell builtins, and finally executable filenames,
-in that order.
-<P>
-
-<A NAME="IDX444"></A>
-<DT><CODE>possible-command-completions (C-x !)</CODE>
-<DD><A NAME="IDX445"></A>
-List the possible completions of the text before point,
-treating it as a command name.
-<P>
-
-<A NAME="IDX446"></A>
-<DT><CODE>dynamic-complete-history (M-<KBD>TAB</KBD>)</CODE>
-<DD><A NAME="IDX447"></A>
-Attempt completion on the text before point, comparing
-the text against lines from the history list for possible
-completion matches.
-<P>
-
-<A NAME="IDX448"></A>
-<DT><CODE>complete-into-braces (M-{)</CODE>
-<DD><A NAME="IDX449"></A>
-Perform filename completion and insert the list of possible completions
-enclosed within braces so the list is available to the shell
-(see section <A HREF="b.html#SEC28">3.5.1 Brace Expansion</A>).
-<P>
-
-</DL>
-<P>
-
-<A NAME="Keyboard Macros"></A>
-<HR SIZE="6">
-<A NAME="SEC112"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC111"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC113"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC113"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.7 Keyboard Macros </H3>
-<!--docid::SEC112::-->
-<DL COMPACT>
-
-<A NAME="IDX450"></A>
-<DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD><A NAME="IDX451"></A>
-Begin saving the characters typed into the current keyboard macro.
-<P>
-
-<A NAME="IDX452"></A>
-<DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD><A NAME="IDX453"></A>
-Stop saving the characters typed into the current keyboard macro
-and save the definition.
-<P>
-
-<A NAME="IDX454"></A>
-<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD><A NAME="IDX455"></A>
-Re-execute the last keyboard macro defined, by making the characters
-in the macro appear as if typed at the keyboard.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Miscellaneous Commands"></A>
-<HR SIZE="6">
-<A NAME="SEC113"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC112"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC105"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 8.4.8 Some Miscellaneous Commands </H3>
-<!--docid::SEC113::-->
-<DL COMPACT>
-
-<A NAME="IDX456"></A>
-<DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD><A NAME="IDX457"></A>
-Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
-any bindings or variable assignments found there.
-<P>
-
-<A NAME="IDX458"></A>
-<DT><CODE>abort (C-g)</CODE>
-<DD><A NAME="IDX459"></A>
-Abort the current editing command and
-ring the terminal's bell (subject to the setting of
-<CODE>bell-style</CODE>).
-<P>
-
-<A NAME="IDX460"></A>
-<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
-<DD><A NAME="IDX461"></A>
-If the metafied character <VAR>x</VAR> is lowercase, run the command
-that is bound to the corresponding uppercase character.
-<P>
-
-<A NAME="IDX462"></A>
-<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
-<DD><A NAME="IDX463"></A>
-Metafy the next character typed.  This is for keyboards
-without a meta key.  Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
-<KBD>M-f</KBD>.
-<P>
-
-<A NAME="IDX464"></A>
-<DT><CODE>undo (C-_ or C-x C-u)</CODE>
-<DD><A NAME="IDX465"></A>
-Incremental undo, separately remembered for each line.
-<P>
-
-<A NAME="IDX466"></A>
-<DT><CODE>revert-line (M-r)</CODE>
-<DD><A NAME="IDX467"></A>
-Undo all changes made to this line.  This is like executing the <CODE>undo</CODE>
-command enough times to get back to the beginning.
-<P>
-
-<A NAME="IDX468"></A>
-<DT><CODE>tilde-expand (M-&#38;)</CODE>
-<DD><A NAME="IDX469"></A>
-Perform tilde expansion on the current word.
-<P>
-
-<A NAME="IDX470"></A>
-<DT><CODE>set-mark (C-@)</CODE>
-<DD><A NAME="IDX471"></A>
-Set the mark to the point.  If a
-numeric argument is supplied, the mark is set to that position.
-<P>
-
-<A NAME="IDX472"></A>
-<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD><A NAME="IDX473"></A>
-Swap the point with the mark.  The current cursor position is set to
-the saved position, and the old cursor position is saved as the mark.
-<P>
-
-<A NAME="IDX474"></A>
-<DT><CODE>character-search (C-])</CODE>
-<DD><A NAME="IDX475"></A>
-A character is read and point is moved to the next occurrence of that
-character.  A negative count searches for previous occurrences.
-<P>
-
-<A NAME="IDX476"></A>
-<DT><CODE>character-search-backward (M-C-])</CODE>
-<DD><A NAME="IDX477"></A>
-A character is read and point is moved to the previous occurrence
-of that character.  A negative count searches for subsequent
-occurrences.
-<P>
-
-<A NAME="IDX478"></A>
-<DT><CODE>insert-comment (M-#)</CODE>
-<DD><A NAME="IDX479"></A>
-Without a numeric argument, the value of the <CODE>comment-begin</CODE>
-variable is inserted at the beginning of the current line.
-If a numeric argument is supplied, this command acts as a toggle:  if
-the characters at the beginning of the line do not match the value
-of <CODE>comment-begin</CODE>, the value is inserted, otherwise
-the characters in <CODE>comment-begin</CODE> are deleted from the beginning of
-the line.
-In either case, the line is accepted as if a newline had been typed.
-The default value of <CODE>comment-begin</CODE> causes this command
-to make the current line a shell comment.
-If a numeric argument causes the comment character to be removed, the line
-will be executed by the shell.
-<P>
-
-<A NAME="IDX480"></A>
-<DT><CODE>dump-functions ()</CODE>
-<DD><A NAME="IDX481"></A>
-Print all of the functions and their key bindings to the
-Readline output stream.  If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an <VAR>inputrc</VAR> file.  This command is unbound by default.
-<P>
-
-<A NAME="IDX482"></A>
-<DT><CODE>dump-variables ()</CODE>
-<DD><A NAME="IDX483"></A>
-Print all of the settable variables and their values to the
-Readline output stream.  If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an <VAR>inputrc</VAR> file.  This command is unbound by default.
-<P>
-
-<A NAME="IDX484"></A>
-<DT><CODE>dump-macros ()</CODE>
-<DD><A NAME="IDX485"></A>
-Print all of the Readline key sequences bound to macros and the
-strings they output.  If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an <VAR>inputrc</VAR> file.  This command is unbound by default.
-<P>
-
-<A NAME="IDX486"></A>
-<DT><CODE>glob-complete-word (M-g)</CODE>
-<DD><A NAME="IDX487"></A>
-The word before point is treated as a pattern for pathname expansion,
-with an asterisk implicitly appended.  This pattern is used to
-generate a list of matching file names for possible completions.
-<P>
-
-<A NAME="IDX488"></A>
-<DT><CODE>glob-expand-word (C-x *)</CODE>
-<DD><A NAME="IDX489"></A>
-The word before point is treated as a pattern for pathname expansion,
-and the list of matching file names is inserted, replacing the word.
-If a numeric argument is supplied, a <SAMP>`*'</SAMP> is appended before
-pathname expansion.
-<P>
-
-<A NAME="IDX490"></A>
-<DT><CODE>glob-list-expansions (C-x g)</CODE>
-<DD><A NAME="IDX491"></A>
-The list of expansions that would have been generated by
-<CODE>glob-expand-word</CODE> is displayed, and the line is redrawn.
-If a numeric argument is supplied, a <SAMP>`*'</SAMP> is appended before
-pathname expansion.
-<P>
-
-<A NAME="IDX492"></A>
-<DT><CODE>display-shell-version (C-x C-v)</CODE>
-<DD><A NAME="IDX493"></A>
-Display version information about the current instance of Bash.
-<P>
-
-<A NAME="IDX494"></A>
-<DT><CODE>shell-expand-line (M-C-e)</CODE>
-<DD><A NAME="IDX495"></A>
-Expand the line as the shell does.
-This performs alias and history expansion as well as all of the shell
-word expansions (see section <A HREF="b.html#SEC27">3.5 Shell Expansions</A>).
-<P>
-
-<A NAME="IDX496"></A>
-<DT><CODE>history-expand-line (M-^)</CODE>
-<DD><A NAME="IDX497"></A>
-Perform history expansion on the current line.
-<P>
-
-<A NAME="IDX498"></A>
-<DT><CODE>magic-space ()</CODE>
-<DD><A NAME="IDX499"></A>
-Perform history expansion on the current line and insert a space
-(see section <A HREF="b.html#SEC120">9.3 History Expansion</A>).
-<P>
-
-<A NAME="IDX500"></A>
-<DT><CODE>alias-expand-line ()</CODE>
-<DD><A NAME="IDX501"></A>
-Perform alias expansion on the current line (see section <A HREF="b.html#SEC82">6.6 Aliases</A>).
-<P>
-
-<A NAME="IDX502"></A>
-<DT><CODE>history-and-alias-expand-line ()</CODE>
-<DD><A NAME="IDX503"></A>
-Perform history and alias expansion on the current line.
-<P>
-
-<A NAME="IDX504"></A>
-<DT><CODE>insert-last-argument (M-. or M-_)</CODE>
-<DD><A NAME="IDX505"></A>
-A synonym for <CODE>yank-last-arg</CODE>.
-<P>
-
-<A NAME="IDX506"></A>
-<DT><CODE>operate-and-get-next (C-o)</CODE>
-<DD><A NAME="IDX507"></A>
-Accept the current line for execution and fetch the next line
-relative to the current line from the history for editing.  Any
-argument is ignored.
-<P>
-
-<A NAME="IDX508"></A>
-<DT><CODE>edit-and-execute-command (C-xC-e)</CODE>
-<DD><A NAME="IDX509"></A>
-Invoke an editor on the current command line, and execute the result as shell
-commands.
-Bash attempts to invoke
-<CODE>$VISUAL</CODE>, <CODE>$EDITOR</CODE>, and <CODE>emacs</CODE>
-as the editor, in that order.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Readline vi Mode"></A>
-<HR SIZE="6">
-<A NAME="SEC114"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC113"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC115"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC115"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.5 Readline vi Mode </H2>
-<!--docid::SEC114::-->
-<P>
-
-While the Readline library does not have a full set of <CODE>vi</CODE>
-editing functions, it does contain enough to allow simple editing
-of the line.  The Readline <CODE>vi</CODE> mode behaves as specified in
-the POSIX 1003.2 standard.
-</P><P>
-
-In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
-editing modes, use the <SAMP>`set -o emacs'</SAMP> and <SAMP>`set -o vi'</SAMP>
-commands (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-The Readline default is <CODE>emacs</CODE> mode.
-</P><P>
-
-When you enter a line in <CODE>vi</CODE> mode, you are already placed in
-`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>.  Pressing <KBD>ESC</KBD>
-switches you into `command' mode, where you can edit the text of the
-line with the standard <CODE>vi</CODE> movement keys, move to previous
-history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and
-so forth.
-</P><P>
-
-<A NAME="Programmable Completion"></A>
-<HR SIZE="6">
-<A NAME="SEC115"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC114"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC116"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC116"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.6 Programmable Completion </H2>
-<!--docid::SEC115::-->
-<P>
-
-When word completion is attempted for an argument to a command for
-which a completion specification (a <VAR>compspec</VAR>) has been defined
-using the <CODE>complete</CODE> builtin (see section <A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A>),
-the programmable completion facilities are invoked. 
-</P><P>
-
-First, the command name is identified.
-If a compspec has been defined for that command, the
-compspec is used to generate the list of possible completions for the word.
-If the command word is a full pathname, a compspec for the full
-pathname is searched for first.
-If no compspec is found for the full pathname, an attempt is made to
-find a compspec for the portion following the final slash.
-</P><P>
-
-Once a compspec has been found, it is used to generate the list of
-matching words.
-If a compspec is not found, the default Bash completion
-described above (see section <A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A>) is performed.
-</P><P>
-
-First, the actions specified by the compspec are used.
-Only matches which are prefixed by the word being completed are
-returned.
-When the <SAMP>`-f'</SAMP> or <SAMP>`-d'</SAMP> option is used for filename or
-directory name completion, the shell variable <CODE>FIGNORE</CODE> is
-used to filter the matches.
-See section <A HREF="b.html#SEC65">5.2 Bash Variables</A>, for a description of <CODE>FIGNORE</CODE>.
-</P><P>
-
-Any completions specified by a filename expansion pattern to the
-<SAMP>`-G'</SAMP> option are generated next.
-The words generated by the pattern need not match the word being completed.
-The <CODE>GLOBIGNORE</CODE> shell variable is not used to filter the matches,
-but the <CODE>FIGNORE</CODE> shell variable is used.
-</P><P>
-
-Next, the string specified as the argument to the <SAMP>`-W'</SAMP> option
-is considered.
-The string is first split using the characters in the <CODE>IFS</CODE>
-special variable as delimiters.
-Shell quoting is honored.
-Each word is then expanded using
-brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, and arithmetic expansion,
-as described above (see section <A HREF="b.html#SEC27">3.5 Shell Expansions</A>).
-The results are split using the rules described above
-(see section <A HREF="b.html#SEC34">3.5.7 Word Splitting</A>).
-The results of the expansion are prefix-matched against the word being
-completed, and the matching words become the possible completions.
-</P><P>
-
-After these matches have been generated, any shell function or command
-specified with the <SAMP>`-F'</SAMP> and <SAMP>`-C'</SAMP> options is invoked.
-When the command or function is invoked, the <CODE>COMP_LINE</CODE>,
-<CODE>COMP_POINT</CODE>, <CODE>COMP_KEY</CODE>, and <CODE>COMP_TYPE</CODE> variables are
-assigned values as described above (see section <A HREF="b.html#SEC65">5.2 Bash Variables</A>).
-If a shell function is being invoked, the <CODE>COMP_WORDS</CODE> and
-<CODE>COMP_CWORD</CODE> variables are also set.
-When the function or command is invoked, the first argument is the
-name of the command whose arguments are being completed, the
-second argument is the word being completed, and the third argument
-is the word preceding the word being completed on the current command line.
-No filtering of the generated completions against the word being completed
-is performed; the function or command has complete freedom in generating
-the matches.
-</P><P>
-
-Any function specified with <SAMP>`-F'</SAMP> is invoked first.
-The function may use any of the shell facilities, including the
-<CODE>compgen</CODE> builtin described below
-(see section <A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A>), to generate the matches.
-It must put the possible completions in the <CODE>COMPREPLY</CODE> array
-variable.
-</P><P>
-
-Next, any command specified with the <SAMP>`-C'</SAMP> option is invoked
-in an environment equivalent to command substitution.
-It should print a list of completions, one per line, to
-the standard output.
-Backslash may be used to escape a newline, if necessary.
-</P><P>
-
-After all of the possible completions are generated, any filter
-specified with the <SAMP>`-X'</SAMP> option is applied to the list.
-The filter is a pattern as used for pathname expansion; a <SAMP>`&#38;'</SAMP>
-in the pattern is replaced with the text of the word being completed.
-A literal <SAMP>`&#38;'</SAMP> may be escaped with a backslash; the backslash
-is removed before attempting a match.
-Any completion that matches the pattern will be removed from the list.
-A leading <SAMP>`!'</SAMP> negates the pattern; in this case any completion
-not matching the pattern will be removed.
-</P><P>
-
-Finally, any prefix and suffix specified with the <SAMP>`-P'</SAMP> and <SAMP>`-S'</SAMP>
-options are added to each member of the completion list, and the result is
-returned to the Readline completion code as the list of possible
-completions.
-</P><P>
-
-If the previously-applied actions do not generate any matches, and the
-<SAMP>`-o dirnames'</SAMP> option was supplied to <CODE>complete</CODE> when the
-compspec was defined, directory name completion is attempted. 
-</P><P>
-
-If the <SAMP>`-o plusdirs'</SAMP> option was supplied to <CODE>complete</CODE> when
-the compspec was defined, directory name completion is attempted and any
-matches are added to the results of the other actions.
-</P><P>
-
-By default, if a compspec is found, whatever it generates is returned to
-the completion code as the full set of possible completions.
-The default Bash completions are not attempted, and the Readline default
-of filename completion is disabled.
-If the <SAMP>`-o bashdefault'</SAMP> option was supplied to <CODE>complete</CODE> when
-the compspec was defined, the default Bash completions are attempted
-if the compspec generates no matches.
-If the <SAMP>`-o default'</SAMP> option was supplied to <CODE>complete</CODE> when the
-compspec was defined, Readline's default completion will be performed
-if the compspec (and, if attempted, the default Bash completions)
-generate no matches.
-</P><P>
-
-When a compspec indicates that directory name completion is desired,
-the programmable completion functions force Readline to append a slash
-to completed names which are symbolic links to directories, subject to
-the value of the <VAR>mark-directories</VAR> Readline variable, regardless
-of the setting of the <VAR>mark-symlinked-directories</VAR> Readline variable.
-</P><P>
-
-<A NAME="Programmable Completion Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC116"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC115"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC93"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 8.7 Programmable Completion Builtins </H2>
-<!--docid::SEC116::-->
-<P>
-
-Two builtin commands are available to manipulate the programmable completion
-facilities.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>compgen</CODE>
-<DD><A NAME="IDX510"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>compgen [<VAR>option</VAR>] [<VAR>word</VAR>]</CODE>
-</pre></td></tr></table><P>
-
-Generate possible completion matches for <VAR>word</VAR> according to
-the <VAR>option</VAR>s, which may be any option accepted by the
-<CODE>complete</CODE>
-builtin with the exception of <SAMP>`-p'</SAMP> and <SAMP>`-r'</SAMP>, and write
-the matches to the standard output.
-When using the <SAMP>`-F'</SAMP> or <SAMP>`-C'</SAMP> options, the various shell variables
-set by the programmable completion facilities, while available, will not
-have useful values.
-</P><P>
-
-The matches will be generated in the same way as if the programmable
-completion code had generated them directly from a completion specification
-with the same flags.
-If <VAR>word</VAR> is specified, only those completions matching <VAR>word</VAR>
-will be displayed.
-</P><P>
-
-The return value is true unless an invalid option is supplied, or no
-matches were generated.
-</P><P>
-
-<DT><CODE>complete</CODE>
-<DD><A NAME="IDX511"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>complete [-abcdefgjksuv] [-o <VAR>comp-option</VAR>] [-A <VAR>action</VAR>] [-G <VAR>globpat</VAR>] [-W <VAR>wordlist</VAR>]
-[-F <VAR>function</VAR>] [-C <VAR>command</VAR>] [-X <VAR>filterpat</VAR>]
-[-P <VAR>prefix</VAR>] [-S <VAR>suffix</VAR>] <VAR>name</VAR> [<VAR>name</VAR> <small>...</small>]</CODE>
-<CODE>complete -pr [<VAR>name</VAR> <small>...</small>]</CODE>
-</pre></td></tr></table><P>
-
-Specify how arguments to each <VAR>name</VAR> should be completed.
-If the <SAMP>`-p'</SAMP> option is supplied, or if no options are supplied, existing
-completion specifications are printed in a way that allows them to be
-reused as input.
-The <SAMP>`-r'</SAMP> option removes a completion specification for
-each <VAR>name</VAR>, or, if no <VAR>name</VAR>s are supplied, all
-completion specifications.
-</P><P>
-
-The process of applying these completion specifications when word completion
-is attempted is described above (see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-</P><P>
-
-Other options, if specified, have the following meanings.
-The arguments to the <SAMP>`-G'</SAMP>, <SAMP>`-W'</SAMP>, and <SAMP>`-X'</SAMP> options
-(and, if necessary, the <SAMP>`-P'</SAMP> and <SAMP>`-S'</SAMP> options)
-should be quoted to protect them from expansion before the
-<CODE>complete</CODE> builtin is invoked.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-o <VAR>comp-option</VAR></CODE>
-<DD>The <VAR>comp-option</VAR> controls several aspects of the compspec's behavior
-beyond the simple generation of completions.
-<VAR>comp-option</VAR> may be one of: 
-<P>
-
-<DL COMPACT>
-
-<DT><CODE>bashdefault</CODE>
-<DD>Perform the rest of the default Bash completions if the compspec
-generates no matches.
-<P>
-
-<DT><CODE>default</CODE>
-<DD>Use Readline's default filename completion if the compspec generates
-no matches.
-<P>
-
-<DT><CODE>dirnames</CODE>
-<DD>Perform directory name completion if the compspec generates no matches.
-<P>
-
-<DT><CODE>filenames</CODE>
-<DD>Tell Readline that the compspec generates filenames, so it can perform any
-filename-specific processing (like adding a slash to directory names or
-suppressing trailing spaces).  This option is intended to be used with
-shell functions specified with <SAMP>`-F'</SAMP>.
-<P>
-
-<DT><CODE>nospace</CODE>
-<DD>Tell Readline not to append a space (the default) to words completed at
-the end of the line.
-<P>
-
-<DT><CODE>plusdirs</CODE>
-<DD>After any matches defined by the compspec are generated, 
-directory name completion is attempted and any
-matches are added to the results of the other actions.
-<P>
-
-</DL>
-<P>
-
-<DT><CODE>-A <VAR>action</VAR></CODE>
-<DD>The <VAR>action</VAR> may be one of the following to generate a list of possible
-completions:
-<P>
-
-<DL COMPACT>
-<DT><CODE>alias</CODE>
-<DD>Alias names.  May also be specified as <SAMP>`-a'</SAMP>.
-<P>
-
-<DT><CODE>arrayvar</CODE>
-<DD>Array variable names.
-<P>
-
-<DT><CODE>binding</CODE>
-<DD>Readline key binding names (see section <A HREF="b.html#SEC105">8.4 Bindable Readline Commands</A>).
-<P>
-
-<DT><CODE>builtin</CODE>
-<DD>Names of shell builtin commands.  May also be specified as <SAMP>`-b'</SAMP>.
-<P>
-
-<DT><CODE>command</CODE>
-<DD>Command names.  May also be specified as <SAMP>`-c'</SAMP>.
-<P>
-
-<DT><CODE>directory</CODE>
-<DD>Directory names.  May also be specified as <SAMP>`-d'</SAMP>.
-<P>
-
-<DT><CODE>disabled</CODE>
-<DD>Names of disabled shell builtins.
-<P>
-
-<DT><CODE>enabled</CODE>
-<DD>Names of enabled shell builtins.
-<P>
-
-<DT><CODE>export</CODE>
-<DD>Names of exported shell variables.  May also be specified as <SAMP>`-e'</SAMP>.
-<P>
-
-<DT><CODE>file</CODE>
-<DD>File names.  May also be specified as <SAMP>`-f'</SAMP>.
-<P>
-
-<DT><CODE>function</CODE>
-<DD>Names of shell functions.
-<P>
-
-<DT><CODE>group</CODE>
-<DD>Group names.  May also be specified as <SAMP>`-g'</SAMP>.
-<P>
-
-<DT><CODE>helptopic</CODE>
-<DD>Help topics as accepted by the <CODE>help</CODE> builtin (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<DT><CODE>hostname</CODE>
-<DD>Hostnames, as taken from the file specified by the
-<CODE>HOSTFILE</CODE> shell variable (see section <A HREF="b.html#SEC65">5.2 Bash Variables</A>).
-<P>
-
-<DT><CODE>job</CODE>
-<DD>Job names, if job control is active.  May also be specified as <SAMP>`-j'</SAMP>.
-<P>
-
-<DT><CODE>keyword</CODE>
-<DD>Shell reserved words.  May also be specified as <SAMP>`-k'</SAMP>.
-<P>
-
-<DT><CODE>running</CODE>
-<DD>Names of running jobs, if job control is active.
-<P>
-
-<DT><CODE>service</CODE>
-<DD>Service names.  May also be specified as <SAMP>`-s'</SAMP>.
-<P>
-
-<DT><CODE>setopt</CODE>
-<DD>Valid arguments for the <SAMP>`-o'</SAMP> option to the <CODE>set</CODE> builtin
-(see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<DT><CODE>shopt</CODE>
-<DD>Shell option names as accepted by the <CODE>shopt</CODE> builtin
-(see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<DT><CODE>signal</CODE>
-<DD>Signal names.
-<P>
-
-<DT><CODE>stopped</CODE>
-<DD>Names of stopped jobs, if job control is active.
-<P>
-
-<DT><CODE>user</CODE>
-<DD>User names.  May also be specified as <SAMP>`-u'</SAMP>.
-<P>
-
-<DT><CODE>variable</CODE>
-<DD>Names of all shell variables.  May also be specified as <SAMP>`-v'</SAMP>.
-</DL>
-<P>
-
-<DT><CODE>-G <VAR>globpat</VAR></CODE>
-<DD>The filename expansion pattern <VAR>globpat</VAR> is expanded to generate
-the possible completions.
-<P>
-
-<DT><CODE>-W <VAR>wordlist</VAR></CODE>
-<DD>The <VAR>wordlist</VAR> is split using the characters in the
-<CODE>IFS</CODE> special variable as delimiters, and each resultant word
-is expanded.
-The possible completions are the members of the resultant list which
-match the word being completed.
-<P>
-
-<DT><CODE>-C <VAR>command</VAR></CODE>
-<DD><VAR>command</VAR> is executed in a subshell environment, and its output is
-used as the possible completions.
-<P>
-
-<DT><CODE>-F <VAR>function</VAR></CODE>
-<DD>The shell function <VAR>function</VAR> is executed in the current shell
-environment.
-When it finishes, the possible completions are retrieved from the value
-of the <CODE>COMPREPLY</CODE> array variable.
-<P>
-
-<DT><CODE>-X <VAR>filterpat</VAR></CODE>
-<DD><VAR>filterpat</VAR> is a pattern as used for filename expansion.
-It is applied to the list of possible completions generated by the
-preceding options and arguments, and each completion matching
-<VAR>filterpat</VAR> is removed from the list.
-A leading <SAMP>`!'</SAMP> in <VAR>filterpat</VAR> negates the pattern; in this
-case, any completion not matching <VAR>filterpat</VAR> is removed.
-<P>
-
-<DT><CODE>-P <VAR>prefix</VAR></CODE>
-<DD><VAR>prefix</VAR> is added at the beginning of each possible completion
-after all other options have been applied.
-<P>
-
-<DT><CODE>-S <VAR>suffix</VAR></CODE>
-<DD><VAR>suffix</VAR> is appended to each possible completion
-after all other options have been applied.
-</DL>
-<P>
-
-The return value is true unless an invalid option is supplied, an option
-other than <SAMP>`-p'</SAMP> or <SAMP>`-r'</SAMP> is supplied without a <VAR>name</VAR>
-argument, an attempt is made to remove a completion specification for
-a <VAR>name</VAR> for which no specification exists, or
-an error occurs adding a completion specification.
-</P><P>
-
-</DL>
-<A NAME="IDX512"></A>
-<P>
-
-<A NAME="Using History Interactively"></A>
-<HR SIZE="6">
-<A NAME="SEC117"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC116"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC118"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 9. Using History Interactively </H1>
-<!--docid::SEC117::-->
-<P>
-
-This chapter describes how to use the GNU History Library
-interactively, from a user's standpoint.
-It should be considered a user's guide.
-For information on using the GNU History Library in other programs,
-see the GNU Readline Library Manual.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC118">9.1 Bash History Facilities</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Bash lets you manipulate your command
-                               history.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC119">9.2 Bash History Builtins</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The Bash builtin commands that manipulate
-                               the command history.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC120">9.3 History Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What it feels like using History as a user.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Bash History Facilities"></A>
-<HR SIZE="6">
-<A NAME="SEC118"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC119"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 9.1 Bash History Facilities </H2>
-<!--docid::SEC118::-->
-<P>
-
-When the <SAMP>`-o history'</SAMP> option to the <CODE>set</CODE> builtin
-is enabled (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>),
-the shell provides access to the <EM>command history</EM>,
-the list of commands previously typed.
-The value of the <CODE>HISTSIZE</CODE> shell variable is used as the
-number of commands to save in a history list.
-The text of the last <CODE>$HISTSIZE</CODE>
-commands (default 500) is saved.
-The shell stores each command in the history list prior to
-parameter and variable expansion
-but after history expansion is performed, subject to the
-values of the shell variables
-<CODE>HISTIGNORE</CODE> and <CODE>HISTCONTROL</CODE>.
-</P><P>
-
-When the shell starts up, the history is initialized from the
-file named by the <CODE>HISTFILE</CODE> variable (default <TT>`~/.bash_history'</TT>).
-The file named by the value of <CODE>HISTFILE</CODE> is truncated, if
-necessary, to contain no more than the number of lines specified by
-the value of the <CODE>HISTFILESIZE</CODE> variable.
-When an interactive shell exits, the last
-<CODE>$HISTSIZE</CODE> lines are copied from the history list to the file
-named by <CODE>$HISTFILE</CODE>.
-If the <CODE>histappend</CODE> shell option is set (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>),
-the lines are appended to the history file,
-otherwise the history file is overwritten.
-If <CODE>HISTFILE</CODE>
-is unset, or if the history file is unwritable, the history is
-not saved.  After saving the history, the history file is truncated
-to contain no more than <CODE>$HISTFILESIZE</CODE>
-lines.  If <CODE>HISTFILESIZE</CODE> is not set, no truncation is performed.
-</P><P>
-
-If the <CODE>HISTTIMEFORMAT</CODE> is set, the time stamp information
-associated with each history entry is written to the history file.
-</P><P>
-
-The builtin command <CODE>fc</CODE> may be used to list or edit and re-execute
-a portion of the history list.
-The <CODE>history</CODE> builtin may be used to display or modify the history
-list and manipulate the history file.
-When using command-line editing, search commands
-are available in each editing mode that provide access to the
-history list (see section <A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A>).
-</P><P>
-
-The shell allows control over which commands are saved on the history
-list.  The <CODE>HISTCONTROL</CODE> and <CODE>HISTIGNORE</CODE>
-variables may be set to cause the shell to save only a subset of the
-commands entered.
-The <CODE>cmdhist</CODE>
-shell option, if enabled, causes the shell to attempt to save each
-line of a multi-line command in the same history entry, adding
-semicolons where necessary to preserve syntactic correctness.
-The <CODE>lithist</CODE>
-shell option causes the shell to save the command with embedded newlines
-instead of semicolons.
-The <CODE>shopt</CODE> builtin is used to set these options.
-See section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>, for a description of <CODE>shopt</CODE>.
-</P><P>
-
-<A NAME="Bash History Builtins"></A>
-<HR SIZE="6">
-<A NAME="SEC119"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC118"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC120"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC120"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 9.2 Bash History Builtins </H2>
-<!--docid::SEC119::-->
-<P>
-
-Bash provides two builtin commands which manipulate the
-history list and history file.
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>fc</CODE>
-<DD><A NAME="IDX513"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>fc [-e <VAR>ename</VAR>] [-lnr] [<VAR>first</VAR>] [<VAR>last</VAR>]</CODE>
-<CODE>fc -s [<VAR>pat</VAR>=<VAR>rep</VAR>] [<VAR>command</VAR>]</CODE>
-</pre></td></tr></table><P>
-
-Fix Command.  In the first form, a range of commands from <VAR>first</VAR> to
-<VAR>last</VAR> is selected from the history list.  Both <VAR>first</VAR> and
-<VAR>last</VAR> may be specified as a string (to locate the most recent
-command beginning with that string) or as a number (an index into the
-history list, where a negative number is used as an offset from the
-current command number).  If <VAR>last</VAR> is not specified it is set to
-<VAR>first</VAR>.  If <VAR>first</VAR> is not specified it is set to the previous
-command for editing and -16 for listing.  If the <SAMP>`-l'</SAMP> flag is
-given, the commands are listed on standard output.  The <SAMP>`-n'</SAMP> flag
-suppresses the command numbers when listing.  The <SAMP>`-r'</SAMP> flag
-reverses the order of the listing.  Otherwise, the editor given by
-<VAR>ename</VAR> is invoked on a file containing those commands.  If
-<VAR>ename</VAR> is not given, the value of the following variable expansion
-is used: <CODE>${FCEDIT:-${EDITOR:-vi}}</CODE>.  This says to use the
-value of the <CODE>FCEDIT</CODE> variable if set, or the value of the
-<CODE>EDITOR</CODE> variable if that is set, or <CODE>vi</CODE> if neither is set.
-When editing is complete, the edited commands are echoed and executed.
-</P><P>
-
-In the second form, <VAR>command</VAR> is re-executed after each instance
-of <VAR>pat</VAR> in the selected command is replaced by <VAR>rep</VAR>.
-</P><P>
-
-A useful alias to use with the <CODE>fc</CODE> command is <CODE>r='fc -s'</CODE>, so
-that typing <SAMP>`r cc'</SAMP> runs the last command beginning with <CODE>cc</CODE>
-and typing <SAMP>`r'</SAMP> re-executes the last command (see section <A HREF="b.html#SEC82">6.6 Aliases</A>).
-</P><P>
-
-<DT><CODE>history</CODE>
-<DD><A NAME="IDX514"></A>
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>history [<VAR>n</VAR>]
-history -c
-history -d <VAR>offset</VAR>
-history [-anrw] [<VAR>filename</VAR>]
-history -ps <VAR>arg</VAR>
-</pre></td></tr></table><P>
-
-With no options, display the history list with line numbers.
-Lines prefixed with a <SAMP>`*'</SAMP> have been modified.
-An argument of <VAR>n</VAR> lists only the last <VAR>n</VAR> lines.
-If the shell variable <CODE>HISTTIMEFORMAT</CODE> is set and not null,
-it is used as a format string for <VAR>strftime</VAR> to display
-the time stamp associated with each displayed history entry.
-No intervening blank is printed between the formatted time stamp
-and the history line.
-</P><P>
-
-Options, if supplied, have the following meanings:
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>-c</CODE>
-<DD>Clear the history list.  This may be combined
-with the other options to replace the history list completely.
-<P>
-
-<DT><CODE>-d <VAR>offset</VAR></CODE>
-<DD>Delete the history entry at position <VAR>offset</VAR>.
-<VAR>offset</VAR> should be specified as it appears when the history is
-displayed.
-<P>
-
-<DT><CODE>-a</CODE>
-<DD>Append the new
-history lines (history lines entered since the beginning of the
-current Bash session) to the history file.
-<P>
-
-<DT><CODE>-n</CODE>
-<DD>Append the history lines not already read from the history file
-to the current history list.  These are lines appended to the history
-file since the beginning of the current Bash session.
-<P>
-
-<DT><CODE>-r</CODE>
-<DD>Read the current history file and append its contents to
-the history list.
-<P>
-
-<DT><CODE>-w</CODE>
-<DD>Write out the current history to the history file.
-<P>
-
-<DT><CODE>-p</CODE>
-<DD>Perform history substitution on the <VAR>arg</VAR>s and display the result
-on the standard output, without storing the results in the history list.
-<P>
-
-<DT><CODE>-s</CODE>
-<DD>The <VAR>arg</VAR>s are added to the end of
-the history list as a single entry.
-<P>
-
-</DL>
-<P>
-
-When any of the <SAMP>`-w'</SAMP>, <SAMP>`-r'</SAMP>, <SAMP>`-a'</SAMP>, or <SAMP>`-n'</SAMP> options is
-used, if <VAR>filename</VAR>
-is given, then it is used as the history file.  If not, then
-the value of the <CODE>HISTFILE</CODE> variable is used.
-</P><P>
-
-</DL>
-<P>
-
-<A NAME="History Interaction"></A>
-<HR SIZE="6">
-<A NAME="SEC120"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC119"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC121"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC117"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 9.3 History Expansion </H2>
-<!--docid::SEC120::-->
-<P>
-
-The History library provides a history expansion feature that is similar
-to the history expansion provided by <CODE>csh</CODE>.  This section
-describes the syntax used to manipulate the history information.
-</P><P>
-
-History expansions introduce words from the history list into
-the input stream, making it easy to repeat commands, insert the
-arguments to a previous command into the current input line, or
-fix errors in previous commands quickly.
-</P><P>
-
-History expansion takes place in two parts.  The first is to determine
-which line from the history list should be used during substitution.
-The second is to select portions of that line for inclusion into the
-current one.  The line selected from the history is called the
-<EM>event</EM>, and the portions of that line that are acted upon are
-called <EM>words</EM>.  Various <EM>modifiers</EM> are available to manipulate
-the selected words.  The line is broken into words in the same fashion
-that Bash does, so that several words
-surrounded by quotes are considered one word.
-History expansions are introduced by the appearance of the
-history expansion character, which is <SAMP>`!'</SAMP> by default.
-Only <SAMP>`\'</SAMP> and <SAMP>`''</SAMP> may be used to escape the history expansion
-character.
-</P><P>
-
-Several shell options settable with the <CODE>shopt</CODE>
-builtin (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>) may be used to tailor
-the behavior of history expansion.  If the
-<CODE>histverify</CODE> shell option is enabled, and Readline
-is being used, history substitutions are not immediately passed to
-the shell parser.
-Instead, the expanded line is reloaded into the Readline
-editing buffer for further modification.
-If Readline is being used, and the <CODE>histreedit</CODE>
-shell option is enabled, a failed history expansion will be
-reloaded into the Readline editing buffer for correction.
-The <SAMP>`-p'</SAMP> option to the <CODE>history</CODE> builtin command
-may be used to see what a history expansion will do before using it.
-The <SAMP>`-s'</SAMP> option to the <CODE>history</CODE> builtin may be used to
-add commands to the end of the history list without actually executing
-them, so that they are available for subsequent recall.
-This is most useful in conjunction with Readline.
-</P><P>
-
-The shell allows control of the various characters used by the
-history expansion mechanism with the <CODE>histchars</CODE> variable.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC121">9.3.1 Event Designators</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to specify which history line to use.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC122">9.3.2 Word Designators</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying which words are of interest.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC123">9.3.3 Modifiers</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Modifying the results of substitution.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Event Designators"></A>
-<HR SIZE="6">
-<A NAME="SEC121"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC120"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC122"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC120"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 9.3.1 Event Designators </H3>
-<!--docid::SEC121::-->
-<P>
-
-An event designator is a reference to a command line entry in the
-history list.
-<A NAME="IDX515"></A>
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>!</CODE>
-<DD>Start a history substitution, except when followed by a space, tab,
-the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP> (when the
-<CODE>extglob</CODE> shell option is enabled using the <CODE>shopt</CODE> builtin).
-<P>
-
-<DT><CODE>!<VAR>n</VAR></CODE>
-<DD>Refer to command line <VAR>n</VAR>.
-<P>
-
-<DT><CODE>!-<VAR>n</VAR></CODE>
-<DD>Refer to the command <VAR>n</VAR> lines back.
-<P>
-
-<DT><CODE>!!</CODE>
-<DD>Refer to the previous command.  This is a synonym for <SAMP>`!-1'</SAMP>.
-<P>
-
-<DT><CODE>!<VAR>string</VAR></CODE>
-<DD>Refer to the most recent command starting with <VAR>string</VAR>.
-<P>
-
-<DT><CODE>!?<VAR>string</VAR>[?]</CODE>
-<DD>Refer to the most recent command containing <VAR>string</VAR>.  The trailing
-<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by
-a newline.
-<P>
-
-<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE>
-<DD>Quick Substitution.  Repeat the last command, replacing <VAR>string1</VAR>
-with <VAR>string2</VAR>.  Equivalent to
-<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>.
-<P>
-
-<DT><CODE>!#</CODE>
-<DD>The entire command line typed so far.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Word Designators"></A>
-<HR SIZE="6">
-<A NAME="SEC122"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC121"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC123"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC123"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC120"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 9.3.2 Word Designators </H3>
-<!--docid::SEC122::-->
-<P>
-
-Word designators are used to select desired words from the event.
-A <SAMP>`:'</SAMP> separates the event specification from the word designator.  It
-may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>,
-<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>.  Words are numbered from the beginning
-of the line, with the first word being denoted by 0 (zero).  Words are
-inserted into the current line separated by single spaces.
-</P><P>
-
-For example,
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>!!</CODE>
-<DD>designates the preceding command.  When you type this, the preceding
-command is repeated in toto.
-<P>
-
-<DT><CODE>!!:$</CODE>
-<DD>designates the last argument of the preceding command.  This may be
-shortened to <CODE>!$</CODE>.
-<P>
-
-<DT><CODE>!fi:2</CODE>
-<DD>designates the second argument of the most recent command starting with
-the letters <CODE>fi</CODE>.
-</DL>
-<P>
-
-Here are the word designators:
-<DL COMPACT>
-
-<DT><CODE>0 (zero)</CODE>
-<DD>The <CODE>0</CODE>th word.  For many applications, this is the command word.
-<P>
-
-<DT><CODE><VAR>n</VAR></CODE>
-<DD>The <VAR>n</VAR>th word.
-<P>
-
-<DT><CODE>^</CODE>
-<DD>The first argument; that is, word 1.
-<P>
-
-<DT><CODE>$</CODE>
-<DD>The last argument.
-<P>
-
-<DT><CODE>%</CODE>
-<DD>The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
-<P>
-
-<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE>
-<DD>A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.
-<P>
-
-<DT><CODE>*</CODE>
-<DD>All of the words, except the <CODE>0</CODE>th.  This is a synonym for <SAMP>`1-$'</SAMP>.
-It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event;
-the empty string is returned in that case.
-<P>
-
-<DT><CODE><VAR>x</VAR>*</CODE>
-<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
-<P>
-
-<DT><CODE><VAR>x</VAR>-</CODE>
-<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.
-<P>
-
-</DL>
-<P>
-
-If a word designator is supplied without an event specification, the
-previous command is used as the event.
-</P><P>
-
-<A NAME="Modifiers"></A>
-<HR SIZE="6">
-<A NAME="SEC123"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC122"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC120"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> 9.3.3 Modifiers </H3>
-<!--docid::SEC123::-->
-<P>
-
-After the optional word designator, you can add a sequence of one or more
-of the following modifiers, each preceded by a <SAMP>`:'</SAMP>.
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>h</CODE>
-<DD>Remove a trailing pathname component, leaving only the head.
-<P>
-
-<DT><CODE>t</CODE>
-<DD>Remove all leading pathname components, leaving the tail.
-<P>
-
-<DT><CODE>r</CODE>
-<DD>Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
-the basename.
-<P>
-
-<DT><CODE>e</CODE>
-<DD>Remove all but the trailing suffix.
-<P>
-
-<DT><CODE>p</CODE>
-<DD>Print the new command but do not execute it.
-<P>
-
-<DT><CODE>q</CODE>
-<DD>Quote the substituted words, escaping further substitutions.
-<P>
-
-<DT><CODE>x</CODE>
-<DD>Quote the substituted words as with <SAMP>`q'</SAMP>,
-but break into words at spaces, tabs, and newlines.
-<P>
-
-<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>
-<DD>Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
-event line.  Any delimiter may be used in place of <SAMP>`/'</SAMP>.
-The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR>
-with a single backslash.  If <SAMP>`&#38;'</SAMP> appears in <VAR>new</VAR>,
-it is replaced by <VAR>old</VAR>.  A single backslash will quote
-the <SAMP>`&#38;'</SAMP>.  The final delimiter is optional if it is the last
-character on the input line.
-<P>
-
-<DT><CODE>&#38;</CODE>
-<DD>Repeat the previous substitution.
-<P>
-
-<DT><CODE>g</CODE>
-<DD><DT><CODE>a</CODE>
-<DD>Cause changes to be applied over the entire event line.  Used in
-conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>,
-or with <SAMP>`&#38;'</SAMP>.
-<P>
-
-<DT><CODE>G</CODE>
-<DD>Apply the following <SAMP>`s'</SAMP> modifier once to each word in the event.
-<P>
-
-</DL>
-<P>
-
-<A NAME="Installing Bash"></A>
-<HR SIZE="6">
-<A NAME="SEC124"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC123"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC125"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC4"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> 10. Installing Bash </H1>
-<!--docid::SEC124::-->
-<P>
-
-This chapter provides basic instructions for installing Bash on
-the various supported platforms.  The distribution supports the
-GNU operating systems, nearly every version of Unix, and several
-non-Unix systems such as BeOS and Interix.
-Other independent ports exist for
-MS-DOS, OS/2, and Windows platforms.
-</P><P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC125">10.1 Basic Installation</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Installation instructions.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC126">10.2 Compilers and Options</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to set special options for various
-                               systems.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC127">10.3 Compiling For Multiple Architectures</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to compile Bash for more
-                                               than one kind of system from
-                                               the same source tree.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC128">10.4 Installation Names</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to set the various paths used by the installation.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC129">10.5 Specifying the System Type</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to configure Bash for a particular system.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC130">10.6 Sharing Defaults</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to share default configuration values among GNU
-                       programs.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC131">10.7 Operation Controls</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Options recognized by the configuration program.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC132">10.8 Optional Features</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to enable and disable optional features when
-                       building Bash.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Basic Installation"></A>
-<HR SIZE="6">
-<A NAME="SEC125"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC126"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.1 Basic Installation </H2>
-<!--docid::SEC125::-->
-<P>
-
-These are installation instructions for Bash.
-</P><P>
-
-The simplest way to compile Bash is:
-</P><P>
-
-<OL>
-<LI>
-<CODE>cd</CODE> to the directory containing the source code and type
-<SAMP>`./configure'</SAMP> to configure Bash for your system.  If you're
-using <CODE>csh</CODE> on an old version of System V, you might need to
-type <SAMP>`sh ./configure'</SAMP> instead to prevent <CODE>csh</CODE> from trying
-to execute <CODE>configure</CODE> itself.
-<P>
-
-Running <CODE>configure</CODE> takes some time.
-While running, it prints messages telling which features it is
-checking for.
-</P><P>
-
-<LI>
-Type <SAMP>`make'</SAMP> to compile Bash and build the <CODE>bashbug</CODE> bug
-reporting script.
-<P>
-
-<LI>
-Optionally, type <SAMP>`make tests'</SAMP> to run the Bash test suite.
-<P>
-
-<LI>
-Type <SAMP>`make install'</SAMP> to install <CODE>bash</CODE> and <CODE>bashbug</CODE>.
-This will also install the manual pages and Info file.
-<P>
-
-</OL>
-<P>
-
-The <CODE>configure</CODE> shell script attempts to guess correct
-values for various system-dependent variables used during
-compilation.  It uses those values to create a <TT>`Makefile'</TT> in
-each directory of the package (the top directory, the
-<TT>`builtins'</TT>, <TT>`doc'</TT>, and <TT>`support'</TT> directories,
-each directory under <TT>`lib'</TT>, and several others).  It also creates a
-<TT>`config.h'</TT> file containing system-dependent definitions. 
-Finally, it creates a shell script named <CODE>config.status</CODE> that you
-can run in the future to recreate the current configuration, a
-file <TT>`config.cache'</TT> that saves the results of its tests to
-speed up reconfiguring, and a file <TT>`config.log'</TT> containing
-compiler output (useful mainly for debugging <CODE>configure</CODE>). 
-If at some point
-<TT>`config.cache'</TT> contains results you don't want to keep, you
-may remove or edit it. 
-</P><P>
-
-To find out more about the options and arguments that the
-<CODE>configure</CODE> script understands, type 
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bash-2.04$ ./configure --help
-</pre></td></tr></table></P><P>
-
-at the Bash prompt in your Bash source directory.
-</P><P>
-
-If you need to do unusual things to compile Bash, please
-try to figure out how <CODE>configure</CODE> could check whether or not
-to do them, and mail diffs or instructions to
-<A HREF="mailto:bash-maintainers@gnu.org">bash-maintainers@gnu.org</A> so they can be
-considered for the next release.
-</P><P>
-
-The file <TT>`configure.in'</TT> is used to create <CODE>configure</CODE>
-by a program called Autoconf.  You only need
-<TT>`configure.in'</TT> if you want to change it or regenerate
-<CODE>configure</CODE> using a newer version of Autoconf.  If
-you do this, make sure you are using Autoconf version 2.50 or
-newer.
-</P><P>
-
-You can remove the program binaries and object files from the
-source code directory by typing <SAMP>`make clean'</SAMP>.  To also remove the
-files that <CODE>configure</CODE> created (so you can compile Bash for
-a different kind of computer), type <SAMP>`make distclean'</SAMP>.
-</P><P>
-
-<A NAME="Compilers and Options"></A>
-<HR SIZE="6">
-<A NAME="SEC126"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC125"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC127"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC127"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.2 Compilers and Options </H2>
-<!--docid::SEC126::-->
-<P>
-
-Some systems require unusual options for compilation or linking
-that the <CODE>configure</CODE> script does not know about.  You can
-give <CODE>configure</CODE> initial values for variables by setting
-them in the environment.  Using a Bourne-compatible shell, you
-can do that on the command line like this:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-</pre></td></tr></table></P><P>
-
-On systems that have the <CODE>env</CODE> program, you can do it like this:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-</pre></td></tr></table></P><P>
-
-The configuration process uses GCC to build Bash if it
-is available.
-</P><P>
-
-<A NAME="Compiling For Multiple Architectures"></A>
-<HR SIZE="6">
-<A NAME="SEC127"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC126"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC128"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC128"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.3 Compiling For Multiple Architectures </H2>
-<!--docid::SEC127::-->
-<P>
-
-You can compile Bash for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of <CODE>make</CODE> that
-supports the <CODE>VPATH</CODE> variable, such as GNU <CODE>make</CODE>.
-<CODE>cd</CODE> to the
-directory where you want the object files and executables to go and run
-the <CODE>configure</CODE> script from the source directory.  You may need to
-supply the <SAMP>`--srcdir=PATH'</SAMP> argument to tell <CODE>configure</CODE> where the
-source files are.  <CODE>configure</CODE> automatically checks for the
-source code in the directory that <CODE>configure</CODE> is in and in `..'.
-</P><P>
-
-If you have to use a <CODE>make</CODE> that does not supports the <CODE>VPATH</CODE>
-variable, you can compile Bash for one architecture at a
-time in the source code directory.  After you have installed
-Bash for one architecture, use <SAMP>`make distclean'</SAMP> before
-reconfiguring for another architecture.
-</P><P>
-
-Alternatively, if your system supports symbolic links, you can use the
-<TT>`support/mkclone'</TT> script to create a build tree which has
-symbolic links back to each file in the source directory.  Here's an
-example that creates a build directory in the current directory from a
-source directory <TT>`/usr/gnu/src/bash-2.0'</TT>:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=example><pre>bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
-</pre></td></tr></table></P><P>
-
-The <CODE>mkclone</CODE> script requires Bash, so you must have already built
-Bash for at least one architecture before you can create build
-directories for other architectures.
-</P><P>
-
-<A NAME="Installation Names"></A>
-<HR SIZE="6">
-<A NAME="SEC128"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC127"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC129"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC129"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.4 Installation Names </H2>
-<!--docid::SEC128::-->
-<P>
-
-By default, <SAMP>`make install'</SAMP> will install into
-<TT>`/usr/local/bin'</TT>, <TT>`/usr/local/man'</TT>, etc.  You can
-specify an installation prefix other than <TT>`/usr/local'</TT> by
-giving <CODE>configure</CODE> the option <SAMP>`--prefix=<VAR>PATH</VAR>'</SAMP>,
-or by specifying a value for the <CODE>DESTDIR</CODE> <SAMP>`make'</SAMP>
-variable when running <SAMP>`make install'</SAMP>.
-</P><P>
-
-You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. 
-If you give <CODE>configure</CODE> the option
-<SAMP>`--exec-prefix=<VAR>PATH</VAR>'</SAMP>, <SAMP>`make install'</SAMP> will use
-<VAR>PATH</VAR> as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix. 
-</P><P>
-
-<A NAME="Specifying the System Type"></A>
-<HR SIZE="6">
-<A NAME="SEC129"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC128"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC130"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC130"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.5 Specifying the System Type </H2>
-<!--docid::SEC129::-->
-<P>
-
-There may be some features <CODE>configure</CODE> can not figure out
-automatically, but need to determine by the type of host Bash
-will run on.  Usually <CODE>configure</CODE> can figure that
-out, but if it prints a message saying it can not guess the host
-type, give it the <SAMP>`--host=TYPE'</SAMP> option.  <SAMP>`TYPE'</SAMP> can
-either be a short name for the system type, such as <SAMP>`sun4'</SAMP>,
-or a canonical name with three fields: <SAMP>`CPU-COMPANY-SYSTEM'</SAMP>
-(e.g., <SAMP>`i386-unknown-freebsd4.2'</SAMP>).
-</P><P>
-
-See the file <TT>`support/config.sub'</TT> for the possible
-values of each field. 
-</P><P>
-
-<A NAME="Sharing Defaults"></A>
-<HR SIZE="6">
-<A NAME="SEC130"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC129"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC131"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC131"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.6 Sharing Defaults </H2>
-<!--docid::SEC130::-->
-<P>
-
-If you want to set default values for <CODE>configure</CODE> scripts to
-share, you can create a site shell script called
-<CODE>config.site</CODE> that gives default values for variables like
-<CODE>CC</CODE>, <CODE>cache_file</CODE>, and <CODE>prefix</CODE>.  <CODE>configure</CODE>
-looks for <TT>`PREFIX/share/config.site'</TT> if it exists, then
-<TT>`PREFIX/etc/config.site'</TT> if it exists.  Or, you can set the
-<CODE>CONFIG_SITE</CODE> environment variable to the location of the site
-script.  A warning: the Bash <CODE>configure</CODE> looks for a site script,
-but not all <CODE>configure</CODE> scripts do.
-</P><P>
-
-<A NAME="Operation Controls"></A>
-<HR SIZE="6">
-<A NAME="SEC131"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC130"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC132"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC132"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.7 Operation Controls </H2>
-<!--docid::SEC131::-->
-<P>
-
-<CODE>configure</CODE> recognizes the following options to control how it
-operates.
-</P><P>
-
-<DL COMPACT>
-
-<DT><CODE>--cache-file=<VAR>file</VAR></CODE>
-<DD>Use and save the results of the tests in
-<VAR>file</VAR> instead of <TT>`./config.cache'</TT>.  Set <VAR>file</VAR> to
-<TT>`/dev/null'</TT> to disable caching, for debugging
-<CODE>configure</CODE>. 
-<P>
-
-<DT><CODE>--help</CODE>
-<DD>Print a summary of the options to <CODE>configure</CODE>, and exit.
-<P>
-
-<DT><CODE>--quiet</CODE>
-<DD><DT><CODE>--silent</CODE>
-<DD><DT><CODE>-q</CODE>
-<DD>Do not print messages saying which checks are being made.
-<P>
-
-<DT><CODE>--srcdir=<VAR>dir</VAR></CODE>
-<DD>Look for the Bash source code in directory <VAR>dir</VAR>.  Usually
-<CODE>configure</CODE> can determine that directory automatically.
-<P>
-
-<DT><CODE>--version</CODE>
-<DD>Print the version of Autoconf used to generate the <CODE>configure</CODE>
-script, and exit.
-</DL>
-<P>
-
-<CODE>configure</CODE> also accepts some other, not widely used, boilerplate
-options.  <SAMP>`configure --help'</SAMP> prints the complete list.
-</P><P>
-
-<A NAME="Optional Features"></A>
-<HR SIZE="6">
-<A NAME="SEC132"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC131"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> 10.8 Optional Features </H2>
-<!--docid::SEC132::-->
-<P>
-
-The Bash <CODE>configure</CODE> has a number of <SAMP>`--enable-<VAR>feature</VAR>'</SAMP>
-options, where <VAR>feature</VAR> indicates an optional part of Bash.
-There are also several <SAMP>`--with-<VAR>package</VAR>'</SAMP> options,
-where <VAR>package</VAR> is something like <SAMP>`bash-malloc'</SAMP> or <SAMP>`purify'</SAMP>.
-To turn off the default use of a package, use
-<SAMP>`--without-<VAR>package</VAR>'</SAMP>.  To configure Bash without a feature
-that is enabled by default, use <SAMP>`--disable-<VAR>feature</VAR>'</SAMP>.
-</P><P>
-
-Here is a complete list of the <SAMP>`--enable-'</SAMP> and
-<SAMP>`--with-'</SAMP> options that the Bash <CODE>configure</CODE> recognizes. 
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>--with-afs</CODE>
-<DD>Define if you are using the Andrew File System from Transarc.
-<P>
-
-<DT><CODE>--with-bash-malloc</CODE>
-<DD>Use the Bash version of
-<CODE>malloc</CODE> in the directory <TT>`lib/malloc'</TT>.  This is not the same
-<CODE>malloc</CODE> that appears in GNU libc, but an older version
-originally derived from the 4.2 BSD <CODE>malloc</CODE>.  This <CODE>malloc</CODE>
-is very fast, but wastes some space on each allocation.
-This option is enabled by default.
-The <TT>`NOTES'</TT> file contains a list of systems for
-which this should be turned off, and <CODE>configure</CODE> disables this
-option automatically for a number of systems.
-<P>
-
-<DT><CODE>--with-curses</CODE>
-<DD>Use the curses library instead of the termcap library.  This should
-be supplied if your system has an inadequate or incomplete termcap
-database.
-<P>
-
-<DT><CODE>--with-gnu-malloc</CODE>
-<DD>A synonym for <CODE>--with-bash-malloc</CODE>.
-<P>
-
-<DT><CODE>--with-installed-readline[=<VAR>PREFIX</VAR>]</CODE>
-<DD>Define this to make Bash link with a locally-installed version of Readline
-rather than the version in <TT>`lib/readline'</TT>.  This works only with
-Readline 5.0 and later versions.  If <VAR>PREFIX</VAR> is <CODE>yes</CODE> or not
-supplied, <CODE>configure</CODE> uses the values of the make variables
-<CODE>includedir</CODE> and <CODE>libdir</CODE>, which are subdirectories of <CODE>prefix</CODE>
-by default, to find the installed version of Readline if it is not in
-the standard system include and library directories.
-If <VAR>PREFIX</VAR> is <CODE>no</CODE>, Bash links with the version in
-<TT>`lib/readline'</TT>.
-If <VAR>PREFIX</VAR> is set to any other value, <CODE>configure</CODE> treats it as
-a directory pathname and looks for
-the installed version of Readline in subdirectories of that directory
-(include files in <VAR>PREFIX</VAR>/<CODE>include</CODE> and the library in
-<VAR>PREFIX</VAR>/<CODE>lib</CODE>).
-<P>
-
-<DT><CODE>--with-purify</CODE>
-<DD>Define this to use the Purify memory allocation checker from Rational
-Software.
-<P>
-
-<DT><CODE>--enable-minimal-config</CODE>
-<DD>This produces a shell with minimal features, close to the historical
-Bourne shell.
-</DL>
-<P>
-
-There are several <SAMP>`--enable-'</SAMP> options that alter how Bash is
-compiled and linked, rather than changing run-time features.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>--enable-largefile</CODE>
-<DD>Enable support for <A HREF="http://www.sas.com/standards/large_file/x_open.20Mar96.html">large files</A> if the operating system requires special compiler options
-to build programs which can access large files.  This is enabled by
-default, if the operating system provides large file support.
-<P>
-
-<DT><CODE>--enable-profiling</CODE>
-<DD>This builds a Bash binary that produces profiling information to be
-processed by <CODE>gprof</CODE> each time it is executed.
-<P>
-
-<DT><CODE>--enable-static-link</CODE>
-<DD>This causes Bash to be linked statically, if <CODE>gcc</CODE> is being used.
-This could be used to build a version to use as root's shell.
-</DL>
-<P>
-
-The <SAMP>`minimal-config'</SAMP> option can be used to disable all of
-the following options, but it is processed first, so individual
-options may be enabled using <SAMP>`enable-<VAR>feature</VAR>'</SAMP>. 
-</P><P>
-
-All of the following options except for <SAMP>`disabled-builtins'</SAMP> and
-<SAMP>`xpg-echo-default'</SAMP> are
-enabled by default, unless the operating system does not provide the
-necessary support.
-</P><P>
-
-<DL COMPACT>
-<DT><CODE>--enable-alias</CODE>
-<DD>Allow alias expansion and include the <CODE>alias</CODE> and <CODE>unalias</CODE>
-builtins (see section <A HREF="b.html#SEC82">6.6 Aliases</A>).
-<P>
-
-<DT><CODE>--enable-arith-for-command</CODE>
-<DD>Include support for the alternate form of the <CODE>for</CODE> command
-that behaves like the C language <CODE>for</CODE> statement
-(see section <A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A>).
-<P>
-
-<DT><CODE>--enable-array-variables</CODE>
-<DD>Include support for one-dimensional array shell variables
-(see section <A HREF="b.html#SEC83">6.7 Arrays</A>).
-<P>
-
-<DT><CODE>--enable-bang-history</CODE>
-<DD>Include support for <CODE>csh</CODE>-like history substitution
-(see section <A HREF="b.html#SEC120">9.3 History Expansion</A>).
-<P>
-
-<DT><CODE>--enable-brace-expansion</CODE>
-<DD>Include <CODE>csh</CODE>-like brace expansion
-( <CODE>b{a,b}c</CODE> ==> <CODE>bac bbc</CODE> ).
-See <A HREF="b.html#SEC28">3.5.1 Brace Expansion</A>, for a complete description.
-<P>
-
-<DT><CODE>--enable-command-timing</CODE>
-<DD>Include support for recognizing <CODE>time</CODE> as a reserved word and for
-displaying timing statistics for the pipeline following <CODE>time</CODE>
-(see section <A HREF="b.html#SEC17">3.2.2 Pipelines</A>).
-This allows pipelines as well as shell builtins and functions to be timed.
-<P>
-
-<DT><CODE>--enable-cond-command</CODE>
-<DD>Include support for the <CODE>[[</CODE> conditional command.
-(see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>).
-<P>
-
-<DT><CODE>--enable-cond-regexp</CODE>
-<DD>Include support for matching POSIX regular expressions using the
-<SAMP>`=~'</SAMP> binary operator in the <CODE>[[</CODE> conditional command.
-(see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>).
-<P>
-
-<DT><CODE>--enable-debugger</CODE>
-<DD>Include support for the bash debugger (distributed separately).
-<P>
-
-<DT><CODE>--enable-directory-stack</CODE>
-<DD>Include support for a <CODE>csh</CODE>-like directory stack and the
-<CODE>pushd</CODE>, <CODE>popd</CODE>, and <CODE>dirs</CODE> builtins
-(see section <A HREF="b.html#SEC84">6.8 The Directory Stack</A>).
-<P>
-
-<DT><CODE>--enable-disabled-builtins</CODE>
-<DD>Allow builtin commands to be invoked via <SAMP>`builtin xxx'</SAMP>
-even after <CODE>xxx</CODE> has been disabled using <SAMP>`enable -n xxx'</SAMP>.
-See <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>, for details of the <CODE>builtin</CODE> and
-<CODE>enable</CODE> builtin commands.
-<P>
-
-<DT><CODE>--enable-dparen-arithmetic</CODE>
-<DD>Include support for the <CODE>((<small>...</small>))</CODE> command
-(see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>).
-<P>
-
-<DT><CODE>--enable-extended-glob</CODE>
-<DD>Include support for the extended pattern matching features described
-above under <A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A>.
-<P>
-
-<DT><CODE>--enable-help-builtin</CODE>
-<DD>Include the <CODE>help</CODE> builtin, which displays help on shell builtins and
-variables (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<DT><CODE>--enable-history</CODE>
-<DD>Include command history and the <CODE>fc</CODE> and <CODE>history</CODE>
-builtin commands (see section <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>).
-<P>
-
-<DT><CODE>--enable-job-control</CODE>
-<DD>This enables the job control features (see section <A HREF="b.html#SEC89">7. Job Control</A>),
-if the operating system supports them.
-<P>
-
-<DT><CODE>--enable-multibyte</CODE>
-<DD>This enables support for multibyte characters if the operating
-system provides the necessary support.
-<P>
-
-<DT><CODE>--enable-net-redirections</CODE>
-<DD>This enables the special handling of filenames of the form
-<CODE>/dev/tcp/<VAR>host</VAR>/<VAR>port</VAR></CODE> and
-<CODE>/dev/udp/<VAR>host</VAR>/<VAR>port</VAR></CODE>
-when used in redirections (see section <A HREF="b.html#SEC38">3.6 Redirections</A>).
-<P>
-
-<DT><CODE>--enable-process-substitution</CODE>
-<DD>This enables process substitution (see section <A HREF="b.html#SEC33">3.5.6 Process Substitution</A>) if
-the operating system provides the necessary support.
-<P>
-
-<DT><CODE>--enable-progcomp</CODE>
-<DD>Enable the programmable completion facilities
-(see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>).
-If Readline is not enabled, this option has no effect.
-<P>
-
-<DT><CODE>--enable-prompt-string-decoding</CODE>
-<DD>Turn on the interpretation of a number of backslash-escaped characters
-in the <CODE>$PS1</CODE>, <CODE>$PS2</CODE>, <CODE>$PS3</CODE>, and <CODE>$PS4</CODE> prompt
-strings.  See <A HREF="b.html#SEC86">6.9 Controlling the Prompt</A>, for a complete list of prompt
-string escape sequences.
-<P>
-
-<DT><CODE>--enable-readline</CODE>
-<DD>Include support for command-line editing and history with the Bash
-version of the Readline library (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>).
-<P>
-
-<DT><CODE>--enable-restricted</CODE>
-<DD>Include support for a <EM>restricted shell</EM>.  If this is enabled, Bash,
-when called as <CODE>rbash</CODE>, enters a restricted mode.  See
-<A HREF="b.html#SEC87">6.10 The Restricted Shell</A>, for a description of restricted mode.
-<P>
-
-<DT><CODE>--enable-select</CODE>
-<DD>Include the <CODE>select</CODE> builtin, which allows the generation of simple
-menus (see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>).
-<P>
-
-<DT><CODE>--enable-separate-helpfiles</CODE>
-<DD>Use external files for the documentation displayed by the <CODE>help</CODE> builtin
-instead of storing the text internally.
-<P>
-
-<DT><CODE>--enable-single-help-strings</CODE>
-<DD>Store the text displayed by the <CODE>help</CODE> builtin as a single string for
-each help topic.  This aids in translating the text to different languages.
-You may need to disable this if your compiler cannot handle very long string
-literals.
-<P>
-
-<DT><CODE>--enable-strict-posix-default</CODE>
-<DD>Make Bash POSIX-conformant by default (see section <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>).
-<P>
-
-<DT><CODE>--enable-usg-echo-default</CODE>
-<DD>A synonym for <CODE>--enable-xpg-echo-default</CODE>.
-<P>
-
-<DT><CODE>--enable-xpg-echo-default</CODE>
-<DD>Make the <CODE>echo</CODE> builtin expand backslash-escaped characters by default,
-without requiring the <SAMP>`-e'</SAMP> option.
-This sets the default value of the <CODE>xpg_echo</CODE> shell option to <CODE>on</CODE>,
-which makes the Bash <CODE>echo</CODE> behave more like the version specified in
-the Single Unix Specification, version 3.
-See section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>, for a description of the escape sequences that
-<CODE>echo</CODE> recognizes.
-<P>
-
-</DL>
-<P>
-
-The file <TT>`config-top.h'</TT> contains C Preprocessor
-<SAMP>`#define'</SAMP> statements for options which are not settable from
-<CODE>configure</CODE>.
-Some of these are not meant to be changed; beware of the consequences if
-you do.
-Read the comments associated with each definition for more
-information about its effect.
-</P><P>
-
-<A NAME="Reporting Bugs"></A>
-<HR SIZE="6">
-<A NAME="SEC133"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC132"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC134"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC124"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC134"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> A. Reporting Bugs </H1>
-<!--docid::SEC133::-->
-<P>
-
-Please report all bugs you find in Bash.
-But first, you should
-make sure that it really is a bug, and that it appears in the latest
-version of Bash.
-The latest version of Bash is always available for FTP from
-<A HREF="ftp://ftp.gnu.org/pub/bash/">ftp://ftp.gnu.org/pub/bash/</A>.
-</P><P>
-
-Once you have determined that a bug actually exists, use the
-<CODE>bashbug</CODE> command to submit a bug report.
-If you have a fix, you are encouraged to mail that as well!
-Suggestions and `philosophical' bug reports may be mailed
-to <A HREF="mailto:bug-bash@gnu.org">bug-bash@gnu.org</A> or posted to the Usenet
-newsgroup <CODE>gnu.bash.bug</CODE>.
-</P><P>
-
-All bug reports should include:
-<UL>
-<LI>
-The version number of Bash.
-<LI>
-The hardware and operating system.
-<LI>
-The compiler used to compile Bash.
-<LI>
-A description of the bug behaviour.
-<LI>
-A short script or `recipe' which exercises the bug and may be used
-to reproduce it.
-</UL>
-<P>
-
-<CODE>bashbug</CODE> inserts the first three items automatically into
-the template it provides for filing a bug report.
-</P><P>
-
-Please send all reports concerning this manual to
-<A HREF="mailto:chet@po.CWRU.Edu">chet@po.CWRU.Edu</A>.
-</P><P>
-
-<A NAME="Major Differences From The Bourne Shell"></A>
-<HR SIZE="6">
-<A NAME="SEC134"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC133"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC135"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> B. Major Differences From The Bourne Shell </H1>
-<!--docid::SEC134::-->
-<P>
-
-Bash implements essentially the same grammar, parameter and
-variable expansion, redirection, and quoting as the Bourne Shell. 
-Bash uses the POSIX standard as the specification of
-how these features are to be implemented.  There are some
-differences between the traditional Bourne shell and Bash; this
-section quickly details the differences of significance.  A
-number of these differences are explained in greater depth in
-previous sections.
-This section uses the version of <CODE>sh</CODE> included in SVR4.2 (the
-last version of the historical Bourne shell) as the baseline reference.
-</P><P>
-
-<UL>
-
-<LI>
-Bash is POSIX-conformant, even where the POSIX specification
-differs from traditional <CODE>sh</CODE> behavior (see section <A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>).
-<P>
-
-<LI>
-Bash has multi-character invocation options (see section <A HREF="b.html#SEC67">6.1 Invoking Bash</A>).
-<P>
-
-<LI>
-Bash has command-line editing (see section <A HREF="b.html#SEC93">8. Command Line Editing</A>) and
-the <CODE>bind</CODE> builtin.
-<P>
-
-<LI>
-Bash provides a programmable word completion mechanism
-(see section <A HREF="b.html#SEC115">8.6 Programmable Completion</A>), and two builtin commands,
-<CODE>complete</CODE> and <CODE>compgen</CODE>, to manipulate it.
-<P>
-
-<LI>
-Bash has command history (see section <A HREF="b.html#SEC118">9.1 Bash History Facilities</A>) and the
-<CODE>history</CODE> and <CODE>fc</CODE> builtins to manipulate it.
-The Bash history list maintains timestamp information and uses the
-value of the <CODE>HISTTIMEFORMAT</CODE> variable to display it.
-<P>
-
-<LI>
-Bash implements <CODE>csh</CODE>-like history expansion
-(see section <A HREF="b.html#SEC120">9.3 History Expansion</A>).
-<P>
-
-<LI>
-Bash has one-dimensional array variables (see section <A HREF="b.html#SEC83">6.7 Arrays</A>), and the
-appropriate variable expansions and assignment syntax to use them.
-Several of the Bash builtins take options to act on arrays.
-Bash provides a number of built-in array variables.
-<P>
-
-<LI>
-The <CODE>$'<small>...</small>'</CODE> quoting syntax, which expands ANSI-C
-backslash-escaped characters in the text between the single quotes,
-is supported (see section <A HREF="b.html#SEC12">3.1.2.4 ANSI-C Quoting</A>).
-<P>
-
-<LI>
-Bash supports the <CODE>$"<small>...</small>"</CODE> quoting syntax to do
-locale-specific translation of the characters between the double
-quotes.  The <SAMP>`-D'</SAMP>, <SAMP>`--dump-strings'</SAMP>, and <SAMP>`--dump-po-strings'</SAMP>
-invocation options list the translatable strings found in a script
-(see section <A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A>).
-<P>
-
-<LI>
-Bash implements the <CODE>!</CODE> keyword to negate the return value of
-a pipeline (see section <A HREF="b.html#SEC17">3.2.2 Pipelines</A>).
-Very useful when an <CODE>if</CODE> statement needs to act only if a test fails.
-The Bash <SAMP>`-o pipefail'</SAMP> option to <CODE>set</CODE> will cause a pipeline to
-return a failure status if any command fails.
-<P>
-
-<LI>
-Bash has the <CODE>time</CODE> reserved word and command timing (see section <A HREF="b.html#SEC17">3.2.2 Pipelines</A>).
-The display of the timing statistics may be controlled with the
-<CODE>TIMEFORMAT</CODE> variable.
-<P>
-
-<LI>
-Bash implements the <CODE>for (( <VAR>expr1</VAR> ; <VAR>expr2</VAR> ; <VAR>expr3</VAR> ))</CODE>
-arithmetic for command, similar to the C language (see section <A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A>).
-<P>
-
-<LI>
-Bash includes the <CODE>select</CODE> compound command, which allows the
-generation of simple menus (see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>).
-<P>
-
-<LI>
-Bash includes the <CODE>[[</CODE> compound command, which makes conditional
-testing part of the shell grammar (see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>), including
-optional regular expression matching.
-<P>
-
-<LI>
-Bash provides optional case-insensitive matching for the <CODE>case</CODE> and
-<CODE>[[</CODE> constructs.
-<P>
-
-<LI>
-Bash includes brace expansion (see section <A HREF="b.html#SEC28">3.5.1 Brace Expansion</A>) and tilde
-expansion (see section <A HREF="b.html#SEC29">3.5.2 Tilde Expansion</A>).
-<P>
-
-<LI>
-Bash implements command aliases and the <CODE>alias</CODE> and <CODE>unalias</CODE>
-builtins (see section <A HREF="b.html#SEC82">6.6 Aliases</A>).
-<P>
-
-<LI>
-Bash provides shell arithmetic, the <CODE>((</CODE> compound command
-(see section <A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>),
-and arithmetic expansion (see section <A HREF="b.html#SEC81">6.5 Shell Arithmetic</A>).
-<P>
-
-<LI>
-Variables present in the shell's initial environment are automatically
-exported to child processes.  The Bourne shell does not normally do
-this unless the variables are explicitly marked using the <CODE>export</CODE>
-command.
-<P>
-
-<LI>
-Bash supports the <SAMP>`+='</SAMP> assignment operator, which appends to the value
-of the variable named on the left hand side.
-<P>
-
-<LI>
-Bash includes the POSIX pattern removal <SAMP>`%'</SAMP>, <SAMP>`#'</SAMP>, <SAMP>`%%'</SAMP>
-and <SAMP>`##'</SAMP> expansions to remove leading or trailing substrings from
-variable values (see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-The expansion <CODE>${#xx}</CODE>, which returns the length of <CODE>${xx}</CODE>,
-is supported (see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-The expansion <CODE>${var:</CODE><VAR>offset</VAR><CODE>[:</CODE><VAR>length</VAR><CODE>]}</CODE>,
-which expands to the substring of <CODE>var</CODE>'s value of length
-<VAR>length</VAR>, beginning at <VAR>offset</VAR>, is present
-(see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-The expansion
-<CODE>${var/[/]</CODE><VAR>pattern</VAR><CODE>[/</CODE><VAR>replacement</VAR><CODE>]}</CODE>,
-which matches <VAR>pattern</VAR> and replaces it with <VAR>replacement</VAR> in
-the value of <CODE>var</CODE>, is available (see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-The expansion <CODE>${!<VAR>prefix}*</VAR></CODE> expansion, which expands to
-the names of all shell variables whose names begin with <VAR>prefix</VAR>,
-is available (see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-Bash has <VAR>indirect</VAR> variable expansion using <CODE>${!word}</CODE>
-(see section <A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>).
-<P>
-
-<LI>
-Bash can expand positional parameters beyond <CODE>$9</CODE> using
-<CODE>${<VAR>num</VAR>}</CODE>.
-<P>
-
-<LI>
-The POSIX <CODE>$()</CODE> form of command substitution
-is implemented (see section <A HREF="b.html#SEC31">3.5.4 Command Substitution</A>),
-and preferred to the Bourne shell's <CODE>"</CODE> (which
-is also implemented for backwards compatibility).
-<P>
-
-<LI>
-Bash has process substitution (see section <A HREF="b.html#SEC33">3.5.6 Process Substitution</A>).
-<P>
-
-<LI>
-Bash automatically assigns variables that provide information about the
-current user (<CODE>UID</CODE>, <CODE>EUID</CODE>, and <CODE>GROUPS</CODE>), the current host
-(<CODE>HOSTTYPE</CODE>, <CODE>OSTYPE</CODE>, <CODE>MACHTYPE</CODE>, and <CODE>HOSTNAME</CODE>),
-and the instance of Bash that is running (<CODE>BASH</CODE>,
-<CODE>BASH_VERSION</CODE>, and <CODE>BASH_VERSINFO</CODE>).  See section <A HREF="b.html#SEC65">5.2 Bash Variables</A>,
-for details.
-<P>
-
-<LI>
-The <CODE>IFS</CODE> variable is used to split only the results of expansion,
-not all words (see section <A HREF="b.html#SEC34">3.5.7 Word Splitting</A>).
-This closes a longstanding shell security hole.
-<P>
-
-<LI>
-Bash implements the full set of POSIX filename expansion operators,
-including <VAR>character classes</VAR>, <VAR>equivalence classes</VAR>, and
-<VAR>collating symbols</VAR> (see section <A HREF="b.html#SEC35">3.5.8 Filename Expansion</A>).
-<P>
-
-<LI>
-Bash implements extended pattern matching features when the <CODE>extglob</CODE>
-shell option is enabled (see section <A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A>).
-<P>
-
-<LI>
-It is possible to have a variable and a function with the same name;
-<CODE>sh</CODE> does not separate the two name spaces.
-<P>
-
-<LI>
-Bash functions are permitted to have local variables using the
-<CODE>local</CODE> builtin, and thus useful recursive functions may be written
-(see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-Variable assignments preceding commands affect only that command, even
-builtins and functions (see section <A HREF="b.html#SEC52">3.7.4 Environment</A>).
-In <CODE>sh</CODE>, all variable assignments 
-preceding commands are global unless the command is executed from the
-file system.
-<P>
-
-<LI>
-Bash performs filename expansion on filenames specified as operands
-to input and output redirection operators (see section <A HREF="b.html#SEC38">3.6 Redirections</A>).
-<P>
-
-<LI>
-Bash contains the <SAMP>`&#60;&#62;'</SAMP> redirection operator, allowing a file to be
-opened for both reading and writing, and the <SAMP>`&#38;&#62;'</SAMP> redirection
-operator, for directing standard output and standard error to the same
-file (see section <A HREF="b.html#SEC38">3.6 Redirections</A>).
-<P>
-
-<LI>
-Bash includes the <SAMP>`&#60;&#60;&#60;'</SAMP> redirection operator, allowing a string to
-be used as the standard input to a command.
-<P>
-
-<LI>
-Bash implements the <SAMP>`[n]&#60;&#38;<VAR>word</VAR>'</SAMP> and <SAMP>`[n]&#62;&#38;<VAR>word</VAR>'</SAMP>
-redirection operators, which move one file descriptor to another.
-<P>
-
-<LI>
-Bash treats a number of filenames specially when they are
-used in redirection operators (see section <A HREF="b.html#SEC38">3.6 Redirections</A>).
-<P>
-
-<LI>
-Bash can open network connections to arbitrary machines and services
-with the redirection operators (see section <A HREF="b.html#SEC38">3.6 Redirections</A>).
-<P>
-
-<LI>
-The <CODE>noclobber</CODE> option is available to avoid overwriting existing
-files with output redirection (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-The <SAMP>`&#62;|'</SAMP> redirection operator may be used to override <CODE>noclobber</CODE>.
-<P>
-
-<LI>
-The Bash <CODE>cd</CODE> and <CODE>pwd</CODE> builtins (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>)
-each take <SAMP>`-L'</SAMP> and <SAMP>`-P'</SAMP> options to switch between logical and
-physical modes.
-<P>
-
-<LI>
-Bash allows a function to override a builtin with the same name, and provides
-access to that builtin's functionality within the function via the
-<CODE>builtin</CODE> and <CODE>command</CODE> builtins (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-The <CODE>command</CODE> builtin allows selective disabling of functions
-when command lookup is performed (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-Individual builtins may be enabled or disabled using the <CODE>enable</CODE>
-builtin (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-The Bash <CODE>exec</CODE> builtin takes additional options that allow users
-to control the contents of the environment passed to the executed
-command, and what the zeroth argument to the command is to be
-(see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-<P>
-
-<LI>
-Shell functions may be exported to children via the environment
-using <CODE>export -f</CODE> (see section <A HREF="b.html#SEC23">3.3 Shell Functions</A>).
-<P>
-
-<LI>
-The Bash <CODE>export</CODE>, <CODE>readonly</CODE>, and <CODE>declare</CODE> builtins can
-take a <SAMP>`-f'</SAMP> option to act on shell functions, a <SAMP>`-p'</SAMP> option to
-display variables with various attributes set in a format that can be
-used as shell input, a <SAMP>`-n'</SAMP> option to remove various variable
-attributes, and <SAMP>`name=value'</SAMP> arguments to set variable attributes
-and values simultaneously.
-<P>
-
-<LI>
-The Bash <CODE>hash</CODE> builtin allows a name to be associated with
-an arbitrary filename, even when that filename cannot be found by
-searching the <CODE>$PATH</CODE>, using <SAMP>`hash -p'</SAMP>
-(see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-<P>
-
-<LI>
-Bash includes a <CODE>help</CODE> builtin for quick reference to shell
-facilities (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-The <CODE>printf</CODE> builtin is available to display formatted output
-(see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-The Bash <CODE>read</CODE> builtin (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>)
-will read a line ending in <SAMP>`\'</SAMP> with
-the <SAMP>`-r'</SAMP> option, and will use the <CODE>REPLY</CODE> variable as a
-default if no non-option arguments are supplied.
-The Bash <CODE>read</CODE> builtin
-also accepts a prompt string with the <SAMP>`-p'</SAMP> option and will use
-Readline to obtain the line when given the <SAMP>`-e'</SAMP> option.
-The <CODE>read</CODE> builtin also has additional options to control input:
-the <SAMP>`-s'</SAMP> option will turn off echoing of input characters as
-they are read, the <SAMP>`-t'</SAMP> option will allow <CODE>read</CODE> to time out
-if input does not arrive within a specified number of seconds, the
-<SAMP>`-n'</SAMP> option will allow reading only a specified number of
-characters rather than a full line, and the <SAMP>`-d'</SAMP> option will read
-until a particular character rather than newline.
-<P>
-
-<LI>
-The <CODE>return</CODE> builtin may be used to abort execution of scripts
-executed with the <CODE>.</CODE> or <CODE>source</CODE> builtins
-(see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-<P>
-
-<LI>
-Bash includes the <CODE>shopt</CODE> builtin, for finer control of shell
-optional capabilities (see section <A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>), and allows these options
-to be set and unset at shell invocation (see section <A HREF="b.html#SEC67">6.1 Invoking Bash</A>).
-<P>
-
-<LI>
-Bash has much more optional behavior controllable with the <CODE>set</CODE>
-builtin (see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<LI>
-The <SAMP>`-x'</SAMP> (<CODE>xtrace</CODE>) option displays commands other than
-simple commands when performing an execution trace
-(see section <A HREF="b.html#SEC60">4.3.1 The Set Builtin</A>).
-<P>
-
-<LI>
-The <CODE>test</CODE> builtin (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>)
-is slightly different, as it implements the POSIX algorithm,
-which specifies the behavior based on the number of arguments.
-<P>
-
-<LI>
-Bash includes the <CODE>caller</CODE> builtin, which displays the context of
-any active subroutine call (a shell function or a script executed with
-the <CODE>.</CODE> or <CODE>source</CODE> builtins).  This supports the bash
-debugger.
-<P>
-
-<LI>
-The <CODE>trap</CODE> builtin (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>) allows a
-<CODE>DEBUG</CODE> pseudo-signal specification, similar to <CODE>EXIT</CODE>.
-Commands specified with a <CODE>DEBUG</CODE> trap are executed before every
-simple command, <CODE>for</CODE> command, <CODE>case</CODE> command,
-<CODE>select</CODE> command, every arithmetic <CODE>for</CODE> command, and before
-the first command executes in a shell function.
-The <CODE>DEBUG</CODE> trap is not inherited by shell functions unless the
-function has been given the <CODE>trace</CODE> attribute or the
-<CODE>functrace</CODE> option has been enabled using the <CODE>shopt</CODE> builtin.
-The <CODE>extdebug</CODE> shell option has additional effects on the
-<CODE>DEBUG</CODE> trap.
-<P>
-
-The <CODE>trap</CODE> builtin (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>) allows an
-<CODE>ERR</CODE> pseudo-signal specification, similar to <CODE>EXIT</CODE> and <CODE>DEBUG</CODE>.
-Commands specified with an <CODE>ERR</CODE> trap are executed after a simple
-command fails, with a few exceptions.
-The <CODE>ERR</CODE> trap is not inherited by shell functions unless the
-<CODE>-o errtrace</CODE> option to the <CODE>set</CODE> builtin is enabled.
-</P><P>
-
-The <CODE>trap</CODE> builtin (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>) allows a
-<CODE>RETURN</CODE> pseudo-signal specification, similar to
-<CODE>EXIT</CODE> and <CODE>DEBUG</CODE>.
-Commands specified with an <CODE>RETURN</CODE> trap are executed before
-execution resumes after a shell function or a shell script executed with
-<CODE>.</CODE> or <CODE>source</CODE> returns.
-The <CODE>RETURN</CODE> trap is not inherited by shell functions unless the
-function has been given the <CODE>trace</CODE> attribute or the
-<CODE>functrace</CODE> option has been enabled using the <CODE>shopt</CODE> builtin.
-</P><P>
-
-<LI>
-The Bash <CODE>type</CODE> builtin is more extensive and gives more information
-about the names it finds (see section <A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>).
-<P>
-
-<LI>
-The Bash <CODE>umask</CODE> builtin permits a <SAMP>`-p'</SAMP> option to cause
-the output to be displayed in the form of a <CODE>umask</CODE> command
-that may be reused as input (see section <A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>).
-<P>
-
-<LI>
-Bash implements a <CODE>csh</CODE>-like directory stack, and provides the
-<CODE>pushd</CODE>, <CODE>popd</CODE>, and <CODE>dirs</CODE> builtins to manipulate it
-(see section <A HREF="b.html#SEC84">6.8 The Directory Stack</A>).
-Bash also makes the directory stack visible as the value of the
-<CODE>DIRSTACK</CODE> shell variable.
-<P>
-
-<LI>
-Bash interprets special backslash-escaped characters in the prompt
-strings when interactive (see section <A HREF="b.html#SEC86">6.9 Controlling the Prompt</A>).
-<P>
-
-<LI>
-The Bash restricted mode is more useful (see section <A HREF="b.html#SEC87">6.10 The Restricted Shell</A>);
-the SVR4.2 shell restricted mode is too limited.
-<P>
-
-<LI>
-The <CODE>disown</CODE> builtin can remove a job from the internal shell
-job table (see section <A HREF="b.html#SEC91">7.2 Job Control Builtins</A>) or suppress the sending
-of <CODE>SIGHUP</CODE> to a job when the shell exits as the result of a
-<CODE>SIGHUP</CODE>.
-<P>
-
-<LI>
-Bash includes a number of features to support a separate debugger for
-shell scripts.
-<P>
-
-<LI>
-The SVR4.2 shell has two privilege-related builtins
-(<CODE>mldmode</CODE> and <CODE>priv</CODE>) not present in Bash.
-<P>
-
-<LI>
-Bash does not have the <CODE>stop</CODE> or <CODE>newgrp</CODE> builtins.
-<P>
-
-<LI>
-Bash does not use the <CODE>SHACCT</CODE> variable or perform shell accounting.
-<P>
-
-<LI>
-The SVR4.2 <CODE>sh</CODE> uses a <CODE>TIMEOUT</CODE> variable like Bash uses
-<CODE>TMOUT</CODE>.
-<P>
-
-</UL>
-<P>
-
-More features unique to Bash may be found in <A HREF="b.html#SEC66">6. Bash Features</A>.
-</P><P>
-
-<HR SIZE="6">
-<A NAME="SEC135"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC134"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC134"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC134"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> B.1 Implementation Differences From The SVR4.2 Shell </H2>
-<!--docid::SEC135::-->
-<P>
-
-Since Bash is a completely new implementation, it does not suffer from
-many of the limitations of the SVR4.2 shell.  For instance:
-</P><P>
-
-<UL>
-
-<LI>
-Bash does not fork a subshell when redirecting into or out of
-a shell control structure such as  an <CODE>if</CODE> or <CODE>while</CODE>
-statement.
-<P>
-
-<LI>
-Bash does not allow unbalanced quotes.  The SVR4.2 shell will silently
-insert a needed closing quote at <CODE>EOF</CODE> under certain circumstances.
-This can be the cause of some hard-to-find errors.
-<P>
-
-<LI>
-The SVR4.2 shell uses a baroque memory management scheme based on
-trapping <CODE>SIGSEGV</CODE>.  If the shell is started from a process with
-<CODE>SIGSEGV</CODE> blocked (e.g., by using the <CODE>system()</CODE> C library
-function call), it misbehaves badly.
-<P>
-
-<LI>
-In a questionable attempt at security, the SVR4.2 shell,
-when invoked without the <SAMP>`-p'</SAMP> option, will alter its real
-and effective UID and GID if they are less than some
-magic threshold value, commonly 100.
-This can lead to unexpected results.
-<P>
-
-<LI>
-The SVR4.2 shell does not allow users to trap <CODE>SIGSEGV</CODE>,
-<CODE>SIGALRM</CODE>, or <CODE>SIGCHLD</CODE>.
-<P>
-
-<LI>
-The SVR4.2 shell does not allow the <CODE>IFS</CODE>, <CODE>MAILCHECK</CODE>,
-<CODE>PATH</CODE>, <CODE>PS1</CODE>, or <CODE>PS2</CODE> variables to be unset.
-<P>
-
-<LI>
-The SVR4.2 shell treats <SAMP>`^'</SAMP> as the undocumented equivalent of
-<SAMP>`|'</SAMP>.
-<P>
-
-<LI>
-Bash allows multiple option arguments when it is invoked (<CODE>-x -v</CODE>);
-the SVR4.2 shell allows only one option argument (<CODE>-xv</CODE>).  In
-fact, some versions of the shell dump core if the second argument begins
-with a <SAMP>`-'</SAMP>.
-<P>
-
-<LI>
-The SVR4.2 shell exits a script if any builtin fails; Bash exits
-a script only if one of the POSIX special builtins fails, and
-only for certain failures, as enumerated in the POSIX standard.
-<P>
-
-<LI>
-The SVR4.2 shell behaves differently when invoked as <CODE>jsh</CODE>
-(it turns on job control).
-</UL>
-<P>
-
-<A NAME="Copying This Manual"></A>
-<HR SIZE="6">
-<A NAME="SEC136"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC135"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC137"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> C. Copying This Manual </H1>
-<!--docid::SEC136::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC137">C.1 GNU Free Documentation License</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">License for copying this manual.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="GNU Free Documentation License"></A>
-<HR SIZE="6">
-<A NAME="SEC137"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC138"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> C.1 GNU Free Documentation License </H2>
-<!--docid::SEC137::-->
-<P>
-
-<A NAME="IDX516"></A>
-<center>
- Version 1.2, November 2002
-</center>
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-</pre></td></tr></table></P><P>
-
-<OL>
-<LI>
-PREAMBLE
-<P>
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document <EM>free</EM> in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-</P><P>
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense.  It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-</P><P>
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does.  But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book.  We recommend this License
-principally for works whose purpose is instruction or reference.
-</P><P>
-
-<LI>
-APPLICABILITY AND DEFINITIONS
-<P>
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License.  Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein.  The "Document", below,
-refers to any such manual or work.  Any member of the public is a
-licensee, and is addressed as "you".  You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-</P><P>
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-</P><P>
-
-A "Secondary Section" is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject.  (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.)  The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-</P><P>
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License.  If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant.  The Document may contain zero
-Invariant Sections.  If the Document does not identify any Invariant
-Sections then there are none.
-</P><P>
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License.  A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-</P><P>
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters.  A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text.  A copy that is not "Transparent" is called "Opaque".
-</P><P>
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input
-format, <FONT SIZE="-1">SGML</FONT> or <FONT SIZE="-1">XML</FONT> using a publicly available
-<FONT SIZE="-1">DTD</FONT>, and standard-conforming simple <FONT SIZE="-1">HTML</FONT>,
-PostScript or <FONT SIZE="-1">PDF</FONT> designed for human modification.  Examples
-of transparent image formats include <FONT SIZE="-1">PNG</FONT>, <FONT SIZE="-1">XCF</FONT> and
-<FONT SIZE="-1">JPG</FONT>.  Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, <FONT SIZE="-1">SGML</FONT> or
-<FONT SIZE="-1">XML</FONT> for which the <FONT SIZE="-1">DTD</FONT> and/or processing tools are
-not generally available, and the machine-generated <FONT SIZE="-1">HTML</FONT>,
-PostScript or <FONT SIZE="-1">PDF</FONT> produced by some word processors for
-output purposes only.
-</P><P>
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page.  For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-</P><P>
-
-A section "Entitled XYZ" means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language.  (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-</P><P>
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document.  These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-</P><P>
-
-<LI>
-VERBATIM COPYING
-<P>
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License.  You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute.  However, you may accept
-compensation in exchange for copies.  If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-</P><P>
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-</P><P>
-
-<LI>
-COPYING IN QUANTITY
-<P>
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover.  Both covers must also clearly and legibly identify
-you as the publisher of these copies.  The front cover must present
-the full title with all words of the title equally prominent and
-visible.  You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-</P><P>
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-</P><P>
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-</P><P>
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-</P><P>
-
-<LI>
-MODIFICATIONS
-<P>
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it.  In addition, you must do these things in the Modified Version:
-</P><P>
-
-<OL>
-<LI>
-Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document).  You may use the same title as a previous version
-if the original publisher of that version gives permission.
-<P>
-
-<LI>
-List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-<P>
-
-<LI>
-State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-<P>
-
-<LI>
-Preserve all the copyright notices of the Document.
-<P>
-
-<LI>
-Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-<P>
-
-<LI>
-Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-<P>
-
-<LI>
-Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-<P>
-
-<LI>
-Include an unaltered copy of this License.
-<P>
-
-<LI>
-Preserve the section Entitled "History", Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page.  If
-there is no section Entitled "History" in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-<P>
-
-<LI>
-Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on.  These may be placed in the "History" section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-<P>
-
-<LI>
-For any section Entitled "Acknowledgements" or "Dedications", Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-<P>
-
-<LI>
-Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles.  Section numbers
-or the equivalent are not considered part of the section titles.
-<P>
-
-<LI>
-Delete any section Entitled "Endorsements".  Such a section
-may not be included in the Modified Version.
-<P>
-
-<LI>
-Do not retitle any existing section to be Entitled "Endorsements" or
-to conflict in title with any Invariant Section.
-<P>
-
-<LI>
-Preserve any Warranty Disclaimers.
-</OL>
-<P>
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant.  To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-</P><P>
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-</P><P>
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version.  Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity.  If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-</P><P>
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-</P><P>
-
-<LI>
-COMBINING DOCUMENTS
-<P>
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-</P><P>
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy.  If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-</P><P>
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications".  You must delete all
-sections Entitled "Endorsements."
-</P><P>
-
-<LI>
-COLLECTIONS OF DOCUMENTS
-<P>
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-</P><P>
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-</P><P>
-
-<LI>
-AGGREGATION WITH INDEPENDENT WORKS
-<P>
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-</P><P>
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-</P><P>
-
-<LI>
-TRANSLATION
-<P>
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections.  You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers.  In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-</P><P>
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-</P><P>
-
-<LI>
-TERMINATION
-<P>
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License.  Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License.  However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-</P><P>
-
-<LI>
-FUTURE REVISIONS OF THIS LICENSE
-<P>
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time.  Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.  See
-<A HREF="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</A>.
-</P><P>
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation.  If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-</OL>
-<P>
-
-<HR SIZE="6">
-<A NAME="SEC138"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC137"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC136"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC137"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> &gt;&gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H3> C.1.1 ADDENDUM: How to use this License for your documents </H3>
-<!--docid::SEC138::-->
-<P>
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>  Copyright (C)  <VAR>year</VAR>  <VAR>your name</VAR>.
-  Permission is granted to copy, distribute and/or modify this document
-  under the terms of the GNU Free Documentation License, Version 1.2
-  or any later version published by the Free Software Foundation;
-  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-  A copy of the license is included in the section entitled ``GNU
-  Free Documentation License''.
-</FONT></pre></td></tr></table></P><P>
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-</P><P>
-
-<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>    with the Invariant Sections being <VAR>list their titles</VAR>, with
-    the Front-Cover Texts being <VAR>list</VAR>, and with the Back-Cover Texts
-    being <VAR>list</VAR>.
-</FONT></pre></td></tr></table></P><P>
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-</P><P>
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-</P><P>
-
-<A NAME="Indexes"></A>
-<HR SIZE="6">
-<A NAME="SEC139"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC138"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC140"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1> D. Indexes </H1>
-<!--docid::SEC139::-->
-<P>
-
-<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC140">D.1 Index of Shell Builtin Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of Bash builtin commands.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC141">D.2 Index of Shell Reserved Words</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of Bash reserved words.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC142">D.3 Parameter and Variable Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Quick reference helps you find the
-                               variable you want.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC143">D.4 Function Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of bindable Readline functions.</TD></TR>
-<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="b.html#SEC144">D.5 Concept Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">General index for concepts described in
-                               this manual.</TD></TR>
-</TABLE></BLOCKQUOTE>
-<P>
-
-<A NAME="Builtin Index"></A>
-<HR SIZE="6">
-<A NAME="SEC140"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC141"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> D.1 Index of Shell Builtin Commands </H2>
-<!--docid::SEC140::-->
-<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#bt_." style="text-decoration:none"><b>.</b></A>
- &nbsp; 
-<A HREF="b.html#bt_:" style="text-decoration:none"><b>:</b></A>
- &nbsp; 
-<A HREF="b.html#bt_[" style="text-decoration:none"><b>[</b></A>
- &nbsp; 
-<BR>
-<A HREF="b.html#bt_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#bt_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#bt_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#bt_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#bt_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#bt_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#bt_G" style="text-decoration:none"><b>G</b></A>
- &nbsp; 
-<A HREF="b.html#bt_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#bt_J" style="text-decoration:none"><b>J</b></A>
- &nbsp; 
-<A HREF="b.html#bt_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#bt_L" style="text-decoration:none"><b>L</b></A>
- &nbsp; 
-<A HREF="b.html#bt_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#bt_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#bt_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#bt_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#bt_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#bt_W" style="text-decoration:none"><b>W</b></A>
- &nbsp; 
-</td></tr></table><br><P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_."></A>.</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX69"><CODE>.</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_:"></A>:</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX68"><CODE>:</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_["></A>[</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX84"><CODE>[</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_A"></A>A</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX89"><CODE>alias</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_B"></A>B</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX281"><CODE>bg</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX90"><CODE>bind</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX70"><CODE>break</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX91"><CODE>builtin</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX92"><CODE>caller</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX71"><CODE>cd</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX93"><CODE>command</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX510"><CODE>compgen</CODE></A></TD><TD valign=top><A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX511"><CODE>complete</CODE></A></TD><TD valign=top><A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX72"><CODE>continue</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_D"></A>D</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX94"><CODE>declare</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX278"><CODE>dirs</CODE></A></TD><TD valign=top><A HREF="b.html#SEC85">6.8.1 Directory Stack Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX286"><CODE>disown</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_E"></A>E</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX95"><CODE>echo</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX96"><CODE>enable</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX73"><CODE>eval</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX74"><CODE>exec</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX75"><CODE>exit</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX76"><CODE>export</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX513"><CODE>fc</CODE></A></TD><TD valign=top><A HREF="b.html#SEC119">9.2 Bash History Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX282"><CODE>fg</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_G"></A>G</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX77"><CODE>getopts</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_H"></A>H</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX78"><CODE>hash</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX97"><CODE>help</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX514"><CODE>history</CODE></A></TD><TD valign=top><A HREF="b.html#SEC119">9.2 Bash History Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_J"></A>J</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX283"><CODE>jobs</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_K"></A>K</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX284"><CODE>kill</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_L"></A>L</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX98"><CODE>let</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX99"><CODE>local</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX100"><CODE>logout</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_P"></A>P</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX279"><CODE>popd</CODE></A></TD><TD valign=top><A HREF="b.html#SEC85">6.8.1 Directory Stack Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX101"><CODE>printf</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX280"><CODE>pushd</CODE></A></TD><TD valign=top><A HREF="b.html#SEC85">6.8.1 Directory Stack Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX79"><CODE>pwd</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX102"><CODE>read</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX80"><CODE>readonly</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX81"><CODE>return</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_S"></A>S</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX108"><CODE>set</CODE></A></TD><TD valign=top><A HREF="b.html#SEC60">4.3.1 The Set Builtin</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX82"><CODE>shift</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX109"><CODE>shopt</CODE></A></TD><TD valign=top><A HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX103"><CODE>source</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX287"><CODE>suspend</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_T"></A>T</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX83"><CODE>test</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX85"><CODE>times</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX86"><CODE>trap</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX104"><CODE>type</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX105"><CODE>typeset</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_U"></A>U</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX106"><CODE>ulimit</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX87"><CODE>umask</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX107"><CODE>unalias</CODE></A></TD><TD valign=top><A HREF="b.html#SEC58">4.2 Bash Builtin Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX88"><CODE>unset</CODE></A></TD><TD valign=top><A HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="bt_W"></A>W</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX285"><CODE>wait</CODE></A></TD><TD valign=top><A HREF="b.html#SEC91">7.2 Job Control Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#bt_." style="text-decoration:none"><b>.</b></A>
- &nbsp; 
-<A HREF="b.html#bt_:" style="text-decoration:none"><b>:</b></A>
- &nbsp; 
-<A HREF="b.html#bt_[" style="text-decoration:none"><b>[</b></A>
- &nbsp; 
-<BR>
-<A HREF="b.html#bt_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#bt_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#bt_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#bt_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#bt_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#bt_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#bt_G" style="text-decoration:none"><b>G</b></A>
- &nbsp; 
-<A HREF="b.html#bt_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#bt_J" style="text-decoration:none"><b>J</b></A>
- &nbsp; 
-<A HREF="b.html#bt_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#bt_L" style="text-decoration:none"><b>L</b></A>
- &nbsp; 
-<A HREF="b.html#bt_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#bt_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#bt_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#bt_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#bt_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#bt_W" style="text-decoration:none"><b>W</b></A>
- &nbsp; 
-</td></tr></table><br><P>
-
-<A NAME="Reserved Word Index"></A>
-<HR SIZE="6">
-<A NAME="SEC141"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC140"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC142"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC142"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> D.2 Index of Shell Reserved Words </H2>
-<!--docid::SEC141::-->
-<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#rw_!" style="text-decoration:none"><b>!</b></A>
- &nbsp; 
-<A HREF="b.html#rw_[" style="text-decoration:none"><b>[</b></A>
- &nbsp; 
-<A HREF="b.html#rw_]" style="text-decoration:none"><b>]</b></A>
- &nbsp; 
-<A HREF="b.html#rw_{" style="text-decoration:none"><b>{</b></A>
- &nbsp; 
-<A HREF="b.html#rw_}" style="text-decoration:none"><b>}</b></A>
- &nbsp; 
-<BR>
-<A HREF="b.html#rw_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#rw_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#rw_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#rw_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#rw_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#rw_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#rw_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#rw_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#rw_W" style="text-decoration:none"><b>W</b></A>
- &nbsp; 
-</td></tr></table><br><P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_!"></A>!</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX25"><CODE>!</CODE></A></TD><TD valign=top><A HREF="b.html#SEC17">3.2.2 Pipelines</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_["></A>[</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX41"><CODE>[[</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_]"></A>]</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX42"><CODE>]]</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_{"></A>{</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX43"><CODE>{</CODE></A></TD><TD valign=top><A HREF="b.html#SEC22">3.2.4.3 Grouping Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_}"></A>}</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX44"><CODE>}</CODE></A></TD><TD valign=top><A HREF="b.html#SEC22">3.2.4.3 Grouping Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX37"><CODE>case</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_D"></A>D</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX28"><CODE>do</CODE></A></TD><TD valign=top><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX29"><CODE>done</CODE></A></TD><TD valign=top><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_E"></A>E</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX35"><CODE>elif</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX34"><CODE>else</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX39"><CODE>esac</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX36"><CODE>fi</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX31"><CODE>for</CODE></A></TD><TD valign=top><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX45"><CODE>function</CODE></A></TD><TD valign=top><A HREF="b.html#SEC23">3.3 Shell Functions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_I"></A>I</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX32"><CODE>if</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX38"><CODE>in</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_S"></A>S</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX40"><CODE>select</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_T"></A>T</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX33"><CODE>then</CODE></A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX24"><CODE>time</CODE></A></TD><TD valign=top><A HREF="b.html#SEC17">3.2.2 Pipelines</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_U"></A>U</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX27"><CODE>until</CODE></A></TD><TD valign=top><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="rw_W"></A>W</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX30"><CODE>while</CODE></A></TD><TD valign=top><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#rw_!" style="text-decoration:none"><b>!</b></A>
- &nbsp; 
-<A HREF="b.html#rw_[" style="text-decoration:none"><b>[</b></A>
- &nbsp; 
-<A HREF="b.html#rw_]" style="text-decoration:none"><b>]</b></A>
- &nbsp; 
-<A HREF="b.html#rw_{" style="text-decoration:none"><b>{</b></A>
- &nbsp; 
-<A HREF="b.html#rw_}" style="text-decoration:none"><b>}</b></A>
- &nbsp; 
-<BR>
-<A HREF="b.html#rw_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#rw_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#rw_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#rw_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#rw_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#rw_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#rw_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#rw_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#rw_W" style="text-decoration:none"><b>W</b></A>
- &nbsp; 
-</td></tr></table><br><P>
-
-<A NAME="Variable Index"></A>
-<HR SIZE="6">
-<A NAME="SEC142"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC141"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC143"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC143"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> D.3 Parameter and Variable Index </H2>
-<!--docid::SEC142::-->
-<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#vr_!" style="text-decoration:none"><b>!</b></A>
- &nbsp; 
-<A HREF="b.html#vr_#" style="text-decoration:none"><b>#</b></A>
- &nbsp; 
-<A HREF="b.html#vr_$" style="text-decoration:none"><b>$</b></A>
- &nbsp; 
-<A HREF="b.html#vr_*" style="text-decoration:none"><b>*</b></A>
- &nbsp; 
-<A HREF="b.html#vr_-" style="text-decoration:none"><b>-</b></A>
- &nbsp; 
-<A HREF="b.html#vr_0" style="text-decoration:none"><b>0</b></A>
- &nbsp; 
-<A HREF="b.html#vr_?" style="text-decoration:none"><b>?</b></A>
- &nbsp; 
-<A HREF="b.html#vr_@" style="text-decoration:none"><b>@</b></A>
- &nbsp; 
-<A HREF="b.html#vr__" style="text-decoration:none"><b>_</b></A>
- &nbsp; 
-<BR>
-<A HREF="b.html#vr_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#vr_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#vr_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#vr_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#vr_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#vr_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#vr_G" style="text-decoration:none"><b>G</b></A>
- &nbsp; 
-<A HREF="b.html#vr_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#vr_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#vr_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#vr_L" style="text-decoration:none"><b>L</b></A>
- &nbsp; 
-<A HREF="b.html#vr_M" style="text-decoration:none"><b>M</b></A>
- &nbsp; 
-<A HREF="b.html#vr_O" style="text-decoration:none"><b>O</b></A>
- &nbsp; 
-<A HREF="b.html#vr_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#vr_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#vr_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#vr_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#vr_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#vr_V" style="text-decoration:none"><b>V</b></A>
- &nbsp; 
-</td></tr></table><br><P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_!"></A>!</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX58"><CODE>!</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX59"><CODE>!</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_#"></A>#</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX50"><CODE>#</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX51"><CODE>#</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_$"></A>$</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX56"><CODE>$</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX57"><CODE>$</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_*"></A>*</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX46"><CODE>*</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX47"><CODE>*</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_-"></A>-</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX54"><CODE>-</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX55"><CODE>-</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_0"></A>0</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX60"><CODE>0</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX61"><CODE>0</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_?"></A>?</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX52"><CODE>?</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX53"><CODE>?</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_@"></A>@</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX48"><CODE>@</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX49"><CODE>@</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr__"></A>_</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX62"><CODE>_</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX63"><CODE>_</CODE></A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_A"></A>A</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX288"><CODE>auto_resume</CODE></A></TD><TD valign=top><A HREF="b.html#SEC92">7.3 Job Control Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX289"><CODE>auto_resume</CODE></A></TD><TD valign=top><A HREF="b.html#SEC92">7.3 Job Control Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_B"></A>B</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX130"><CODE>BASH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX131"><CODE>BASH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX134"><CODE>BASH_ARGC</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX135"><CODE>BASH_ARGC</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX136"><CODE>BASH_ARGV</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX137"><CODE>BASH_ARGV</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX138"><CODE>BASH_COMMAND</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX139"><CODE>BASH_COMMAND</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX140"><CODE>BASH_ENV</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX141"><CODE>BASH_ENV</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX142"><CODE>BASH_EXECUTION_STRING</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX143"><CODE>BASH_EXECUTION_STRING</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX144"><CODE>BASH_LINENO</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX145"><CODE>BASH_LINENO</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX146"><CODE>BASH_REMATCH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX147"><CODE>BASH_REMATCH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX148"><CODE>BASH_SOURCE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX149"><CODE>BASH_SOURCE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX150"><CODE>BASH_SUBSHELL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX151"><CODE>BASH_SUBSHELL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX152"><CODE>BASH_VERSINFO</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX153"><CODE>BASH_VERSINFO</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX154"><CODE>BASH_VERSION</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX155"><CODE>BASH_VERSION</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX132"><CODE>BASHPID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX133"><CODE>BASHPID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX295"><CODE>bell-style</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX296"><CODE>bind-tty-special-chars</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX110"><CODE>CDPATH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX111"><CODE>CDPATH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX156"><CODE>COLUMNS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX157"><CODE>COLUMNS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX297"><CODE>comment-begin</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX158"><CODE>COMP_CWORD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX159"><CODE>COMP_CWORD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX166"><CODE>COMP_KEY</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX167"><CODE>COMP_KEY</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX160"><CODE>COMP_LINE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX161"><CODE>COMP_LINE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX162"><CODE>COMP_POINT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX163"><CODE>COMP_POINT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX164"><CODE>COMP_TYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX165"><CODE>COMP_TYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX168"><CODE>COMP_WORDBREAKS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX169"><CODE>COMP_WORDBREAKS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX170"><CODE>COMP_WORDS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX171"><CODE>COMP_WORDS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX298"><CODE>completion-query-items</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX172"><CODE>COMPREPLY</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX173"><CODE>COMPREPLY</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX299"><CODE>convert-meta</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_D"></A>D</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX174"><CODE>DIRSTACK</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX175"><CODE>DIRSTACK</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX300"><CODE>disable-completion</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_E"></A>E</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX301"><CODE>editing-mode</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX176"><CODE>EMACS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX177"><CODE>EMACS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX302"><CODE>enable-keypad</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX178"><CODE>EUID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX179"><CODE>EUID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX303"><CODE>expand-tilde</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX180"><CODE>FCEDIT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX181"><CODE>FCEDIT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX182"><CODE>FIGNORE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX183"><CODE>FIGNORE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX184"><CODE>FUNCNAME</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX185"><CODE>FUNCNAME</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_G"></A>G</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX186"><CODE>GLOBIGNORE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX187"><CODE>GLOBIGNORE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX188"><CODE>GROUPS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX189"><CODE>GROUPS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_H"></A>H</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX190"><CODE>histchars</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX191"><CODE>histchars</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX192"><CODE>HISTCMD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX193"><CODE>HISTCMD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX194"><CODE>HISTCONTROL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX195"><CODE>HISTCONTROL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX196"><CODE>HISTFILE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX197"><CODE>HISTFILE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX198"><CODE>HISTFILESIZE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX199"><CODE>HISTFILESIZE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX200"><CODE>HISTIGNORE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX201"><CODE>HISTIGNORE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX304"><CODE>history-preserve-point</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX202"><CODE>HISTSIZE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX203"><CODE>HISTSIZE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX204"><CODE>HISTTIMEFORMAT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX205"><CODE>HISTTIMEFORMAT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX112"><CODE>HOME</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX113"><CODE>HOME</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX305"><CODE>horizontal-scroll-mode</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX206"><CODE>HOSTFILE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX207"><CODE>HOSTFILE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX208"><CODE>HOSTNAME</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX209"><CODE>HOSTNAME</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX210"><CODE>HOSTTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX211"><CODE>HOSTTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_I"></A>I</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX114"><CODE>IFS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX115"><CODE>IFS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX212"><CODE>IGNOREEOF</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX213"><CODE>IGNOREEOF</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX306"><CODE>input-meta</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX214"><CODE>INPUTRC</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX215"><CODE>INPUTRC</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX308"><CODE>isearch-terminators</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_K"></A>K</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX309"><CODE>keymap</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_L"></A>L</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX216"><CODE>LANG</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX217"><CODE>LANG</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX218"><CODE>LC_ALL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX219"><CODE>LC_ALL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX220"><CODE>LC_COLLATE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX221"><CODE>LC_COLLATE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX222"><CODE>LC_CTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX223"><CODE>LC_CTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX21"><CODE>LC_MESSAGES</CODE></A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX224"><CODE>LC_MESSAGES</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX225"><CODE>LC_MESSAGES</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX226"><CODE>LC_NUMERIC</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX227"><CODE>LC_NUMERIC</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX228"><CODE>LINENO</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX229"><CODE>LINENO</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX230"><CODE>LINES</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX231"><CODE>LINES</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_M"></A>M</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX232"><CODE>MACHTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX233"><CODE>MACHTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX116"><CODE>MAIL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX117"><CODE>MAIL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX234"><CODE>MAILCHECK</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX235"><CODE>MAILCHECK</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX118"><CODE>MAILPATH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX119"><CODE>MAILPATH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX310"><CODE>mark-modified-lines</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX311"><CODE>mark-symlinked-directories</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX312"><CODE>match-hidden-files</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX307"><CODE>meta-flag</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_O"></A>O</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX236"><CODE>OLDPWD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX237"><CODE>OLDPWD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX120"><CODE>OPTARG</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX121"><CODE>OPTARG</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX238"><CODE>OPTERR</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX239"><CODE>OPTERR</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX122"><CODE>OPTIND</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX123"><CODE>OPTIND</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX240"><CODE>OSTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX241"><CODE>OSTYPE</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX313"><CODE>output-meta</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_P"></A>P</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX314"><CODE>page-completions</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX124"><CODE>PATH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX125"><CODE>PATH</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX242"><CODE>PIPESTATUS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX243"><CODE>PIPESTATUS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX244"><CODE>POSIXLY_CORRECT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX245"><CODE>POSIXLY_CORRECT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX246"><CODE>PPID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX247"><CODE>PPID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX248"><CODE>PROMPT_COMMAND</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX249"><CODE>PROMPT_COMMAND</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX126"><CODE>PS1</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX127"><CODE>PS1</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX128"><CODE>PS2</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX129"><CODE>PS2</CODE></A></TD><TD valign=top><A HREF="b.html#SEC64">5.1 Bourne Shell Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX250"><CODE>PS3</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX251"><CODE>PS3</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX252"><CODE>PS4</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX253"><CODE>PS4</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX254"><CODE>PWD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX255"><CODE>PWD</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX256"><CODE>RANDOM</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX257"><CODE>RANDOM</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX258"><CODE>REPLY</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX259"><CODE>REPLY</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_S"></A>S</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX260"><CODE>SECONDS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX261"><CODE>SECONDS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX262"><CODE>SHELL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX263"><CODE>SHELL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX264"><CODE>SHELLOPTS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX265"><CODE>SHELLOPTS</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX266"><CODE>SHLVL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX267"><CODE>SHLVL</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX315"><CODE>show-all-if-ambiguous</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX316"><CODE>show-all-if-unmodified</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_T"></A>T</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX22"><CODE>TEXTDOMAIN</CODE></A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX23"><CODE>TEXTDOMAINDIR</CODE></A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX268"><CODE>TIMEFORMAT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX269"><CODE>TIMEFORMAT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX270"><CODE>TMOUT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX271"><CODE>TMOUT</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX272"><CODE>TMPDIR</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX273"><CODE>TMPDIR</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_U"></A>U</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX274"><CODE>UID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX275"><CODE>UID</CODE></A></TD><TD valign=top><A HREF="b.html#SEC65">5.2 Bash Variables</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="vr_V"></A>V</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX317"><CODE>visible-stats</CODE></A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#vr_!" style="text-decoration:none"><b>!</b></A>
- &nbsp; 
-<A HREF="b.html#vr_#" style="text-decoration:none"><b>#</b></A>
- &nbsp; 
-<A HREF="b.html#vr_$" style="text-decoration:none"><b>$</b></A>
- &nbsp; 
-<A HREF="b.html#vr_*" style="text-decoration:none"><b>*</b></A>
- &nbsp; 
-<A HREF="b.html#vr_-" style="text-decoration:none"><b>-</b></A>
- &nbsp; 
-<A HREF="b.html#vr_0" style="text-decoration:none"><b>0</b></A>
- &nbsp; 
-<A HREF="b.html#vr_?" style="text-decoration:none"><b>?</b></A>
- &nbsp; 
-<A HREF="b.html#vr_@" style="text-decoration:none"><b>@</b></A>
- &nbsp; 
-<A HREF="b.html#vr__" style="text-decoration:none"><b>_</b></A>
- &nbsp; 
-<BR>
-<A HREF="b.html#vr_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#vr_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#vr_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#vr_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#vr_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#vr_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#vr_G" style="text-decoration:none"><b>G</b></A>
- &nbsp; 
-<A HREF="b.html#vr_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#vr_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#vr_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#vr_L" style="text-decoration:none"><b>L</b></A>
- &nbsp; 
-<A HREF="b.html#vr_M" style="text-decoration:none"><b>M</b></A>
- &nbsp; 
-<A HREF="b.html#vr_O" style="text-decoration:none"><b>O</b></A>
- &nbsp; 
-<A HREF="b.html#vr_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#vr_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#vr_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#vr_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#vr_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#vr_V" style="text-decoration:none"><b>V</b></A>
- &nbsp; 
-</td></tr></table><br><P>
-
-<A NAME="Function Index"></A>
-<HR SIZE="6">
-<A NAME="SEC143"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC142"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC144"> &gt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC144"> &lt;&lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> D.4 Function Index </H2>
-<!--docid::SEC143::-->
-<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#fn_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#fn_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#fn_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#fn_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#fn_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#fn_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#fn_G" style="text-decoration:none"><b>G</b></A>
- &nbsp; 
-<A HREF="b.html#fn_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#fn_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#fn_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#fn_M" style="text-decoration:none"><b>M</b></A>
- &nbsp; 
-<A HREF="b.html#fn_N" style="text-decoration:none"><b>N</b></A>
- &nbsp; 
-<A HREF="b.html#fn_O" style="text-decoration:none"><b>O</b></A>
- &nbsp; 
-<A HREF="b.html#fn_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#fn_Q" style="text-decoration:none"><b>Q</b></A>
- &nbsp; 
-<A HREF="b.html#fn_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#fn_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#fn_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#fn_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#fn_Y" style="text-decoration:none"><b>Y</b></A>
- &nbsp; 
-</td></tr></table><br><P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX458"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX459"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX334"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX335"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX500"><CODE>alias-expand-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX501"><CODE>alias-expand-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_B"></A>B</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX324"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX325"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX362"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX363"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX384"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX385"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX392"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX393"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX328"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX329"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX340"><CODE>beginning-of-history (M-&#38;#60;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX341"><CODE>beginning-of-history (M-&#38;#60;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX318"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX319"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX454"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX455"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX378"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX379"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX474"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX475"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX476"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX477"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX330"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX331"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX416"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX417"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX442"><CODE>complete-command (M-!)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX443"><CODE>complete-command (M-!)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX426"><CODE>complete-filename (M-/)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX427"><CODE>complete-filename (M-/)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX438"><CODE>complete-hostname (M-@)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX439"><CODE>complete-hostname (M-@)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX448"><CODE>complete-into-braces (M-{)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX449"><CODE>complete-into-braces (M-{)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX430"><CODE>complete-username (M-~)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX431"><CODE>complete-username (M-~)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX434"><CODE>complete-variable (M-$)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX435"><CODE>complete-variable (M-$)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX404"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX405"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX406"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX407"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX402"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX403"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX360"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX361"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX424"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX425"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX398"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX399"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX412"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, &#60;small&#62;...&#60;/small&#62; <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC110">8.4.5 Specifying Numeric Arguments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX413"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, &#60;small&#62;...&#60;/small&#62; <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC110">8.4.5 Specifying Numeric Arguments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX492"><CODE>display-shell-version (C-x C-v)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX493"><CODE>display-shell-version (C-x C-v)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX460"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX461"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX376"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX377"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX480"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX481"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX484"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX485"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX482"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX483"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX446"><CODE>dynamic-complete-history (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX447"><CODE>dynamic-complete-history (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX508"><CODE>edit-and-execute-command (C-xC-e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX509"><CODE>edit-and-execute-command (C-xC-e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX452"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX453"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX342"><CODE>end-of-history (M-&#38;#62;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX343"><CODE>end-of-history (M-&#38;#62;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX320"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX321"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX472"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX473"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX364"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX365"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX322"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX323"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX346"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX347"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX326"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX327"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_G"></A>G</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX486"><CODE>glob-complete-word (M-g)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX487"><CODE>glob-complete-word (M-g)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX488"><CODE>glob-expand-word (C-x *)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX489"><CODE>glob-expand-word (C-x *)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX490"><CODE>glob-list-expansions (C-x g)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX491"><CODE>glob-list-expansions (C-x g)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_H"></A>H</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX502"><CODE>history-and-alias-expand-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX503"><CODE>history-and-alias-expand-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX496"><CODE>history-expand-line (M-^)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX497"><CODE>history-expand-line (M-^)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX354"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX355"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX352"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX353"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX478"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX479"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX420"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX421"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX504"><CODE>insert-last-argument (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX505"><CODE>insert-last-argument (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX382"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX383"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX400"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX401"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX388"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX389"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX390"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX391"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_M"></A>M</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX498"><CODE>magic-space ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX499"><CODE>magic-space ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX422"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX423"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX338"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX339"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX350"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX351"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX348"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX349"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_O"></A>O</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX506"><CODE>operate-and-get-next (C-o)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX507"><CODE>operate-and-get-next (C-o)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX380"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX381"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX444"><CODE>possible-command-completions (C-x !)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX445"><CODE>possible-command-completions (C-x !)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX418"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX419"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX428"><CODE>possible-filename-completions (C-x /)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX429"><CODE>possible-filename-completions (C-x /)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX440"><CODE>possible-hostname-completions (C-x @)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX441"><CODE>possible-hostname-completions (C-x @)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX432"><CODE>possible-username-completions (C-x ~)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX433"><CODE>possible-username-completions (C-x ~)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX436"><CODE>possible-variable-completions (C-x $)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX437"><CODE>possible-variable-completions (C-x $)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX462"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX463"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX336"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX337"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_Q"></A>Q</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX366"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX367"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX456"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX457"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX332"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX333"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC106">8.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX344"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX345"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX466"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX467"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX368"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX369"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX470"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX471"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX494"><CODE>shell-expand-line (M-C-e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX495"><CODE>shell-expand-line (M-C-e)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX450"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX451"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC112">8.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX468"><CODE>tilde-expand (M-&#38;#38;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX469"><CODE>tilde-expand (M-&#38;#38;)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX370"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX371"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX372"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX373"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX464"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX465"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX414"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC110">8.4.5 Specifying Numeric Arguments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX415"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC110">8.4.5 Specifying Numeric Arguments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX396"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX397"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX386"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX387"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX394"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX395"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX374"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX375"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX408"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX409"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX358"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX359"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX356"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX357"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX410"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX411"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="b.html#SEC109">8.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#fn_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#fn_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#fn_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#fn_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#fn_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#fn_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#fn_G" style="text-decoration:none"><b>G</b></A>
- &nbsp; 
-<A HREF="b.html#fn_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#fn_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#fn_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#fn_M" style="text-decoration:none"><b>M</b></A>
- &nbsp; 
-<A HREF="b.html#fn_N" style="text-decoration:none"><b>N</b></A>
- &nbsp; 
-<A HREF="b.html#fn_O" style="text-decoration:none"><b>O</b></A>
- &nbsp; 
-<A HREF="b.html#fn_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#fn_Q" style="text-decoration:none"><b>Q</b></A>
- &nbsp; 
-<A HREF="b.html#fn_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#fn_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#fn_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#fn_U" style="text-decoration:none"><b>U</b></A>
- &nbsp; 
-<A HREF="b.html#fn_Y" style="text-decoration:none"><b>Y</b></A>
- &nbsp; 
-</td></tr></table><br><P>
-
-<A NAME="Concept Index"></A>
-<HR SIZE="6">
-<A NAME="SEC144"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC143"> &lt; </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139"> Up </A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H2> D.5 Concept Index </H2>
-<!--docid::SEC144::-->
-<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#cp_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#cp_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#cp_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#cp_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#cp_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#cp_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#cp_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#cp_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#cp_J" style="text-decoration:none"><b>J</b></A>
- &nbsp; 
-<A HREF="b.html#cp_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#cp_L" style="text-decoration:none"><b>L</b></A>
- &nbsp; 
-<A HREF="b.html#cp_M" style="text-decoration:none"><b>M</b></A>
- &nbsp; 
-<A HREF="b.html#cp_N" style="text-decoration:none"><b>N</b></A>
- &nbsp; 
-<A HREF="b.html#cp_O" style="text-decoration:none"><b>O</b></A>
- &nbsp; 
-<A HREF="b.html#cp_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#cp_Q" style="text-decoration:none"><b>Q</b></A>
- &nbsp; 
-<A HREF="b.html#cp_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#cp_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#cp_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#cp_V" style="text-decoration:none"><b>V</b></A>
- &nbsp; 
-<A HREF="b.html#cp_W" style="text-decoration:none"><b>W</b></A>
- &nbsp; 
-<A HREF="b.html#cp_Y" style="text-decoration:none"><b>Y</b></A>
- &nbsp; 
-</td></tr></table><br><P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_A"></A>A</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC82">alias expansion</A></TD><TD valign=top><A HREF="b.html#SEC82">6.6 Aliases</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC81">arithmetic evaluation</A></TD><TD valign=top><A HREF="b.html#SEC81">6.5 Shell Arithmetic</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC32">arithmetic expansion</A></TD><TD valign=top><A HREF="b.html#SEC32">3.5.5 Arithmetic Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC81">arithmetic, shell</A></TD><TD valign=top><A HREF="b.html#SEC81">6.5 Shell Arithmetic</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC83">arrays</A></TD><TD valign=top><A HREF="b.html#SEC83">6.7 Arrays</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_B"></A>B</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC90">background</A></TD><TD valign=top><A HREF="b.html#SEC90">7.1 Job Control Basics</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC125">Bash configuration</A></TD><TD valign=top><A HREF="b.html#SEC125">10.1 Basic Installation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC125">Bash installation</A></TD><TD valign=top><A HREF="b.html#SEC125">10.1 Basic Installation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC5">Bourne shell</A></TD><TD valign=top><A HREF="b.html#SEC5">3. Basic Shell Features</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC28">brace expansion</A></TD><TD valign=top><A HREF="b.html#SEC28">3.5.1 Brace Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX2">builtin</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC96">command editing</A></TD><TD valign=top><A HREF="b.html#SEC96">8.2.1 Readline Bare Essentials</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC50">command execution</A></TD><TD valign=top><A HREF="b.html#SEC50">3.7.2 Command Search and Execution</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC49">command expansion</A></TD><TD valign=top><A HREF="b.html#SEC49">3.7.1 Simple Command Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC118">command history</A></TD><TD valign=top><A HREF="b.html#SEC118">9.1 Bash History Facilities</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC50">command search</A></TD><TD valign=top><A HREF="b.html#SEC50">3.7.2 Command Search and Execution</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC31">command substitution</A></TD><TD valign=top><A HREF="b.html#SEC31">3.5.4 Command Substitution</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX26">command timing</A></TD><TD valign=top><A HREF="b.html#SEC17">3.2.2 Pipelines</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC19">commands, compound</A></TD><TD valign=top><A HREF="b.html#SEC19">3.2.4 Compound Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC21">commands, conditional</A></TD><TD valign=top><A HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC22">commands, grouping</A></TD><TD valign=top><A HREF="b.html#SEC22">3.2.4.3 Grouping Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC18">commands, lists</A></TD><TD valign=top><A HREF="b.html#SEC18">3.2.3 Lists of Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC20">commands, looping</A></TD><TD valign=top><A HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC17">commands, pipelines</A></TD><TD valign=top><A HREF="b.html#SEC17">3.2.2 Pipelines</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC15">commands, shell</A></TD><TD valign=top><A HREF="b.html#SEC15">3.2 Shell Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC16">commands, simple</A></TD><TD valign=top><A HREF="b.html#SEC16">3.2.1 Simple Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC14">comments, shell</A></TD><TD valign=top><A HREF="b.html#SEC14">3.1.3 Comments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC116">completion builtins</A></TD><TD valign=top><A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC125">configuration</A></TD><TD valign=top><A HREF="b.html#SEC125">10.1 Basic Installation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX3">control operator</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_D"></A>D</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC84">directory stack</A></TD><TD valign=top><A HREF="b.html#SEC84">6.8 The Directory Stack</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC96">editing command lines</A></TD><TD valign=top><A HREF="b.html#SEC96">8.2.1 Readline Bare Essentials</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC52">environment</A></TD><TD valign=top><A HREF="b.html#SEC52">3.7.4 Environment</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC81">evaluation, arithmetic</A></TD><TD valign=top><A HREF="b.html#SEC81">6.5 Shell Arithmetic</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC121">event designators</A></TD><TD valign=top><A HREF="b.html#SEC121">9.3.1 Event Designators</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC51">execution environment</A></TD><TD valign=top><A HREF="b.html#SEC51">3.7.3 Command Execution Environment</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX4">exit status</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC53">exit status</A></TD><TD valign=top><A HREF="b.html#SEC53">3.7.5 Exit Status</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC27">expansion</A></TD><TD valign=top><A HREF="b.html#SEC27">3.5 Shell Expansions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC32">expansion, arithmetic</A></TD><TD valign=top><A HREF="b.html#SEC32">3.5.5 Arithmetic Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC28">expansion, brace</A></TD><TD valign=top><A HREF="b.html#SEC28">3.5.1 Brace Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX64">expansion, filename</A></TD><TD valign=top><A HREF="b.html#SEC35">3.5.8 Filename Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC30">expansion, parameter</A></TD><TD valign=top><A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX65">expansion, pathname</A></TD><TD valign=top><A HREF="b.html#SEC35">3.5.8 Filename Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC29">expansion, tilde</A></TD><TD valign=top><A HREF="b.html#SEC29">3.5.2 Tilde Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC81">expressions, arithmetic</A></TD><TD valign=top><A HREF="b.html#SEC81">6.5 Shell Arithmetic</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC80">expressions, conditional</A></TD><TD valign=top><A HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX516">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="b.html#SEC137">C.1 GNU Free Documentation License</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX5">field</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX6">filename</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX66">filename expansion</A></TD><TD valign=top><A HREF="b.html#SEC35">3.5.8 Filename Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC90">foreground</A></TD><TD valign=top><A HREF="b.html#SEC90">7.1 Job Control Basics</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC23">functions, shell</A></TD><TD valign=top><A HREF="b.html#SEC23">3.3 Shell Functions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_H"></A>H</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC119">history builtins</A></TD><TD valign=top><A HREF="b.html#SEC119">9.2 Bash History Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX515">history events</A></TD><TD valign=top><A HREF="b.html#SEC121">9.3.1 Event Designators</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC120">history expansion</A></TD><TD valign=top><A HREF="b.html#SEC120">9.3 History Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC118">history list</A></TD><TD valign=top><A HREF="b.html#SEC118">9.1 Bash History Facilities</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX512">History, how to use</A></TD><TD valign=top><A HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX11">identifier</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC101">initialization file, readline</A></TD><TD valign=top><A HREF="b.html#SEC101">8.3 Readline Init File</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC125">installation</A></TD><TD valign=top><A HREF="b.html#SEC125">10.1 Basic Installation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC95">interaction, readline</A></TD><TD valign=top><A HREF="b.html#SEC95">8.2 Readline Interaction</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX277">interactive shell</A></TD><TD valign=top><A HREF="b.html#SEC67">6.1 Invoking Bash</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC76">interactive shell</A></TD><TD valign=top><A HREF="b.html#SEC76">6.3 Interactive Shells</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC13">internationalization</A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_J"></A>J</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX7">job</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX8">job control</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC90">job control</A></TD><TD valign=top><A HREF="b.html#SEC90">7.1 Job Control Basics</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_K"></A>K</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX293">kill ring</A></TD><TD valign=top><A HREF="b.html#SEC98">8.2.3 Readline Killing Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX291">killing text</A></TD><TD valign=top><A HREF="b.html#SEC98">8.2.3 Readline Killing Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_L"></A>L</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC13">localization</A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX276">login shell</A></TD><TD valign=top><A HREF="b.html#SEC67">6.1 Invoking Bash</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_M"></A>M</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC36">matching, pattern</A></TD><TD valign=top><A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX9">metacharacter</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_N"></A>N</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX10">name</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC13">native languages</A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC96">notation, readline</A></TD><TD valign=top><A HREF="b.html#SEC96">8.2.1 Readline Bare Essentials</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_O"></A>O</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX12">operator, shell</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_P"></A>P</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC30">parameter expansion</A></TD><TD valign=top><A HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC24">parameters</A></TD><TD valign=top><A HREF="b.html#SEC24">3.4 Shell Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC25">parameters, positional</A></TD><TD valign=top><A HREF="b.html#SEC25">3.4.1 Positional Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC26">parameters, special</A></TD><TD valign=top><A HREF="b.html#SEC26">3.4.2 Special Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX67">pathname expansion</A></TD><TD valign=top><A HREF="b.html#SEC35">3.5.8 Filename Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC36">pattern matching</A></TD><TD valign=top><A HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC17">pipeline</A></TD><TD valign=top><A HREF="b.html#SEC17">3.2.2 Pipelines</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX1">POSIX</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC88">POSIX Mode</A></TD><TD valign=top><A HREF="b.html#SEC88">6.11 Bash POSIX Mode</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX13">process group</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX14">process group ID</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC33">process substitution</A></TD><TD valign=top><A HREF="b.html#SEC33">3.5.6 Process Substitution</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC115">programmable completion</A></TD><TD valign=top><A HREF="b.html#SEC115">8.6 Programmable Completion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC86">prompting</A></TD><TD valign=top><A HREF="b.html#SEC86">6.9 Controlling the Prompt</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_Q"></A>Q</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC8">quoting</A></TD><TD valign=top><A HREF="b.html#SEC8">3.1.2 Quoting</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC12">quoting, ANSI</A></TD><TD valign=top><A HREF="b.html#SEC12">3.1.2.4 ANSI-C Quoting</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX290">Readline, how to use</A></TD><TD valign=top><A HREF="b.html#SEC92">7.3 Job Control Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC38">redirection</A></TD><TD valign=top><A HREF="b.html#SEC38">3.6 Redirections</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX15">reserved word</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC87">restricted shell</A></TD><TD valign=top><A HREF="b.html#SEC87">6.10 The Restricted Shell</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX16">return status</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_S"></A>S</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC81">shell arithmetic</A></TD><TD valign=top><A HREF="b.html#SEC81">6.5 Shell Arithmetic</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC23">shell function</A></TD><TD valign=top><A HREF="b.html#SEC23">3.3 Shell Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC55">shell script</A></TD><TD valign=top><A HREF="b.html#SEC55">3.8 Shell Scripts</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC24">shell variable</A></TD><TD valign=top><A HREF="b.html#SEC24">3.4 Shell Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC76">shell, interactive</A></TD><TD valign=top><A HREF="b.html#SEC76">6.3 Interactive Shells</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX17">signal</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC54">signal handling</A></TD><TD valign=top><A HREF="b.html#SEC54">3.7.6 Signals</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX18">special builtin</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC62">special builtin</A></TD><TD valign=top><A HREF="b.html#SEC62">4.4 Special Builtins</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC68">startup files</A></TD><TD valign=top><A HREF="b.html#SEC68">6.2 Bash Startup Files</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC90">suspending jobs</A></TD><TD valign=top><A HREF="b.html#SEC90">7.1 Job Control Basics</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_T"></A>T</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC29">tilde expansion</A></TD><TD valign=top><A HREF="b.html#SEC29">3.5.2 Tilde Expansion</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX19">token</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC13">translation, native languages</A></TD><TD valign=top><A HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC24">variable, shell</A></TD><TD valign=top><A HREF="b.html#SEC24">3.4 Shell Parameters</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX294">variables, readline</A></TD><TD valign=top><A HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_W"></A>W</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX20">word</A></TD><TD valign=top><A HREF="b.html#SEC4">2. Definitions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#SEC34">word splitting</A></TD><TD valign=top><A HREF="b.html#SEC34">3.5.7 Word Splitting</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-<TR><TH><A NAME="cp_Y"></A>Y</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="b.html#IDX292">yanking text</A></TD><TD valign=top><A HREF="b.html#SEC98">8.2.3 Readline Killing Commands</A></TD></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="b.html#cp_A" style="text-decoration:none"><b>A</b></A>
- &nbsp; 
-<A HREF="b.html#cp_B" style="text-decoration:none"><b>B</b></A>
- &nbsp; 
-<A HREF="b.html#cp_C" style="text-decoration:none"><b>C</b></A>
- &nbsp; 
-<A HREF="b.html#cp_D" style="text-decoration:none"><b>D</b></A>
- &nbsp; 
-<A HREF="b.html#cp_E" style="text-decoration:none"><b>E</b></A>
- &nbsp; 
-<A HREF="b.html#cp_F" style="text-decoration:none"><b>F</b></A>
- &nbsp; 
-<A HREF="b.html#cp_H" style="text-decoration:none"><b>H</b></A>
- &nbsp; 
-<A HREF="b.html#cp_I" style="text-decoration:none"><b>I</b></A>
- &nbsp; 
-<A HREF="b.html#cp_J" style="text-decoration:none"><b>J</b></A>
- &nbsp; 
-<A HREF="b.html#cp_K" style="text-decoration:none"><b>K</b></A>
- &nbsp; 
-<A HREF="b.html#cp_L" style="text-decoration:none"><b>L</b></A>
- &nbsp; 
-<A HREF="b.html#cp_M" style="text-decoration:none"><b>M</b></A>
- &nbsp; 
-<A HREF="b.html#cp_N" style="text-decoration:none"><b>N</b></A>
- &nbsp; 
-<A HREF="b.html#cp_O" style="text-decoration:none"><b>O</b></A>
- &nbsp; 
-<A HREF="b.html#cp_P" style="text-decoration:none"><b>P</b></A>
- &nbsp; 
-<A HREF="b.html#cp_Q" style="text-decoration:none"><b>Q</b></A>
- &nbsp; 
-<A HREF="b.html#cp_R" style="text-decoration:none"><b>R</b></A>
- &nbsp; 
-<A HREF="b.html#cp_S" style="text-decoration:none"><b>S</b></A>
- &nbsp; 
-<A HREF="b.html#cp_T" style="text-decoration:none"><b>T</b></A>
- &nbsp; 
-<A HREF="b.html#cp_V" style="text-decoration:none"><b>V</b></A>
- &nbsp; 
-<A HREF="b.html#cp_W" style="text-decoration:none"><b>W</b></A>
- &nbsp; 
-<A HREF="b.html#cp_Y" style="text-decoration:none"><b>Y</b></A>
- &nbsp; 
-</td></tr></table><br><P>
-
-<HR SIZE="6">
-<A NAME="SEC_Contents"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1>Table of Contents</H1>
-<UL>
-<A NAME="TOC1" HREF="b.html#SEC1">1. Introduction</A>
-<BR>
-<UL>
-<A NAME="TOC2" HREF="b.html#SEC2">1.1 What is Bash?</A>
-<BR>
-<A NAME="TOC3" HREF="b.html#SEC3">1.2 What is a shell?</A>
-<BR>
-</UL>
-<A NAME="TOC4" HREF="b.html#SEC4">2. Definitions</A>
-<BR>
-<A NAME="TOC5" HREF="b.html#SEC5">3. Basic Shell Features</A>
-<BR>
-<UL>
-<A NAME="TOC6" HREF="b.html#SEC6">3.1 Shell Syntax</A>
-<BR>
-<UL>
-<A NAME="TOC7" HREF="b.html#SEC7">3.1.1 Shell Operation</A>
-<BR>
-<A NAME="TOC8" HREF="b.html#SEC8">3.1.2 Quoting</A>
-<BR>
-<UL>
-<A NAME="TOC9" HREF="b.html#SEC9">3.1.2.1 Escape Character</A>
-<BR>
-<A NAME="TOC10" HREF="b.html#SEC10">3.1.2.2 Single Quotes</A>
-<BR>
-<A NAME="TOC11" HREF="b.html#SEC11">3.1.2.3 Double Quotes</A>
-<BR>
-<A NAME="TOC12" HREF="b.html#SEC12">3.1.2.4 ANSI-C Quoting</A>
-<BR>
-<A NAME="TOC13" HREF="b.html#SEC13">3.1.2.5 Locale-Specific Translation</A>
-<BR>
-</UL>
-<A NAME="TOC14" HREF="b.html#SEC14">3.1.3 Comments</A>
-<BR>
-</UL>
-<A NAME="TOC15" HREF="b.html#SEC15">3.2 Shell Commands</A>
-<BR>
-<UL>
-<A NAME="TOC16" HREF="b.html#SEC16">3.2.1 Simple Commands</A>
-<BR>
-<A NAME="TOC17" HREF="b.html#SEC17">3.2.2 Pipelines</A>
-<BR>
-<A NAME="TOC18" HREF="b.html#SEC18">3.2.3 Lists of Commands</A>
-<BR>
-<A NAME="TOC19" HREF="b.html#SEC19">3.2.4 Compound Commands</A>
-<BR>
-<UL>
-<A NAME="TOC20" HREF="b.html#SEC20">3.2.4.1 Looping Constructs</A>
-<BR>
-<A NAME="TOC21" HREF="b.html#SEC21">3.2.4.2 Conditional Constructs</A>
-<BR>
-<A NAME="TOC22" HREF="b.html#SEC22">3.2.4.3 Grouping Commands</A>
-<BR>
-</UL>
-</UL>
-<A NAME="TOC23" HREF="b.html#SEC23">3.3 Shell Functions</A>
-<BR>
-<A NAME="TOC24" HREF="b.html#SEC24">3.4 Shell Parameters</A>
-<BR>
-<UL>
-<A NAME="TOC25" HREF="b.html#SEC25">3.4.1 Positional Parameters</A>
-<BR>
-<A NAME="TOC26" HREF="b.html#SEC26">3.4.2 Special Parameters</A>
-<BR>
-</UL>
-<A NAME="TOC27" HREF="b.html#SEC27">3.5 Shell Expansions</A>
-<BR>
-<UL>
-<A NAME="TOC28" HREF="b.html#SEC28">3.5.1 Brace Expansion</A>
-<BR>
-<A NAME="TOC29" HREF="b.html#SEC29">3.5.2 Tilde Expansion</A>
-<BR>
-<A NAME="TOC30" HREF="b.html#SEC30">3.5.3 Shell Parameter Expansion</A>
-<BR>
-<A NAME="TOC31" HREF="b.html#SEC31">3.5.4 Command Substitution</A>
-<BR>
-<A NAME="TOC32" HREF="b.html#SEC32">3.5.5 Arithmetic Expansion</A>
-<BR>
-<A NAME="TOC33" HREF="b.html#SEC33">3.5.6 Process Substitution</A>
-<BR>
-<A NAME="TOC34" HREF="b.html#SEC34">3.5.7 Word Splitting</A>
-<BR>
-<A NAME="TOC35" HREF="b.html#SEC35">3.5.8 Filename Expansion</A>
-<BR>
-<UL>
-<A NAME="TOC36" HREF="b.html#SEC36">3.5.8.1 Pattern Matching</A>
-<BR>
-</UL>
-<A NAME="TOC37" HREF="b.html#SEC37">3.5.9 Quote Removal</A>
-<BR>
-</UL>
-<A NAME="TOC38" HREF="b.html#SEC38">3.6 Redirections</A>
-<BR>
-<UL>
-<A NAME="TOC39" HREF="b.html#SEC39">3.6.1 Redirecting Input</A>
-<BR>
-<A NAME="TOC40" HREF="b.html#SEC40">3.6.2 Redirecting Output</A>
-<BR>
-<A NAME="TOC41" HREF="b.html#SEC41">3.6.3 Appending Redirected Output</A>
-<BR>
-<A NAME="TOC42" HREF="b.html#SEC42">3.6.4 Redirecting Standard Output and Standard Error</A>
-<BR>
-<A NAME="TOC43" HREF="b.html#SEC43">3.6.5 Here Documents</A>
-<BR>
-<A NAME="TOC44" HREF="b.html#SEC44">3.6.6 Here Strings</A>
-<BR>
-<A NAME="TOC45" HREF="b.html#SEC45">3.6.7 Duplicating File Descriptors</A>
-<BR>
-<A NAME="TOC46" HREF="b.html#SEC46">3.6.8 Moving File Descriptors</A>
-<BR>
-<A NAME="TOC47" HREF="b.html#SEC47">3.6.9 Opening File Descriptors for Reading and Writing</A>
-<BR>
-</UL>
-<A NAME="TOC48" HREF="b.html#SEC48">3.7 Executing Commands</A>
-<BR>
-<UL>
-<A NAME="TOC49" HREF="b.html#SEC49">3.7.1 Simple Command Expansion</A>
-<BR>
-<A NAME="TOC50" HREF="b.html#SEC50">3.7.2 Command Search and Execution</A>
-<BR>
-<A NAME="TOC51" HREF="b.html#SEC51">3.7.3 Command Execution Environment</A>
-<BR>
-<A NAME="TOC52" HREF="b.html#SEC52">3.7.4 Environment</A>
-<BR>
-<A NAME="TOC53" HREF="b.html#SEC53">3.7.5 Exit Status</A>
-<BR>
-<A NAME="TOC54" HREF="b.html#SEC54">3.7.6 Signals</A>
-<BR>
-</UL>
-<A NAME="TOC55" HREF="b.html#SEC55">3.8 Shell Scripts</A>
-<BR>
-</UL>
-<A NAME="TOC56" HREF="b.html#SEC56">4. Shell Builtin Commands</A>
-<BR>
-<UL>
-<A NAME="TOC57" HREF="b.html#SEC57">4.1 Bourne Shell Builtins</A>
-<BR>
-<A NAME="TOC58" HREF="b.html#SEC58">4.2 Bash Builtin Commands</A>
-<BR>
-<A NAME="TOC59" HREF="b.html#SEC59">4.3 Modifying Shell Behavior</A>
-<BR>
-<UL>
-<A NAME="TOC60" HREF="b.html#SEC60">4.3.1 The Set Builtin</A>
-<BR>
-<A NAME="TOC61" HREF="b.html#SEC61">4.3.2 The Shopt Builtin</A>
-<BR>
-</UL>
-<A NAME="TOC62" HREF="b.html#SEC62">4.4 Special Builtins</A>
-<BR>
-</UL>
-<A NAME="TOC63" HREF="b.html#SEC63">5. Shell Variables</A>
-<BR>
-<UL>
-<A NAME="TOC64" HREF="b.html#SEC64">5.1 Bourne Shell Variables</A>
-<BR>
-<A NAME="TOC65" HREF="b.html#SEC65">5.2 Bash Variables</A>
-<BR>
-</UL>
-<A NAME="TOC66" HREF="b.html#SEC66">6. Bash Features</A>
-<BR>
-<UL>
-<A NAME="TOC67" HREF="b.html#SEC67">6.1 Invoking Bash</A>
-<BR>
-<A NAME="TOC68" HREF="b.html#SEC68">6.2 Bash Startup Files</A>
-<BR>
-<A NAME="TOC76" HREF="b.html#SEC76">6.3 Interactive Shells</A>
-<BR>
-<UL>
-<A NAME="TOC77" HREF="b.html#SEC77">6.3.1 What is an Interactive Shell?</A>
-<BR>
-<A NAME="TOC78" HREF="b.html#SEC78">6.3.2 Is this Shell Interactive?</A>
-<BR>
-<A NAME="TOC79" HREF="b.html#SEC79">6.3.3 Interactive Shell Behavior</A>
-<BR>
-</UL>
-<A NAME="TOC80" HREF="b.html#SEC80">6.4 Bash Conditional Expressions</A>
-<BR>
-<A NAME="TOC81" HREF="b.html#SEC81">6.5 Shell Arithmetic</A>
-<BR>
-<A NAME="TOC82" HREF="b.html#SEC82">6.6 Aliases</A>
-<BR>
-<A NAME="TOC83" HREF="b.html#SEC83">6.7 Arrays</A>
-<BR>
-<A NAME="TOC84" HREF="b.html#SEC84">6.8 The Directory Stack</A>
-<BR>
-<UL>
-<A NAME="TOC85" HREF="b.html#SEC85">6.8.1 Directory Stack Builtins</A>
-<BR>
-</UL>
-<A NAME="TOC86" HREF="b.html#SEC86">6.9 Controlling the Prompt</A>
-<BR>
-<A NAME="TOC87" HREF="b.html#SEC87">6.10 The Restricted Shell</A>
-<BR>
-<A NAME="TOC88" HREF="b.html#SEC88">6.11 Bash POSIX Mode</A>
-<BR>
-</UL>
-<A NAME="TOC89" HREF="b.html#SEC89">7. Job Control</A>
-<BR>
-<UL>
-<A NAME="TOC90" HREF="b.html#SEC90">7.1 Job Control Basics</A>
-<BR>
-<A NAME="TOC91" HREF="b.html#SEC91">7.2 Job Control Builtins</A>
-<BR>
-<A NAME="TOC92" HREF="b.html#SEC92">7.3 Job Control Variables</A>
-<BR>
-</UL>
-<A NAME="TOC93" HREF="b.html#SEC93">8. Command Line Editing</A>
-<BR>
-<UL>
-<A NAME="TOC94" HREF="b.html#SEC94">8.1 Introduction to Line Editing</A>
-<BR>
-<A NAME="TOC95" HREF="b.html#SEC95">8.2 Readline Interaction</A>
-<BR>
-<UL>
-<A NAME="TOC96" HREF="b.html#SEC96">8.2.1 Readline Bare Essentials</A>
-<BR>
-<A NAME="TOC97" HREF="b.html#SEC97">8.2.2 Readline Movement Commands</A>
-<BR>
-<A NAME="TOC98" HREF="b.html#SEC98">8.2.3 Readline Killing Commands</A>
-<BR>
-<A NAME="TOC99" HREF="b.html#SEC99">8.2.4 Readline Arguments</A>
-<BR>
-<A NAME="TOC100" HREF="b.html#SEC100">8.2.5 Searching for Commands in the History</A>
-<BR>
-</UL>
-<A NAME="TOC101" HREF="b.html#SEC101">8.3 Readline Init File</A>
-<BR>
-<UL>
-<A NAME="TOC102" HREF="b.html#SEC102">8.3.1 Readline Init File Syntax</A>
-<BR>
-<A NAME="TOC103" HREF="b.html#SEC103">8.3.2 Conditional Init Constructs</A>
-<BR>
-<A NAME="TOC104" HREF="b.html#SEC104">8.3.3 Sample Init File</A>
-<BR>
-</UL>
-<A NAME="TOC105" HREF="b.html#SEC105">8.4 Bindable Readline Commands</A>
-<BR>
-<UL>
-<A NAME="TOC106" HREF="b.html#SEC106">8.4.1 Commands For Moving</A>
-<BR>
-<A NAME="TOC107" HREF="b.html#SEC107">8.4.2 Commands For Manipulating The History</A>
-<BR>
-<A NAME="TOC108" HREF="b.html#SEC108">8.4.3 Commands For Changing Text</A>
-<BR>
-<A NAME="TOC109" HREF="b.html#SEC109">8.4.4 Killing And Yanking</A>
-<BR>
-<A NAME="TOC110" HREF="b.html#SEC110">8.4.5 Specifying Numeric Arguments</A>
-<BR>
-<A NAME="TOC111" HREF="b.html#SEC111">8.4.6 Letting Readline Type For You</A>
-<BR>
-<A NAME="TOC112" HREF="b.html#SEC112">8.4.7 Keyboard Macros</A>
-<BR>
-<A NAME="TOC113" HREF="b.html#SEC113">8.4.8 Some Miscellaneous Commands</A>
-<BR>
-</UL>
-<A NAME="TOC114" HREF="b.html#SEC114">8.5 Readline vi Mode</A>
-<BR>
-<A NAME="TOC115" HREF="b.html#SEC115">8.6 Programmable Completion</A>
-<BR>
-<A NAME="TOC116" HREF="b.html#SEC116">8.7 Programmable Completion Builtins</A>
-<BR>
-</UL>
-<A NAME="TOC117" HREF="b.html#SEC117">9. Using History Interactively</A>
-<BR>
-<UL>
-<A NAME="TOC118" HREF="b.html#SEC118">9.1 Bash History Facilities</A>
-<BR>
-<A NAME="TOC119" HREF="b.html#SEC119">9.2 Bash History Builtins</A>
-<BR>
-<A NAME="TOC120" HREF="b.html#SEC120">9.3 History Expansion</A>
-<BR>
-<UL>
-<A NAME="TOC121" HREF="b.html#SEC121">9.3.1 Event Designators</A>
-<BR>
-<A NAME="TOC122" HREF="b.html#SEC122">9.3.2 Word Designators</A>
-<BR>
-<A NAME="TOC123" HREF="b.html#SEC123">9.3.3 Modifiers</A>
-<BR>
-</UL>
-</UL>
-<A NAME="TOC124" HREF="b.html#SEC124">10. Installing Bash</A>
-<BR>
-<UL>
-<A NAME="TOC125" HREF="b.html#SEC125">10.1 Basic Installation</A>
-<BR>
-<A NAME="TOC126" HREF="b.html#SEC126">10.2 Compilers and Options</A>
-<BR>
-<A NAME="TOC127" HREF="b.html#SEC127">10.3 Compiling For Multiple Architectures</A>
-<BR>
-<A NAME="TOC128" HREF="b.html#SEC128">10.4 Installation Names</A>
-<BR>
-<A NAME="TOC129" HREF="b.html#SEC129">10.5 Specifying the System Type</A>
-<BR>
-<A NAME="TOC130" HREF="b.html#SEC130">10.6 Sharing Defaults</A>
-<BR>
-<A NAME="TOC131" HREF="b.html#SEC131">10.7 Operation Controls</A>
-<BR>
-<A NAME="TOC132" HREF="b.html#SEC132">10.8 Optional Features</A>
-<BR>
-</UL>
-<A NAME="TOC133" HREF="b.html#SEC133">A. Reporting Bugs</A>
-<BR>
-<A NAME="TOC134" HREF="b.html#SEC134">B. Major Differences From The Bourne Shell</A>
-<BR>
-<UL>
-<A NAME="TOC135" HREF="b.html#SEC135">B.1 Implementation Differences From The SVR4.2 Shell</A>
-<BR>
-</UL>
-<A NAME="TOC136" HREF="b.html#SEC136">C. Copying This Manual</A>
-<BR>
-<UL>
-<A NAME="TOC137" HREF="b.html#SEC137">C.1 GNU Free Documentation License</A>
-<BR>
-<UL>
-<A NAME="TOC138" HREF="b.html#SEC138">C.1.1 ADDENDUM: How to use this License for your documents</A>
-<BR>
-</UL>
-</UL>
-<A NAME="TOC139" HREF="b.html#SEC139">D. Indexes</A>
-<BR>
-<UL>
-<A NAME="TOC140" HREF="b.html#SEC140">D.1 Index of Shell Builtin Commands</A>
-<BR>
-<A NAME="TOC141" HREF="b.html#SEC141">D.2 Index of Shell Reserved Words</A>
-<BR>
-<A NAME="TOC142" HREF="b.html#SEC142">D.3 Parameter and Variable Index</A>
-<BR>
-<A NAME="TOC143" HREF="b.html#SEC143">D.4 Function Index</A>
-<BR>
-<A NAME="TOC144" HREF="b.html#SEC144">D.5 Concept Index</A>
-<BR>
-</UL>
-</UL>
-<HR SIZE=1>
-<A NAME="SEC_OVERVIEW"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1>Short Table of Contents</H1>
-<BLOCKQUOTE>
-<A NAME="TOC1" HREF="b.html#SEC1">1. Introduction</A>
-<BR>
-<A NAME="TOC4" HREF="b.html#SEC4">2. Definitions</A>
-<BR>
-<A NAME="TOC5" HREF="b.html#SEC5">3. Basic Shell Features</A>
-<BR>
-<A NAME="TOC56" HREF="b.html#SEC56">4. Shell Builtin Commands</A>
-<BR>
-<A NAME="TOC63" HREF="b.html#SEC63">5. Shell Variables</A>
-<BR>
-<A NAME="TOC66" HREF="b.html#SEC66">6. Bash Features</A>
-<BR>
-<A NAME="TOC89" HREF="b.html#SEC89">7. Job Control</A>
-<BR>
-<A NAME="TOC93" HREF="b.html#SEC93">8. Command Line Editing</A>
-<BR>
-<A NAME="TOC117" HREF="b.html#SEC117">9. Using History Interactively</A>
-<BR>
-<A NAME="TOC124" HREF="b.html#SEC124">10. Installing Bash</A>
-<BR>
-<A NAME="TOC133" HREF="b.html#SEC133">A. Reporting Bugs</A>
-<BR>
-<A NAME="TOC134" HREF="b.html#SEC134">B. Major Differences From The Bourne Shell</A>
-<BR>
-<A NAME="TOC136" HREF="b.html#SEC136">C. Copying This Manual</A>
-<BR>
-<A NAME="TOC139" HREF="b.html#SEC139">D. Indexes</A>
-<BR>
-
-</BLOCKQUOTE>
-<HR SIZE=1>
-<A NAME="SEC_About"></A>
-<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
-<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Top">Top</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_Contents">Contents</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC139">Index</A>]</TD>
-<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="b.html#SEC_About"> ? </A>]</TD>
-</TR></TABLE>
-<H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>January, 11  2007</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-<P></P>  
-The buttons in the navigation panels have the following meaning:
-<P></P>
-<table border = "1">
-<TR>
-<TH> Button </TH>
-<TH> Name </TH>
-<TH> Go to </TH>
-<TH> From 1.2.3 go to</TH>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ &lt; ] </TD>
-<TD ALIGN="CENTER">
-Back
-</TD>
-<TD>
-previous section in reading order
-</TD>
-<TD>
-1.2.2
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ &gt; ] </TD>
-<TD ALIGN="CENTER">
-Forward
-</TD>
-<TD>
-next section in reading order
-</TD>
-<TD>
-1.2.4
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ &lt;&lt; ] </TD>
-<TD ALIGN="CENTER">
-FastBack
-</TD>
-<TD>
-previous or up-and-previous section 
-</TD>
-<TD>
-1.1
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ Up ] </TD>
-<TD ALIGN="CENTER">
-Up
-</TD>
-<TD>
-up section
-</TD>
-<TD>
-1.2
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ &gt;&gt; ] </TD>
-<TD ALIGN="CENTER">
-FastForward
-</TD>
-<TD>
-next or up-and-next section
-</TD>
-<TD>
-1.3
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [Top] </TD>
-<TD ALIGN="CENTER">
-Top
-</TD>
-<TD>
-cover (top) of document
-</TD>
-<TD>
- &nbsp; 
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [Contents] </TD>
-<TD ALIGN="CENTER">
-Contents
-</TD>
-<TD>
-table of contents
-</TD>
-<TD>
- &nbsp; 
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [Index] </TD>
-<TD ALIGN="CENTER">
-Index
-</TD>
-<TD>
-concept index
-</TD>
-<TD>
- &nbsp; 
-</TD>
-</TR>
-<TR>
-<TD ALIGN="CENTER">
- [ ? ] </TD>
-<TD ALIGN="CENTER">
-About
-</TD>
-<TD>
-this page
-</TD>
-<TD>
- &nbsp; 
-</TD>
-</TR>
-</TABLE>
-<P></P>
-where the <STRONG> Example </STRONG> assumes that the current position 
-is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of 
-the following structure:
-<UL>
-<LI> 1. Section One  </LI>
-<UL>
-<LI>1.1 Subsection One-One</LI>
-<UL>
-<LI> ... </LI>
-</UL>
-<LI>1.2 Subsection One-Two</LI>
-<UL>
-<LI>1.2.1 Subsubsection One-Two-One
-</LI><LI>1.2.2 Subsubsection One-Two-Two
-</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
-&lt;== Current Position </STRONG>
-</LI><LI>1.2.4 Subsubsection One-Two-Four
-</LI></UL>
-<LI>1.3 Subsection One-Three</LI>
-<UL>
-<LI> ... </LI>
-</UL>
-<LI>1.4 Subsection One-Four</LI>
-</UL>
-</UL>
-
-<HR SIZE=1>
-<BR>  
-<FONT SIZE="-1">
-This document was generated
-by <I>Chet Ramey</I> on <I>January, 11  2007</I>
-using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
-"><I>texi2html</I></A>
-
-</BODY>
-</HTML>
diff --git a/fdprintf.c b/fdprintf.c
deleted file mode 100644 (file)
index cfe13bf..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* fdprintf -- printf to a file descriptor
-
-   Copyright (C) 2008 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-                                 
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#if !HAVE_FDPRINTF
-
-#include <stdc.h>
-
-#if defined (HAVE_UNISTD_H)
-#  include <unistd.h>
-#endif
-
-#if defined (PREFER_STDARG)
-#  include <stdarg.h>
-#else
-#  include <varargs.h>
-#endif
-
-#include <stdio.h>
-
-int
-#if defined (PREFER_STDARG)
-fdprintf(int fd, const char *format, ...)
-#else
-fdprintf(fd, format, va_alist)
-     int fd;
-     const char *format;
-     va_dcl
-#endif
-{
-  FILE *fp;
-  int rc, r2;
-  va_list args;
-
-  fp = fdopen (dup (fd), "w");
-  if (fp == 0)
-    return -1;
-
-  SH_VA_START (args, format);
-  rc = vfprintf (fp, fmt, ap);
-  fflush (fp);
-  va_end (args);
-
-  r2 = fclose (fp);    /* check here */
-
-  return rc;
-}           
-#endif
diff --git a/lib/readline/copyright-comment b/lib/readline/copyright-comment
deleted file mode 100644 (file)
index eea44d2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-   Readline is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   Readline is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with Readline.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/lib/readline/copyright-history b/lib/readline/copyright-history
deleted file mode 100644 (file)
index 6e7422e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-   History is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   History is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with History.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/parse.y.yacc b/parse.y.yacc
deleted file mode 100644 (file)
index 438163d..0000000
+++ /dev/null
@@ -1,5726 +0,0 @@
-/* parse.y - Yacc grammar for bash. */
-
-/* Copyright (C) 1989-2009 Free Software Foundation, Inc.
-
-   This file is part of GNU Bash, the Bourne Again SHell.
-
-   Bash is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   Bash is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-%{
-#include "config.h"
-
-#include "bashtypes.h"
-#include "bashansi.h"
-
-#include "filecntl.h"
-
-#if defined (HAVE_UNISTD_H)
-#  include <unistd.h>
-#endif
-
-#if defined (HAVE_LOCALE_H)
-#  include <locale.h>
-#endif
-
-#include <stdio.h>
-#include "chartypes.h"
-#include <signal.h>
-
-#include "memalloc.h"
-
-#include "bashintl.h"
-
-#define NEED_STRFTIME_DECL     /* used in externs.h */
-
-#include "shell.h"
-#include "trap.h"
-#include "flags.h"
-#include "parser.h"
-#include "mailcheck.h"
-#include "test.h"
-#include "builtins.h"
-#include "builtins/common.h"
-#include "builtins/builtext.h"
-
-#include "shmbutil.h"
-
-#if defined (READLINE)
-#  include "bashline.h"
-#  include <readline/readline.h>
-#endif /* READLINE */
-
-#if defined (HISTORY)
-#  include "bashhist.h"
-#  include <readline/history.h>
-#endif /* HISTORY */
-
-#if defined (JOB_CONTROL)
-#  include "jobs.h"
-#endif /* JOB_CONTROL */
-
-#if defined (ALIAS)
-#  include "alias.h"
-#else
-typedef void *alias_t;
-#endif /* ALIAS */
-
-#if defined (PROMPT_STRING_DECODE)
-#  ifndef _MINIX
-#    include <sys/param.h>
-#  endif
-#  include <time.h>
-#  if defined (TM_IN_SYS_TIME)
-#    include <sys/types.h>
-#    include <sys/time.h>
-#  endif /* TM_IN_SYS_TIME */
-#  include "maxpath.h"
-#endif /* PROMPT_STRING_DECODE */
-
-#define RE_READ_TOKEN  -99
-#define NO_EXPANSION   -100
-
-#ifdef DEBUG
-#  define YYDEBUG 1
-#else
-#  define YYDEBUG 0
-#endif
-
-#if defined (HANDLE_MULTIBYTE)
-#  define last_shell_getc_is_singlebyte \
-       ((shell_input_line_index > 1) \
-               ? shell_input_line_property[shell_input_line_index - 1] \
-               : 1)
-#  define MBTEST(x)    ((x) && last_shell_getc_is_singlebyte)
-#else
-#  define last_shell_getc_is_singlebyte        1
-#  define MBTEST(x)    ((x))
-#endif
-
-#if defined (EXTENDED_GLOB)
-extern int extended_glob;
-#endif
-
-extern int eof_encountered;
-extern int no_line_editing, running_under_emacs;
-extern int current_command_number;
-extern int sourcelevel, parse_and_execute_level;
-extern int posixly_correct;
-extern int last_command_exit_value;
-extern char *shell_name, *current_host_name;
-extern char *dist_version;
-extern int patch_level;
-extern int dump_translatable_strings, dump_po_strings;
-extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
-#if defined (BUFFERED_INPUT)
-extern int bash_input_fd_changed;
-#endif
-
-extern int errno;
-/* **************************************************************** */
-/*                                                                 */
-/*                 "Forward" declarations                          */
-/*                                                                 */
-/* **************************************************************** */
-
-#ifdef DEBUG
-static void debug_parser __P((int));
-#endif
-
-static int yy_getc __P((void));
-static int yy_ungetc __P((int));
-
-#if defined (READLINE)
-static int yy_readline_get __P((void));
-static int yy_readline_unget __P((int));
-#endif
-
-static int yy_string_get __P((void));
-static int yy_string_unget __P((int));
-static void rewind_input_string __P((void));
-static int yy_stream_get __P((void));
-static int yy_stream_unget __P((int));
-
-static int shell_getc __P((int));
-static void shell_ungetc __P((int));
-static void discard_until __P((int));
-
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-static void push_string __P((char *, int, alias_t *));
-static void pop_string __P((void));
-static void free_string_list __P((void));
-#endif
-
-static char *read_a_line __P((int));
-
-static int reserved_word_acceptable __P((int));
-static int yylex __P((void));
-static int alias_expand_token __P((char *));
-static int time_command_acceptable __P((void));
-static int special_case_tokens __P((char *));
-static int read_token __P((int));
-static char *parse_matched_pair __P((int, int, int, int *, int));
-static char *parse_comsub __P((int, int, int, int *, int));
-#if defined (ARRAY_VARS)
-static char *parse_compound_assignment __P((int *));
-#endif
-#if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
-static int parse_dparen __P((int));
-static int parse_arith_cmd __P((char **, int));
-#endif
-#if defined (COND_COMMAND)
-static void cond_error __P((void));
-static COND_COM *cond_expr __P((void));
-static COND_COM *cond_or __P((void));
-static COND_COM *cond_and __P((void));
-static COND_COM *cond_term __P((void));
-static int cond_skip_newlines __P((void));
-static COMMAND *parse_cond_command __P((void));
-#endif
-#if defined (ARRAY_VARS)
-static int token_is_assignment __P((char *, int));
-static int token_is_ident __P((char *, int));
-#endif
-static int read_token_word __P((int));
-static void discard_parser_constructs __P((int));
-
-static char *error_token_from_token __P((int));
-static char *error_token_from_text __P((void));
-static void print_offending_line __P((void));
-static void report_syntax_error __P((char *));
-
-static void handle_eof_input_unit __P((void));
-static void prompt_again __P((void));
-#if 0
-static void reset_readline_prompt __P((void));
-#endif
-static void print_prompt __P((void));
-
-#if defined (HANDLE_MULTIBYTE)
-static void set_line_mbstate __P((void));
-static char *shell_input_line_property = NULL;
-#else
-#  define set_line_mbstate()
-#endif
-
-extern int yyerror __P((const char *));
-
-#ifdef DEBUG
-extern int yydebug;
-#endif
-
-/* Default prompt strings */
-char *primary_prompt = PPROMPT;
-char *secondary_prompt = SPROMPT;
-
-/* PROMPT_STRING_POINTER points to one of these, never to an actual string. */
-char *ps1_prompt, *ps2_prompt;
-
-/* Handle on the current prompt string.  Indirectly points through
-   ps1_ or ps2_prompt. */
-char **prompt_string_pointer = (char **)NULL;
-char *current_prompt_string;
-
-/* Non-zero means we expand aliases in commands. */
-int expand_aliases = 0;
-
-/* If non-zero, the decoded prompt string undergoes parameter and
-   variable substitution, command substitution, arithmetic substitution,
-   string expansion, process substitution, and quote removal in
-   decode_prompt_string. */
-int promptvars = 1;
-
-/* If non-zero, $'...' and $"..." are expanded when they appear within
-   a ${...} expansion, even when the expansion appears within double
-   quotes. */
-int extended_quote = 1;
-
-/* The decoded prompt string.  Used if READLINE is not defined or if
-   editing is turned off.  Analogous to current_readline_prompt. */
-static char *current_decoded_prompt;
-
-/* The number of lines read from input while creating the current command. */
-int current_command_line_count;
-
-/* The token that currently denotes the end of parse. */
-int shell_eof_token;
-
-/* The token currently being read. */
-int current_token;
-
-/* Variables to manage the task of reading here documents, because we need to
-   defer the reading until after a complete command has been collected. */
-static REDIRECT *redir_stack[10];
-int need_here_doc;
-
-/* Where shell input comes from.  History expansion is performed on each
-   line when the shell is interactive. */
-static char *shell_input_line = (char *)NULL;
-static int shell_input_line_index;
-static int shell_input_line_size;      /* Amount allocated for shell_input_line. */
-static int shell_input_line_len;       /* strlen (shell_input_line) */
-
-/* Either zero or EOF. */
-static int shell_input_line_terminator;
-
-/* The line number in a script on which a function definition starts. */
-static int function_dstart;
-
-/* The line number in a script on which a function body starts. */
-static int function_bstart;
-
-/* The line number in a script at which an arithmetic for command starts. */
-static int arith_for_lineno;
-
-/* The current parser state. */
-static int parser_state;
-
-/* The last read token, or NULL.  read_token () uses this for context
-   checking. */
-static int last_read_token;
-
-/* The token read prior to last_read_token. */
-static int token_before_that;
-
-/* The token read prior to token_before_that. */
-static int two_tokens_ago;
-
-/* The line number in a script where the word in a `case WORD', `select WORD'
-   or `for WORD' begins.  This is a nested command maximum, since the array
-   index is decremented after a case, select, or for command is parsed. */
-#define MAX_CASE_NEST  128
-static int word_lineno[MAX_CASE_NEST];
-static int word_top = -1;
-
-/* If non-zero, it is the token that we want read_token to return
-   regardless of what text is (or isn't) present to be read.  This
-   is reset by read_token.  If token_to_read == WORD or
-   ASSIGNMENT_WORD, yylval.word should be set to word_desc_to_read. */
-static int token_to_read;
-static WORD_DESC *word_desc_to_read;
-
-static REDIRECTEE redir;
-%}
-
-%union {
-  WORD_DESC *word;             /* the word that we read. */
-  int number;                  /* the number that we read. */
-  WORD_LIST *word_list;
-  COMMAND *command;
-  REDIRECT *redirect;
-  ELEMENT element;
-  PATTERN_LIST *pattern;
-}
-
-/* Reserved words.  Members of the first group are only recognized
-   in the case that they are preceded by a list_terminator.  Members
-   of the second group are for [[...]] commands.  Members of the
-   third group are recognized only under special circumstances. */
-%token IF THEN ELSE ELIF FI CASE ESAC FOR SELECT WHILE UNTIL DO DONE FUNCTION COPROC
-%token COND_START COND_END COND_ERROR
-%token IN BANG TIME TIMEOPT
-
-/* More general tokens. yylex () knows how to make these. */
-%token <word> WORD ASSIGNMENT_WORD
-%token <number> NUMBER
-%token <word_list> ARITH_CMD ARITH_FOR_EXPRS
-%token <command> COND_CMD
-%token AND_AND OR_OR GREATER_GREATER LESS_LESS LESS_AND LESS_LESS_LESS
-%token GREATER_AND SEMI_SEMI SEMI_AND SEMI_SEMI_AND
-%token LESS_LESS_MINUS AND_GREATER AND_GREATER_GREATER LESS_GREATER
-%token GREATER_BAR BAR_AND
-
-/* The types that the various syntactical units return. */
-
-%type <command> inputunit command pipeline pipeline_command
-%type <command> list list0 list1 compound_list simple_list simple_list1
-%type <command> simple_command shell_command
-%type <command> for_command select_command case_command group_command
-%type <command> arith_command
-%type <command> cond_command
-%type <command> arith_for_command
-%type <command> coproc
-%type <command> function_def function_body if_command elif_clause subshell
-%type <redirect> redirection redirection_list
-%type <element> simple_command_element
-%type <word_list> word_list pattern
-%type <pattern> pattern_list case_clause_sequence case_clause
-%type <number> timespec
-%type <number> list_terminator
-
-%start inputunit
-
-%left '&' ';' '\n' yacc_EOF
-%left AND_AND OR_OR
-%right '|' BAR_AND
-%%
-
-inputunit:     simple_list simple_list_terminator
-                       {
-                         /* Case of regular command.  Discard the error
-                            safety net,and return the command just parsed. */
-                         global_command = $1;
-                         eof_encountered = 0;
-                         /* discard_parser_constructs (0); */
-                         if (parser_state & PST_CMDSUBST)
-                           parser_state |= PST_EOFTOKEN;
-                         YYACCEPT;
-                       }
-       |       '\n'
-                       {
-                         /* Case of regular command, but not a very
-                            interesting one.  Return a NULL command. */
-                         global_command = (COMMAND *)NULL;
-                         if (parser_state & PST_CMDSUBST)
-                           parser_state |= PST_EOFTOKEN;
-                         YYACCEPT;
-                       }
-       |       error '\n'
-                       {
-                         /* Error during parsing.  Return NULL command. */
-                         global_command = (COMMAND *)NULL;
-                         eof_encountered = 0;
-                         /* discard_parser_constructs (1); */
-                         if (interactive && parse_and_execute_level == 0)
-                           {
-                             YYACCEPT;
-                           }
-                         else
-                           {
-                             YYABORT;
-                           }
-                       }
-       |       yacc_EOF
-                       {
-                         /* Case of EOF seen by itself.  Do ignoreeof or
-                            not. */
-                         global_command = (COMMAND *)NULL;
-                         handle_eof_input_unit ();
-                         YYACCEPT;
-                       }
-       ;
-
-word_list:     WORD
-                       { $$ = make_word_list ($1, (WORD_LIST *)NULL); }
-       |       word_list WORD
-                       { $$ = make_word_list ($2, $1); }
-       ;
-
-redirection:   '>' WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (1, r_output_direction, redir);
-                       }
-       |       '<' WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (0, r_input_direction, redir);
-                       }
-       |       NUMBER '>' WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_output_direction, redir);
-                       }
-       |       NUMBER '<' WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_input_direction, redir);
-                       }
-       |       GREATER_GREATER WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (1, r_appending_to, redir);
-                       }
-       |       NUMBER GREATER_GREATER WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_appending_to, redir);
-                       }
-       |       LESS_LESS WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (0, r_reading_until, redir);
-                         redir_stack[need_here_doc++] = $$;
-                       }
-       |       NUMBER LESS_LESS WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_reading_until, redir);
-                         redir_stack[need_here_doc++] = $$;
-                       }
-       |       LESS_LESS_LESS WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (0, r_reading_string, redir);
-                       }
-       |       NUMBER LESS_LESS_LESS WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_reading_string, redir);
-                       }
-       |       LESS_AND NUMBER
-                       {
-                         redir.dest = $2;
-                         $$ = make_redirection (0, r_duplicating_input, redir);
-                       }
-       |       NUMBER LESS_AND NUMBER
-                       {
-                         redir.dest = $3;
-                         $$ = make_redirection ($1, r_duplicating_input, redir);
-                       }
-       |       GREATER_AND NUMBER
-                       {
-                         redir.dest = $2;
-                         $$ = make_redirection (1, r_duplicating_output, redir);
-                       }
-       |       NUMBER GREATER_AND NUMBER
-                       {
-                         redir.dest = $3;
-                         $$ = make_redirection ($1, r_duplicating_output, redir);
-                       }
-       |       LESS_AND WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (0, r_duplicating_input_word, redir);
-                       }
-       |       NUMBER LESS_AND WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_duplicating_input_word, redir);
-                       }
-       |       GREATER_AND WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (1, r_duplicating_output_word, redir);
-                       }
-       |       NUMBER GREATER_AND WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_duplicating_output_word, redir);
-                       }
-       |       LESS_LESS_MINUS WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection
-                           (0, r_deblank_reading_until, redir);
-                         redir_stack[need_here_doc++] = $$;
-                       }
-       |       NUMBER LESS_LESS_MINUS WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection
-                           ($1, r_deblank_reading_until, redir);
-                         redir_stack[need_here_doc++] = $$;
-                       }
-       |       GREATER_AND '-'
-                       {
-                         redir.dest = 0;
-                         $$ = make_redirection (1, r_close_this, redir);
-                       }
-       |       NUMBER GREATER_AND '-'
-                       {
-                         redir.dest = 0;
-                         $$ = make_redirection ($1, r_close_this, redir);
-                       }
-       |       LESS_AND '-'
-                       {
-                         redir.dest = 0;
-                         $$ = make_redirection (0, r_close_this, redir);
-                       }
-       |       NUMBER LESS_AND '-'
-                       {
-                         redir.dest = 0;
-                         $$ = make_redirection ($1, r_close_this, redir);
-                       }
-       |       AND_GREATER WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (1, r_err_and_out, redir);
-                       }
-       |       AND_GREATER_GREATER WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (1, r_append_err_and_out, redir);
-                       }
-       |       NUMBER LESS_GREATER WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_input_output, redir);
-                       }
-       |       LESS_GREATER WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (0, r_input_output, redir);
-                       }
-       |       GREATER_BAR WORD
-                       {
-                         redir.filename = $2;
-                         $$ = make_redirection (1, r_output_force, redir);
-                       }
-       |       NUMBER GREATER_BAR WORD
-                       {
-                         redir.filename = $3;
-                         $$ = make_redirection ($1, r_output_force, redir);
-                       }
-       ;
-
-simple_command_element: WORD
-                       { $$.word = $1; $$.redirect = 0; }
-       |       ASSIGNMENT_WORD
-                       { $$.word = $1; $$.redirect = 0; }
-       |       redirection
-                       { $$.redirect = $1; $$.word = 0; }
-       ;
-
-redirection_list: redirection
-                       {
-                         $$ = $1;
-                       }
-       |       redirection_list redirection
-                       {
-                         register REDIRECT *t;
-
-                         for (t = $1; t->next; t = t->next)
-                           ;
-                         t->next = $2;
-                         $$ = $1;
-                       }
-       ;
-
-simple_command:        simple_command_element
-                       { $$ = make_simple_command ($1, (COMMAND *)NULL); }
-       |       simple_command simple_command_element
-                       { $$ = make_simple_command ($2, $1); }
-       ;
-
-command:       simple_command
-                       { $$ = clean_simple_command ($1); }
-       |       shell_command
-                       { $$ = $1; }
-       |       shell_command redirection_list
-                       {
-                         COMMAND *tc;
-
-                         tc = $1;
-                         if (tc->redirects)
-                           {
-                             register REDIRECT *t;
-                             for (t = tc->redirects; t->next; t = t->next)
-                               ;
-                             t->next = $2;
-                           }
-                         else
-                           tc->redirects = $2;
-                         $$ = $1;
-                       }
-       |       function_def
-                       { $$ = $1; }
-       |       coproc
-                       { $$ = $1; }
-       ;
-
-shell_command: for_command
-                       { $$ = $1; }
-       |       case_command
-                       { $$ = $1; }
-       |       WHILE compound_list DO compound_list DONE
-                       { $$ = make_while_command ($2, $4); }
-       |       UNTIL compound_list DO compound_list DONE
-                       { $$ = make_until_command ($2, $4); }
-       |       select_command
-                       { $$ = $1; }
-       |       if_command
-                       { $$ = $1; }
-       |       subshell
-                       { $$ = $1; }
-       |       group_command
-                       { $$ = $1; }
-       |       arith_command
-                       { $$ = $1; }
-       |       cond_command
-                       { $$ = $1; }
-       |       arith_for_command
-                       { $$ = $1; }
-       ;
-
-for_command:   FOR WORD newline_list DO compound_list DONE
-                       {
-                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD newline_list '{' compound_list '}'
-                       {
-                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD ';' newline_list DO compound_list DONE
-                       {
-                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD ';' newline_list '{' compound_list '}'
-                       {
-                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE
-                       {
-                         $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'
-                       {
-                         $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE
-                       {
-                         $$ = make_for_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}'
-                       {
-                         $$ = make_for_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       ;
-
-arith_for_command:     FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE
-                               {
-                                 $$ = make_arith_for_command ($2, $6, arith_for_lineno);
-                                 if (word_top > 0) word_top--;
-                               }
-       |               FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}'
-                               {
-                                 $$ = make_arith_for_command ($2, $6, arith_for_lineno);
-                                 if (word_top > 0) word_top--;
-                               }
-       |               FOR ARITH_FOR_EXPRS DO compound_list DONE
-                               {
-                                 $$ = make_arith_for_command ($2, $4, arith_for_lineno);
-                                 if (word_top > 0) word_top--;
-                               }
-       |               FOR ARITH_FOR_EXPRS '{' compound_list '}'
-                               {
-                                 $$ = make_arith_for_command ($2, $4, arith_for_lineno);
-                                 if (word_top > 0) word_top--;
-                               }
-       ;
-
-select_command:        SELECT WORD newline_list DO list DONE
-                       {
-                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       SELECT WORD newline_list '{' list '}'
-                       {
-                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       SELECT WORD ';' newline_list DO list DONE
-                       {
-                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       SELECT WORD ';' newline_list '{' list '}'
-                       {
-                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       SELECT WORD newline_list IN word_list list_terminator newline_list DO list DONE
-                       {
-                         $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       SELECT WORD newline_list IN word_list list_terminator newline_list '{' list '}'
-                       {
-                         $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       ;
-
-case_command:  CASE WORD newline_list IN newline_list ESAC
-                       {
-                         $$ = make_case_command ($2, (PATTERN_LIST *)NULL, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       CASE WORD newline_list IN case_clause_sequence newline_list ESAC
-                       {
-                         $$ = make_case_command ($2, $5, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       |       CASE WORD newline_list IN case_clause ESAC
-                       {
-                         $$ = make_case_command ($2, $5, word_lineno[word_top]);
-                         if (word_top > 0) word_top--;
-                       }
-       ;
-
-function_def:  WORD '(' ')' newline_list function_body
-                       { $$ = make_function_def ($1, $5, function_dstart, function_bstart); }
-
-       |       FUNCTION WORD '(' ')' newline_list function_body
-                       { $$ = make_function_def ($2, $6, function_dstart, function_bstart); }
-
-       |       FUNCTION WORD newline_list function_body
-                       { $$ = make_function_def ($2, $4, function_dstart, function_bstart); }
-       ;
-
-function_body: shell_command
-                       { $$ = $1; }
-       |       shell_command redirection_list
-                       {
-                         COMMAND *tc;
-
-                         tc = $1;
-                         /* According to Posix.2 3.9.5, redirections
-                            specified after the body of a function should
-                            be attached to the function and performed when
-                            the function is executed, not as part of the
-                            function definition command. */
-                         /* XXX - I don't think it matters, but we might
-                            want to change this in the future to avoid
-                            problems differentiating between a function
-                            definition with a redirection and a function
-                            definition containing a single command with a
-                            redirection.  The two are semantically equivalent,
-                            though -- the only difference is in how the
-                            command printing code displays the redirections. */
-                         if (tc->redirects)
-                           {
-                             register REDIRECT *t;
-                             for (t = tc->redirects; t->next; t = t->next)
-                               ;
-                             t->next = $2;
-                           }
-                         else
-                           tc->redirects = $2;
-                         $$ = $1;
-                       }
-       ;
-
-subshell:      '(' compound_list ')'
-                       {
-                         $$ = make_subshell_command ($2);
-                         $$->flags |= CMD_WANT_SUBSHELL;
-                       }
-       ;
-
-coproc:                COPROC shell_command
-                       {
-                         $$ = make_coproc_command ("COPROC", $2);
-                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-                       }
-       |       COPROC shell_command redirection_list
-                       {
-                         COMMAND *tc;
-
-                         tc = $2;
-                         if (tc->redirects)
-                           {
-                             register REDIRECT *t;
-                             for (t = tc->redirects; t->next; t = t->next)
-                               ;
-                             t->next = $3;
-                           }
-                         else
-                           tc->redirects = $3;
-                         $$ = make_coproc_command ("COPROC", $2);
-                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-                       }
-       |       COPROC WORD shell_command
-                       {
-                         $$ = make_coproc_command ($2->word, $3);
-                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-                       }
-       |       COPROC WORD shell_command redirection_list
-                       {
-                         COMMAND *tc;
-
-                         tc = $3;
-                         if (tc->redirects)
-                           {
-                             register REDIRECT *t;
-                             for (t = tc->redirects; t->next; t = t->next)
-                               ;
-                             t->next = $4;
-                           }
-                         else
-                           tc->redirects = $4;
-                         $$ = make_coproc_command ($2->word, $3);
-                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-                       }
-       |       COPROC simple_command
-                       {
-                         $$ = make_coproc_command ("COPROC", clean_simple_command ($2));
-                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-                       }
-       ;
-
-if_command:    IF compound_list THEN compound_list FI
-                       { $$ = make_if_command ($2, $4, (COMMAND *)NULL); }
-       |       IF compound_list THEN compound_list ELSE compound_list FI
-                       { $$ = make_if_command ($2, $4, $6); }
-       |       IF compound_list THEN compound_list elif_clause FI
-                       { $$ = make_if_command ($2, $4, $5); }
-       ;
-
-
-group_command: '{' compound_list '}'
-                       { $$ = make_group_command ($2); }
-       ;
-
-arith_command: ARITH_CMD
-                       { $$ = make_arith_command ($1); }
-       ;
-
-cond_command:  COND_START COND_CMD COND_END
-                       { $$ = $2; }
-       ; 
-
-elif_clause:   ELIF compound_list THEN compound_list
-                       { $$ = make_if_command ($2, $4, (COMMAND *)NULL); }
-       |       ELIF compound_list THEN compound_list ELSE compound_list
-                       { $$ = make_if_command ($2, $4, $6); }
-       |       ELIF compound_list THEN compound_list elif_clause
-                       { $$ = make_if_command ($2, $4, $5); }
-       ;
-
-case_clause:   pattern_list
-       |       case_clause_sequence pattern_list
-                       { $2->next = $1; $$ = $2; }
-       ;
-
-pattern_list:  newline_list pattern ')' compound_list
-                       { $$ = make_pattern_list ($2, $4); }
-       |       newline_list pattern ')' newline_list
-                       { $$ = make_pattern_list ($2, (COMMAND *)NULL); }
-       |       newline_list '(' pattern ')' compound_list
-                       { $$ = make_pattern_list ($3, $5); }
-       |       newline_list '(' pattern ')' newline_list
-                       { $$ = make_pattern_list ($3, (COMMAND *)NULL); }
-       ;
-
-case_clause_sequence:  pattern_list SEMI_SEMI
-                       { $$ = $1; }
-       |       case_clause_sequence pattern_list SEMI_SEMI
-                       { $2->next = $1; $$ = $2; }
-       |       pattern_list SEMI_AND
-                       { $1->flags |= CASEPAT_FALLTHROUGH; $$ = $1; }
-       |       case_clause_sequence pattern_list SEMI_AND
-                       { $2->flags |= CASEPAT_FALLTHROUGH; $2->next = $1; $$ = $2; }
-       |       pattern_list SEMI_SEMI_AND
-                       { $1->flags |= CASEPAT_TESTNEXT; $$ = $1; }
-       |       case_clause_sequence pattern_list SEMI_SEMI_AND
-                       { $2->flags |= CASEPAT_TESTNEXT; $2->next = $1; $$ = $2; }      
-       ;
-
-pattern:       WORD
-                       { $$ = make_word_list ($1, (WORD_LIST *)NULL); }
-       |       pattern '|' WORD
-                       { $$ = make_word_list ($3, $1); }
-       ;
-
-/* A list allows leading or trailing newlines and
-   newlines as operators (equivalent to semicolons).
-   It must end with a newline or semicolon.
-   Lists are used within commands such as if, for, while.  */
-
-list:          newline_list list0
-                       {
-                         $$ = $2;
-                         if (need_here_doc)
-                           gather_here_documents ();
-                        }
-       ;
-
-compound_list: list
-       |       newline_list list1
-                       {
-                         $$ = $2;
-                       }
-       ;
-
-list0:         list1 '\n' newline_list
-       |       list1 '&' newline_list
-                       {
-                         if ($1->type == cm_connection)
-                           $$ = connect_async_list ($1, (COMMAND *)NULL, '&');
-                         else
-                           $$ = command_connect ($1, (COMMAND *)NULL, '&');
-                       }
-       |       list1 ';' newline_list
-
-       ;
-
-list1:         list1 AND_AND newline_list list1
-                       { $$ = command_connect ($1, $4, AND_AND); }
-       |       list1 OR_OR newline_list list1
-                       { $$ = command_connect ($1, $4, OR_OR); }
-       |       list1 '&' newline_list list1
-                       {
-                         if ($1->type == cm_connection)
-                           $$ = connect_async_list ($1, $4, '&');
-                         else
-                           $$ = command_connect ($1, $4, '&');
-                       }
-       |       list1 ';' newline_list list1
-                       { $$ = command_connect ($1, $4, ';'); }
-       |       list1 '\n' newline_list list1
-                       { $$ = command_connect ($1, $4, ';'); }
-       |       pipeline_command
-                       { $$ = $1; }
-       ;
-
-simple_list_terminator:        '\n'
-       |       yacc_EOF
-       ;
-
-list_terminator:'\n'
-               { $$ = '\n'; }
-       |       ';'
-               { $$ = ';'; }
-       |       yacc_EOF
-               { $$ = yacc_EOF; }
-       ;
-
-newline_list:
-       |       newline_list '\n'
-       ;
-
-/* A simple_list is a list that contains no significant newlines
-   and no leading or trailing newlines.  Newlines are allowed
-   only following operators, where they are not significant.
-
-   This is what an inputunit consists of.  */
-
-simple_list:   simple_list1
-                       {
-                         $$ = $1;
-                         if (need_here_doc)
-                           gather_here_documents ();
-                         if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
-                           {
-                             global_command = $1;
-                             eof_encountered = 0;
-                             rewind_input_string ();
-                             YYACCEPT;
-                           }
-                       }
-       |       simple_list1 '&'
-                       {
-                         if ($1->type == cm_connection)
-                           $$ = connect_async_list ($1, (COMMAND *)NULL, '&');
-                         else
-                           $$ = command_connect ($1, (COMMAND *)NULL, '&');
-                         if (need_here_doc)
-                           gather_here_documents ();
-                         if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
-                           {
-                             global_command = $1;
-                             eof_encountered = 0;
-                             rewind_input_string ();
-                             YYACCEPT;
-                           }
-                       }
-       |       simple_list1 ';'
-                       {
-                         $$ = $1;
-                         if (need_here_doc)
-                           gather_here_documents ();
-                         if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
-                           {
-                             global_command = $1;
-                             eof_encountered = 0;
-                             rewind_input_string ();
-                             YYACCEPT;
-                           }
-                       }
-       |       simple_list1 ')'
-                       {
-                         $$ = $1;
-                         if (need_here_doc)
-                           gather_here_documents (); /*(*/
-                         if ((parser_state & PST_CMDSUBST) && shell_eof_token == ')')
-                           {
-                             global_command = $1;
-                             eof_encountered = 0;
-                             rewind_input_string ();
-                             YYACCEPT;
-                           }
-                         else
-                           {
-                             report_syntax_error ((char *)NULL);
-                             YYABORT;
-                           }
-                       }
-       ;
-
-simple_list1:  simple_list1 AND_AND newline_list simple_list1
-                       { $$ = command_connect ($1, $4, AND_AND); }
-       |       simple_list1 OR_OR newline_list simple_list1
-                       { $$ = command_connect ($1, $4, OR_OR); }
-       |       simple_list1 '&' simple_list1
-                       {
-                         if ($1->type == cm_connection)
-                           $$ = connect_async_list ($1, $3, '&');
-                         else
-                           $$ = command_connect ($1, $3, '&');
-                       }
-       |       simple_list1 ';' simple_list1
-                       { $$ = command_connect ($1, $3, ';'); }
-
-       |       pipeline_command
-                       { $$ = $1; }
-       ;
-
-pipeline_command: pipeline
-                       { $$ = $1; }
-       |       BANG pipeline
-                       {
-                         if ($2)
-                           $2->flags |= CMD_INVERT_RETURN;
-                         $$ = $2;
-                       }
-       |       timespec pipeline
-                       {
-                         if ($2)
-                           $2->flags |= $1;
-                         $$ = $2;
-                       }
-       |       timespec BANG pipeline
-                       {
-                         if ($3)
-                           $3->flags |= $1|CMD_INVERT_RETURN;
-                         $$ = $3;
-                       }
-       |       BANG timespec pipeline
-                       {
-                         if ($3)
-                           $3->flags |= $2|CMD_INVERT_RETURN;
-                         $$ = $3;
-                       }
-       |       timespec list_terminator
-                       {
-                         ELEMENT x;
-
-                         /* Boy, this is unclean.  `time' by itself can
-                            time a null command.  We cheat and push a
-                            newline back if the list_terminator was a newline
-                            to avoid the double-newline problem (one to
-                            terminate this, one to terminate the command) */
-                         x.word = 0;
-                         x.redirect = 0;
-                         $$ = make_simple_command (x, (COMMAND *)NULL);
-                         $$->flags |= $1;
-                         /* XXX - let's cheat and push a newline back */
-                         if ($2 == '\n')
-                           token_to_read = '\n';
-                       }
-                       
-       ;
-
-pipeline:      pipeline '|' newline_list pipeline
-                       { $$ = command_connect ($1, $4, '|'); }
-       |       pipeline BAR_AND newline_list pipeline
-                       {
-                         /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
-                         COMMAND *tc;
-                         REDIRECTEE rd;
-                         REDIRECT *r;
-
-                         tc = $1->type == cm_simple ? (COMMAND *)$1->value.Simple : $1;
-                         rd.dest = 1;
-                         r = make_redirection (2, r_duplicating_output, rd);
-                         if (tc->redirects)
-                           {
-                             register REDIRECT *t;
-                             for (t = tc->redirects; t->next; t = t->next)
-                               ;
-                             t->next = r;
-                           }
-                         else
-                           tc->redirects = r;
-
-                         $$ = command_connect ($1, $4, '|');
-                       }
-       |       command
-                       { $$ = $1; }
-       ;
-
-timespec:      TIME
-                       { $$ = CMD_TIME_PIPELINE; }
-       |       TIME TIMEOPT
-                       { $$ = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
-       ;
-%%
-
-/* Initial size to allocate for tokens, and the
-   amount to grow them by. */
-#define TOKEN_DEFAULT_INITIAL_SIZE 496
-#define TOKEN_DEFAULT_GROW_SIZE 512
-
-/* Should we call prompt_again? */
-#define SHOULD_PROMPT() \
-  (interactive && (bash_input.type == st_stdin || bash_input.type == st_stream))
-
-#if defined (ALIAS)
-#  define expanding_alias() (pushed_string_list && pushed_string_list->expander)
-#else
-#  define expanding_alias() 0
-#endif
-
-/* Global var is non-zero when end of file has been reached. */
-int EOF_Reached = 0;
-
-#ifdef DEBUG
-static void
-debug_parser (i)
-     int i;
-{
-#if YYDEBUG != 0
-  yydebug = i;
-#endif
-}
-#endif
-
-/* yy_getc () returns the next available character from input or EOF.
-   yy_ungetc (c) makes `c' the next character to read.
-   init_yy_io (get, unget, type, location) makes the function GET the
-   installed function for getting the next character, makes UNGET the
-   installed function for un-getting a character, sets the type of stream
-   (either string or file) from TYPE, and makes LOCATION point to where
-   the input is coming from. */
-
-/* Unconditionally returns end-of-file. */
-int
-return_EOF ()
-{
-  return (EOF);
-}
-
-/* Variable containing the current get and unget functions.
-   See ./input.h for a clearer description. */
-BASH_INPUT bash_input;
-
-/* Set all of the fields in BASH_INPUT to NULL.  Free bash_input.name if it
-   is non-null, avoiding a memory leak. */
-void
-initialize_bash_input ()
-{
-  bash_input.type = st_none;
-  FREE (bash_input.name);
-  bash_input.name = (char *)NULL;
-  bash_input.location.file = (FILE *)NULL;
-  bash_input.location.string = (char *)NULL;
-  bash_input.getter = (sh_cget_func_t *)NULL;
-  bash_input.ungetter = (sh_cunget_func_t *)NULL;
-}
-
-/* Set the contents of the current bash input stream from
-   GET, UNGET, TYPE, NAME, and LOCATION. */
-void
-init_yy_io (get, unget, type, name, location)
-     sh_cget_func_t *get;
-     sh_cunget_func_t *unget;
-     enum stream_type type;
-     const char *name;
-     INPUT_STREAM location;
-{
-  bash_input.type = type;
-  FREE (bash_input.name);
-  bash_input.name = name ? savestring (name) : (char *)NULL;
-
-  /* XXX */
-#if defined (CRAY)
-  memcpy((char *)&bash_input.location.string, (char *)&location.string, sizeof(location));
-#else
-  bash_input.location = location;
-#endif
-  bash_input.getter = get;
-  bash_input.ungetter = unget;
-}
-
-char *
-yy_input_name ()
-{
-  return (bash_input.name ? bash_input.name : "stdin");
-}
-
-/* Call this to get the next character of input. */
-static int
-yy_getc ()
-{
-  return (*(bash_input.getter)) ();
-}
-
-/* Call this to unget C.  That is, to make C the next character
-   to be read. */
-static int
-yy_ungetc (c)
-     int c;
-{
-  return (*(bash_input.ungetter)) (c);
-}
-
-#if defined (BUFFERED_INPUT)
-#ifdef INCLUDE_UNUSED
-int
-input_file_descriptor ()
-{
-  switch (bash_input.type)
-    {
-    case st_stream:
-      return (fileno (bash_input.location.file));
-    case st_bstream:
-      return (bash_input.location.buffered_fd);
-    case st_stdin:
-    default:
-      return (fileno (stdin));
-    }
-}
-#endif
-#endif /* BUFFERED_INPUT */
-
-/* **************************************************************** */
-/*                                                                 */
-/*               Let input be read from readline ().               */
-/*                                                                 */
-/* **************************************************************** */
-
-#if defined (READLINE)
-char *current_readline_prompt = (char *)NULL;
-char *current_readline_line = (char *)NULL;
-int current_readline_line_index = 0;
-
-static int
-yy_readline_get ()
-{
-  SigHandler *old_sigint;
-  int line_len;
-  unsigned char c;
-
-  if (!current_readline_line)
-    {
-      if (!bash_readline_initialized)
-       initialize_readline ();
-
-#if defined (JOB_CONTROL)
-      if (job_control)
-       give_terminal_to (shell_pgrp, 0);
-#endif /* JOB_CONTROL */
-
-      old_sigint = (SigHandler *)NULL;
-      if (signal_is_ignored (SIGINT) == 0)
-       {
-         old_sigint = (SigHandler *)set_signal_handler (SIGINT, sigint_sighandler);
-         interrupt_immediately++;
-       }
-      terminate_immediately = 1;
-
-      current_readline_line = readline (current_readline_prompt ?
-                                         current_readline_prompt : "");
-
-      terminate_immediately = 0;
-      if (signal_is_ignored (SIGINT) == 0 && old_sigint)
-       {
-         interrupt_immediately--;
-         set_signal_handler (SIGINT, old_sigint);
-       }
-
-#if 0
-      /* Reset the prompt to the decoded value of prompt_string_pointer. */
-      reset_readline_prompt ();
-#endif
-
-      if (current_readline_line == 0)
-       return (EOF);
-
-      current_readline_line_index = 0;
-      line_len = strlen (current_readline_line);
-
-      current_readline_line = (char *)xrealloc (current_readline_line, 2 + line_len);
-      current_readline_line[line_len++] = '\n';
-      current_readline_line[line_len] = '\0';
-    }
-
-  if (current_readline_line[current_readline_line_index] == 0)
-    {
-      free (current_readline_line);
-      current_readline_line = (char *)NULL;
-      return (yy_readline_get ());
-    }
-  else
-    {
-      c = current_readline_line[current_readline_line_index++];
-      return (c);
-    }
-}
-
-static int
-yy_readline_unget (c)
-     int c;
-{
-  if (current_readline_line_index && current_readline_line)
-    current_readline_line[--current_readline_line_index] = c;
-  return (c);
-}
-
-void
-with_input_from_stdin ()
-{
-  INPUT_STREAM location;
-
-  if (bash_input.type != st_stdin && stream_on_stack (st_stdin) == 0)
-    {
-      location.string = current_readline_line;
-      init_yy_io (yy_readline_get, yy_readline_unget,
-                 st_stdin, "readline stdin", location);
-    }
-}
-
-#else  /* !READLINE */
-
-void
-with_input_from_stdin ()
-{
-  with_input_from_stream (stdin, "stdin");
-}
-#endif /* !READLINE */
-
-/* **************************************************************** */
-/*                                                                 */
-/*   Let input come from STRING.  STRING is zero terminated.       */
-/*                                                                 */
-/* **************************************************************** */
-
-static int
-yy_string_get ()
-{
-  register char *string;
-  register unsigned char c;
-
-  string = bash_input.location.string;
-
-  /* If the string doesn't exist, or is empty, EOF found. */
-  if (string && *string)
-    {
-      c = *string++;
-      bash_input.location.string = string;
-      return (c);
-    }
-  else
-    return (EOF);
-}
-
-static int
-yy_string_unget (c)
-     int c;
-{
-  *(--bash_input.location.string) = c;
-  return (c);
-}
-
-void
-with_input_from_string (string, name)
-     char *string;
-     const char *name;
-{
-  INPUT_STREAM location;
-
-  location.string = string;
-  init_yy_io (yy_string_get, yy_string_unget, st_string, name, location);
-}
-
-/* Count the number of characters we've consumed from bash_input.location.string
-   and read into shell_input_line, but have not returned from shell_getc.
-   That is the true input location.  Rewind bash_input.location.string by
-   that number of characters, so it points to the last character actually
-   consumed by the parser. */
-static void
-rewind_input_string ()
-{
-  int xchars;
-
-  /* number of unconsumed characters in the input -- XXX need to take newlines
-     into account, e.g., $(...\n) */
-  xchars = shell_input_line_len - shell_input_line_index;
-  if (bash_input.location.string[-1] == '\n')
-    xchars++;
-
-  /* XXX - how to reflect bash_input.location.string back to string passed to
-     parse_and_execute or xparse_dolparen?  xparse_dolparen needs to know how
-     far into the string we parsed.  parse_and_execute knows where bash_input.
-     location.string is, and how far from orig_string that is -- that's the
-     number of characters the command consumed. */
-
-  /* bash_input.location.string - xchars should be where we parsed to */
-  /* need to do more validation on xchars value for sanity -- test cases. */
-  bash_input.location.string -= xchars;
-}
-
-/* **************************************************************** */
-/*                                                                 */
-/*                  Let input come from STREAM.                    */
-/*                                                                 */
-/* **************************************************************** */
-
-/* These two functions used to test the value of the HAVE_RESTARTABLE_SYSCALLS
-   define, and just use getc/ungetc if it was defined, but since bash
-   installs its signal handlers without the SA_RESTART flag, some signals
-   (like SIGCHLD, SIGWINCH, etc.) received during a read(2) will not cause
-   the read to be restarted.  We need to restart it ourselves. */
-
-static int
-yy_stream_get ()
-{
-  int result;
-
-  result = EOF;
-  if (bash_input.location.file)
-    {
-      if (interactive)
-       {
-         interrupt_immediately++;
-         terminate_immediately++;
-       }
-      result = getc_with_restart (bash_input.location.file);
-      if (interactive)
-       {
-         interrupt_immediately--;
-         terminate_immediately--;
-       }
-    }
-  return (result);
-}
-
-static int
-yy_stream_unget (c)
-     int c;
-{
-  return (ungetc_with_restart (c, bash_input.location.file));
-}
-
-void
-with_input_from_stream (stream, name)
-     FILE *stream;
-     const char *name;
-{
-  INPUT_STREAM location;
-
-  location.file = stream;
-  init_yy_io (yy_stream_get, yy_stream_unget, st_stream, name, location);
-}
-
-typedef struct stream_saver {
-  struct stream_saver *next;
-  BASH_INPUT bash_input;
-  int line;
-#if defined (BUFFERED_INPUT)
-  BUFFERED_STREAM *bstream;
-#endif /* BUFFERED_INPUT */
-} STREAM_SAVER;
-
-/* The globally known line number. */
-int line_number = 0;
-
-#if defined (COND_COMMAND)
-static int cond_lineno;
-static int cond_token;
-#endif
-
-STREAM_SAVER *stream_list = (STREAM_SAVER *)NULL;
-
-void
-push_stream (reset_lineno)
-     int reset_lineno;
-{
-  STREAM_SAVER *saver = (STREAM_SAVER *)xmalloc (sizeof (STREAM_SAVER));
-
-  xbcopy ((char *)&bash_input, (char *)&(saver->bash_input), sizeof (BASH_INPUT));
-
-#if defined (BUFFERED_INPUT)
-  saver->bstream = (BUFFERED_STREAM *)NULL;
-  /* If we have a buffered stream, clear out buffers[fd]. */
-  if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0)
-    saver->bstream = set_buffered_stream (bash_input.location.buffered_fd,
-                                         (BUFFERED_STREAM *)NULL);
-#endif /* BUFFERED_INPUT */
-
-  saver->line = line_number;
-  bash_input.name = (char *)NULL;
-  saver->next = stream_list;
-  stream_list = saver;
-  EOF_Reached = 0;
-  if (reset_lineno)
-    line_number = 0;
-}
-
-void
-pop_stream ()
-{
-  if (!stream_list)
-    EOF_Reached = 1;
-  else
-    {
-      STREAM_SAVER *saver = stream_list;
-
-      EOF_Reached = 0;
-      stream_list = stream_list->next;
-
-      init_yy_io (saver->bash_input.getter,
-                 saver->bash_input.ungetter,
-                 saver->bash_input.type,
-                 saver->bash_input.name,
-                 saver->bash_input.location);
-
-#if defined (BUFFERED_INPUT)
-      /* If we have a buffered stream, restore buffers[fd]. */
-      /* If the input file descriptor was changed while this was on the
-        save stack, update the buffered fd to the new file descriptor and
-        re-establish the buffer <-> bash_input fd correspondence. */
-      if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0)
-       {
-         if (bash_input_fd_changed)
-           {
-             bash_input_fd_changed = 0;
-             if (default_buffered_input >= 0)
-               {
-                 bash_input.location.buffered_fd = default_buffered_input;
-                 saver->bstream->b_fd = default_buffered_input;
-                 SET_CLOSE_ON_EXEC (default_buffered_input);
-               }
-           }
-         /* XXX could free buffered stream returned as result here. */
-         set_buffered_stream (bash_input.location.buffered_fd, saver->bstream);
-       }
-#endif /* BUFFERED_INPUT */
-
-      line_number = saver->line;
-
-      FREE (saver->bash_input.name);
-      free (saver);
-    }
-}
-
-/* Return 1 if a stream of type TYPE is saved on the stack. */
-int
-stream_on_stack (type)
-     enum stream_type type;
-{
-  register STREAM_SAVER *s;
-
-  for (s = stream_list; s; s = s->next)
-    if (s->bash_input.type == type)
-      return 1;
-  return 0;
-}
-
-/* Save the current token state and return it in a malloced array. */
-int *
-save_token_state ()
-{
-  int *ret;
-
-  ret = (int *)xmalloc (4 * sizeof (int));
-  ret[0] = last_read_token;
-  ret[1] = token_before_that;
-  ret[2] = two_tokens_ago;
-  ret[3] = current_token;
-  return ret;
-}
-
-void
-restore_token_state (ts)
-     int *ts;
-{
-  if (ts == 0)
-    return;
-  last_read_token = ts[0];
-  token_before_that = ts[1];
-  two_tokens_ago = ts[2];
-  current_token = ts[3];
-}
-
-/*
- * This is used to inhibit alias expansion and reserved word recognition
- * inside case statement pattern lists.  A `case statement pattern list' is:
- *
- *     everything between the `in' in a `case word in' and the next ')'
- *     or `esac'
- *     everything between a `;;' and the next `)' or `esac'
- */
-
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-
-#define END_OF_ALIAS 0
-
-/*
- * Pseudo-global variables used in implementing token-wise alias expansion.
- */
-
-/*
- * Pushing and popping strings.  This works together with shell_getc to
- * implement alias expansion on a per-token basis.
- */
-
-typedef struct string_saver {
-  struct string_saver *next;
-  int expand_alias;  /* Value to set expand_alias to when string is popped. */
-  char *saved_line;
-#if defined (ALIAS)
-  alias_t *expander;   /* alias that caused this line to be pushed. */
-#endif
-  int saved_line_size, saved_line_index, saved_line_terminator;
-} STRING_SAVER;
-
-STRING_SAVER *pushed_string_list = (STRING_SAVER *)NULL;
-
-/*
- * Push the current shell_input_line onto a stack of such lines and make S
- * the current input.  Used when expanding aliases.  EXPAND is used to set
- * the value of expand_next_token when the string is popped, so that the
- * word after the alias in the original line is handled correctly when the
- * alias expands to multiple words.  TOKEN is the token that was expanded
- * into S; it is saved and used to prevent infinite recursive expansion.
- */
-static void
-push_string (s, expand, ap)
-     char *s;
-     int expand;
-     alias_t *ap;
-{
-  STRING_SAVER *temp = (STRING_SAVER *)xmalloc (sizeof (STRING_SAVER));
-
-  temp->expand_alias = expand;
-  temp->saved_line = shell_input_line;
-  temp->saved_line_size = shell_input_line_size;
-  temp->saved_line_index = shell_input_line_index;
-  temp->saved_line_terminator = shell_input_line_terminator;
-#if defined (ALIAS)
-  temp->expander = ap;
-#endif
-  temp->next = pushed_string_list;
-  pushed_string_list = temp;
-
-#if defined (ALIAS)
-  if (ap)
-    ap->flags |= AL_BEINGEXPANDED;
-#endif
-
-  shell_input_line = s;
-  shell_input_line_size = strlen (s);
-  shell_input_line_index = 0;
-  shell_input_line_terminator = '\0';
-#if 0
-  parser_state &= ~PST_ALEXPNEXT;      /* XXX */
-#endif
-
-  set_line_mbstate ();
-}
-
-/*
- * Make the top of the pushed_string stack be the current shell input.
- * Only called when there is something on the stack.  Called from shell_getc
- * when it thinks it has consumed the string generated by an alias expansion
- * and needs to return to the original input line.
- */
-static void
-pop_string ()
-{
-  STRING_SAVER *t;
-
-  FREE (shell_input_line);
-  shell_input_line = pushed_string_list->saved_line;
-  shell_input_line_index = pushed_string_list->saved_line_index;
-  shell_input_line_size = pushed_string_list->saved_line_size;
-  shell_input_line_terminator = pushed_string_list->saved_line_terminator;
-
-  if (pushed_string_list->expand_alias)
-    parser_state |= PST_ALEXPNEXT;
-  else
-    parser_state &= ~PST_ALEXPNEXT;
-
-  t = pushed_string_list;
-  pushed_string_list = pushed_string_list->next;
-
-#if defined (ALIAS)
-  if (t->expander)
-    t->expander->flags &= ~AL_BEINGEXPANDED;
-#endif
-
-  free ((char *)t);
-
-  set_line_mbstate ();
-}
-
-static void
-free_string_list ()
-{
-  register STRING_SAVER *t, *t1;
-
-  for (t = pushed_string_list; t; )
-    {
-      t1 = t->next;
-      FREE (t->saved_line);
-#if defined (ALIAS)
-      if (t->expander)
-       t->expander->flags &= ~AL_BEINGEXPANDED;
-#endif
-      free ((char *)t);
-      t = t1;
-    }
-  pushed_string_list = (STRING_SAVER *)NULL;
-}
-
-#endif /* ALIAS || DPAREN_ARITHMETIC */
-
-void
-free_pushed_string_input ()
-{
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  free_string_list ();
-#endif
-}
-
-/* Return a line of text, taken from wherever yylex () reads input.
-   If there is no more input, then we return NULL.  If REMOVE_QUOTED_NEWLINE
-   is non-zero, we remove unquoted \<newline> pairs.  This is used by
-   read_secondary_line to read here documents. */
-static char *
-read_a_line (remove_quoted_newline)
-     int remove_quoted_newline;
-{
-  static char *line_buffer = (char *)NULL;
-  static int buffer_size = 0;
-  int indx = 0, c, peekc, pass_next;
-
-#if defined (READLINE)
-  if (no_line_editing && SHOULD_PROMPT ())
-#else
-  if (SHOULD_PROMPT ())
-#endif
-    print_prompt ();
-
-  pass_next = 0;
-  while (1)
-    {
-      /* Allow immediate exit if interrupted during input. */
-      QUIT;
-
-      c = yy_getc ();
-
-      /* Ignore null bytes in input. */
-      if (c == 0)
-       {
-#if 0
-         internal_warning ("read_a_line: ignored null byte in input");
-#endif
-         continue;
-       }
-
-      /* If there is no more input, then we return NULL. */
-      if (c == EOF)
-       {
-         if (interactive && bash_input.type == st_stream)
-           clearerr (stdin);
-         if (indx == 0)
-           return ((char *)NULL);
-         c = '\n';
-       }
-
-      /* `+2' in case the final character in the buffer is a newline. */
-      RESIZE_MALLOCED_BUFFER (line_buffer, indx, 2, buffer_size, 128);
-
-      /* IF REMOVE_QUOTED_NEWLINES is non-zero, we are reading a
-        here document with an unquoted delimiter.  In this case,
-        the line will be expanded as if it were in double quotes.
-        We allow a backslash to escape the next character, but we
-        need to treat the backslash specially only if a backslash
-        quoting a backslash-newline pair appears in the line. */
-      if (pass_next)
-       {
-         line_buffer[indx++] = c;
-         pass_next = 0;
-       }
-      else if (c == '\\' && remove_quoted_newline)
-       {
-         peekc = yy_getc ();
-         if (peekc == '\n')
-           {
-             line_number++;
-             continue; /* Make the unquoted \<newline> pair disappear. */
-           }
-         else
-           {
-             yy_ungetc (peekc);
-             pass_next = 1;
-             line_buffer[indx++] = c;          /* Preserve the backslash. */
-           }
-       }
-      else
-       line_buffer[indx++] = c;
-
-      if (c == '\n')
-       {
-         line_buffer[indx] = '\0';
-         return (line_buffer);
-       }
-    }
-}
-
-/* Return a line as in read_a_line (), but insure that the prompt is
-   the secondary prompt.  This is used to read the lines of a here
-   document.  REMOVE_QUOTED_NEWLINE is non-zero if we should remove
-   newlines quoted with backslashes while reading the line.  It is
-   non-zero unless the delimiter of the here document was quoted. */
-char *
-read_secondary_line (remove_quoted_newline)
-     int remove_quoted_newline;
-{
-  char *ret;
-  int n, c;
-
-  prompt_string_pointer = &ps2_prompt;
-  if (SHOULD_PROMPT())
-    prompt_again ();
-  ret = read_a_line (remove_quoted_newline);
-#if defined (HISTORY)
-  if (remember_on_history && (parser_state & PST_HEREDOC))
-    {
-      /* To make adding the the here-document body right, we need to rely
-        on history_delimiting_chars() returning \n for the first line of
-        the here-document body and the null string for the second and
-        subsequent lines, so we avoid double newlines.
-        current_command_line_count == 2 for the first line of the body. */
-
-      current_command_line_count++;
-      maybe_add_history (ret);
-    }
-#endif /* HISTORY */
-  return ret;
-}
-
-/* **************************************************************** */
-/*                                                                 */
-/*                             YYLEX ()                            */
-/*                                                                 */
-/* **************************************************************** */
-
-/* Reserved words.  These are only recognized as the first word of a
-   command. */
-STRING_INT_ALIST word_token_alist[] = {
-  { "if", IF },
-  { "then", THEN },
-  { "else", ELSE },
-  { "elif", ELIF },
-  { "fi", FI },
-  { "case", CASE },
-  { "esac", ESAC },
-  { "for", FOR },
-#if defined (SELECT_COMMAND)
-  { "select", SELECT },
-#endif
-  { "while", WHILE },
-  { "until", UNTIL },
-  { "do", DO },
-  { "done", DONE },
-  { "in", IN },
-  { "function", FUNCTION },
-#if defined (COMMAND_TIMING)
-  { "time", TIME },
-#endif
-  { "{", '{' },
-  { "}", '}' },
-  { "!", BANG },
-#if defined (COND_COMMAND)
-  { "[[", COND_START },
-  { "]]", COND_END },
-#endif
-#if defined (COPROCESS_SUPPORT)
-  { "coproc", COPROC },
-#endif
-  { (char *)NULL, 0}
-};
-
-/* other tokens that can be returned by read_token() */
-STRING_INT_ALIST other_token_alist[] = {
-  /* Multiple-character tokens with special values */
-  { "-p", TIMEOPT },
-  { "&&", AND_AND },
-  { "||", OR_OR },
-  { ">>", GREATER_GREATER },
-  { "<<", LESS_LESS },
-  { "<&", LESS_AND },
-  { ">&", GREATER_AND },
-  { ";;", SEMI_SEMI },
-  { ";&", SEMI_AND },
-  { ";;&", SEMI_SEMI_AND },
-  { "<<-", LESS_LESS_MINUS },
-  { "<<<", LESS_LESS_LESS },
-  { "&>", AND_GREATER },
-  { "&>>", AND_GREATER_GREATER },
-  { "<>", LESS_GREATER },
-  { ">|", GREATER_BAR },
-  { "|&", BAR_AND },
-  { "EOF", yacc_EOF },
-  /* Tokens whose value is the character itself */
-  { ">", '>' },
-  { "<", '<' },
-  { "-", '-' },
-  { "{", '{' },
-  { "}", '}' },
-  { ";", ';' },
-  { "(", '(' },
-  { ")", ')' },
-  { "|", '|' },
-  { "&", '&' },
-  { "newline", '\n' },
-  { (char *)NULL, 0}
-};
-
-/* others not listed here:
-       WORD                    look at yylval.word
-       ASSIGNMENT_WORD         look at yylval.word
-       NUMBER                  look at yylval.number
-       ARITH_CMD               look at yylval.word_list
-       ARITH_FOR_EXPRS         look at yylval.word_list
-       COND_CMD                look at yylval.command
-*/
-
-/* These are used by read_token_word, but appear up here so that shell_getc
-   can use them to decide when to add otherwise blank lines to the history. */
-
-/* The primary delimiter stack. */
-struct dstack dstack = {  (char *)NULL, 0, 0 };
-
-/* A temporary delimiter stack to be used when decoding prompt strings.
-   This is needed because command substitutions in prompt strings (e.g., PS2)
-   can screw up the parser's quoting state. */
-static struct dstack temp_dstack = { (char *)NULL, 0, 0 };
-
-/* Macro for accessing the top delimiter on the stack.  Returns the
-   delimiter or zero if none. */
-#define current_delimiter(ds) \
-  (ds.delimiter_depth ? ds.delimiters[ds.delimiter_depth - 1] : 0)
-
-#define push_delimiter(ds, character) \
-  do \
-    { \
-      if (ds.delimiter_depth + 2 > ds.delimiter_space) \
-       ds.delimiters = (char *)xrealloc \
-         (ds.delimiters, (ds.delimiter_space += 10) * sizeof (char)); \
-      ds.delimiters[ds.delimiter_depth] = character; \
-      ds.delimiter_depth++; \
-    } \
-  while (0)
-
-#define pop_delimiter(ds)      ds.delimiter_depth--
-
-/* Return the next shell input character.  This always reads characters
-   from shell_input_line; when that line is exhausted, it is time to
-   read the next line.  This is called by read_token when the shell is
-   processing normal command input. */
-
-/* This implements one-character lookahead/lookbehind across physical input
-   lines, to avoid something being lost because it's pushed back with
-   shell_ungetc when we're at the start of a line. */
-static int eol_ungetc_lookahead = 0;
-
-static int
-shell_getc (remove_quoted_newline)
-     int remove_quoted_newline;
-{
-  register int i;
-  int c;
-  unsigned char uc;
-
-  QUIT;
-
-  if (sigwinch_received)
-    {
-      sigwinch_received = 0;
-      get_new_window_size (0, (int *)0, (int *)0);
-    }
-      
-  if (eol_ungetc_lookahead)
-    {
-      c = eol_ungetc_lookahead;
-      eol_ungetc_lookahead = 0;
-      return (c);
-    }
-
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  /* If shell_input_line[shell_input_line_index] == 0, but there is
-     something on the pushed list of strings, then we don't want to go
-     off and get another line.  We let the code down below handle it. */
-
-  if (!shell_input_line || ((!shell_input_line[shell_input_line_index]) &&
-                           (pushed_string_list == (STRING_SAVER *)NULL)))
-#else /* !ALIAS && !DPAREN_ARITHMETIC */
-  if (!shell_input_line || !shell_input_line[shell_input_line_index])
-#endif /* !ALIAS && !DPAREN_ARITHMETIC */
-    {
-      line_number++;
-
-    restart_read:
-
-      /* Allow immediate exit if interrupted during input. */
-      QUIT;
-
-      i = 0;
-      shell_input_line_terminator = 0;
-
-      /* If the shell is interatctive, but not currently printing a prompt
-         (interactive_shell && interactive == 0), we don't want to print
-         notifies or cleanup the jobs -- we want to defer it until we do
-         print the next prompt. */
-      if (interactive_shell == 0 || SHOULD_PROMPT())
-       {
-#if defined (JOB_CONTROL)
-      /* This can cause a problem when reading a command as the result
-        of a trap, when the trap is called from flush_child.  This call
-        had better not cause jobs to disappear from the job table in
-        that case, or we will have big trouble. */
-         notify_and_cleanup ();
-#else /* !JOB_CONTROL */
-         cleanup_dead_jobs ();
-#endif /* !JOB_CONTROL */
-       }
-
-#if defined (READLINE)
-      if (no_line_editing && SHOULD_PROMPT())
-#else
-      if (SHOULD_PROMPT())
-#endif
-       print_prompt ();
-
-      if (bash_input.type == st_stream)
-       clearerr (stdin);
-
-      while (1)
-       {
-         c = yy_getc ();
-
-         /* Allow immediate exit if interrupted during input. */
-         QUIT;
-
-         if (c == '\0')
-           {
-#if 0
-             internal_warning ("shell_getc: ignored null byte in input");
-#endif
-             continue;
-           }
-
-         RESIZE_MALLOCED_BUFFER (shell_input_line, i, 2, shell_input_line_size, 256);
-
-         if (c == EOF)
-           {
-             if (bash_input.type == st_stream)
-               clearerr (stdin);
-
-             if (i == 0)
-               shell_input_line_terminator = EOF;
-
-             shell_input_line[i] = '\0';
-             break;
-           }
-
-         shell_input_line[i++] = c;
-
-         if (c == '\n')
-           {
-             shell_input_line[--i] = '\0';
-             current_command_line_count++;
-             break;
-           }
-       }
-
-      shell_input_line_index = 0;
-      shell_input_line_len = i;                /* == strlen (shell_input_line) */
-
-      set_line_mbstate ();
-
-#if defined (HISTORY)
-      if (remember_on_history && shell_input_line && shell_input_line[0])
-       {
-         char *expansions;
-#  if defined (BANG_HISTORY)
-         int old_hist;
-
-         /* If the current delimiter is a single quote, we should not be
-            performing history expansion, even if we're on a different
-            line from the original single quote. */
-         old_hist = history_expansion_inhibited;
-         if (current_delimiter (dstack) == '\'')
-           history_expansion_inhibited = 1;
-#  endif
-         expansions = pre_process_line (shell_input_line, 1, 1);
-#  if defined (BANG_HISTORY)
-         history_expansion_inhibited = old_hist;
-#  endif
-         if (expansions != shell_input_line)
-           {
-             free (shell_input_line);
-             shell_input_line = expansions;
-             shell_input_line_len = shell_input_line ?
-                                       strlen (shell_input_line) : 0;
-             if (!shell_input_line_len)
-               current_command_line_count--;
-
-             /* We have to force the xrealloc below because we don't know
-                the true allocated size of shell_input_line anymore. */
-             shell_input_line_size = shell_input_line_len;
-
-             set_line_mbstate ();
-           }
-       }
-      /* Try to do something intelligent with blank lines encountered while
-        entering multi-line commands.  XXX - this is grotesque */
-      else if (remember_on_history && shell_input_line &&
-              shell_input_line[0] == '\0' &&
-              current_command_line_count > 1)
-       {
-         if (current_delimiter (dstack))
-           /* We know shell_input_line[0] == 0 and we're reading some sort of
-              quoted string.  This means we've got a line consisting of only
-              a newline in a quoted string.  We want to make sure this line
-              gets added to the history. */
-           maybe_add_history (shell_input_line);
-         else
-           {
-             char *hdcs;
-             hdcs = history_delimiting_chars ();
-             if (hdcs && hdcs[0] == ';')
-               maybe_add_history (shell_input_line);
-           }
-       }
-
-#endif /* HISTORY */
-
-      if (shell_input_line)
-       {
-         /* Lines that signify the end of the shell's input should not be
-            echoed. */
-         if (echo_input_at_read && (shell_input_line[0] ||
-                                    shell_input_line_terminator != EOF))
-           fprintf (stderr, "%s\n", shell_input_line);
-       }
-      else
-       {
-         shell_input_line_size = 0;
-         prompt_string_pointer = &current_prompt_string;
-         if (SHOULD_PROMPT ())
-           prompt_again ();
-         goto restart_read;
-       }
-
-      /* Add the newline to the end of this string, iff the string does
-        not already end in an EOF character.  */
-      if (shell_input_line_terminator != EOF)
-       {
-         if (shell_input_line_len + 3 > shell_input_line_size)
-           shell_input_line = (char *)xrealloc (shell_input_line,
-                                       1 + (shell_input_line_size += 2));
-
-         shell_input_line[shell_input_line_len] = '\n';
-         shell_input_line[shell_input_line_len + 1] = '\0';
-
-         set_line_mbstate ();
-       }
-    }
-
-  uc = shell_input_line[shell_input_line_index];
-
-  if (uc)
-    shell_input_line_index++;
-
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  /* If UC is NULL, we have reached the end of the current input string.  If
-     pushed_string_list is non-empty, it's time to pop to the previous string
-     because we have fully consumed the result of the last alias expansion.
-     Do it transparently; just return the next character of the string popped
-     to. */
-  if (!uc && (pushed_string_list != (STRING_SAVER *)NULL))
-    {
-      pop_string ();
-      uc = shell_input_line[shell_input_line_index];
-      if (uc)
-       shell_input_line_index++;
-    }
-#endif /* ALIAS || DPAREN_ARITHMETIC */
-
-  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
-    {
-       if (SHOULD_PROMPT ())
-         prompt_again ();
-       line_number++;
-       goto restart_read;
-    }
-
-  if (!uc && shell_input_line_terminator == EOF)
-    return ((shell_input_line_index != 0) ? '\n' : EOF);
-
-  return (uc);
-}
-
-/* Put C back into the input for the shell.  This might need changes for
-   HANDLE_MULTIBYTE around EOLs.  Since we (currently) never push back a
-   character different than we read, shell_input_line_property doesn't need
-   to change when manipulating shell_input_line.  The define for
-   last_shell_getc_is_singlebyte should take care of it, though. */
-static void
-shell_ungetc (c)
-     int c;
-{
-  if (shell_input_line && shell_input_line_index)
-    shell_input_line[--shell_input_line_index] = c;
-  else
-    eol_ungetc_lookahead = c;
-}
-
-#ifdef INCLUDE_UNUSED
-/* Back the input pointer up by one, effectively `ungetting' a character. */
-static void
-shell_ungetchar ()
-{
-  if (shell_input_line && shell_input_line_index)
-    shell_input_line_index--;
-}
-#endif
-
-/* Discard input until CHARACTER is seen, then push that character back
-   onto the input stream. */
-static void
-discard_until (character)
-     int character;
-{
-  int c;
-
-  while ((c = shell_getc (0)) != EOF && c != character)
-    ;
-
-  if (c != EOF)
-    shell_ungetc (c);
-}
-
-void
-execute_variable_command (command, vname)
-     char *command, *vname;
-{
-  char *last_lastarg;
-  sh_parser_state_t ps;
-
-  save_parser_state (&ps);
-  last_lastarg = get_string_value ("_");
-  if (last_lastarg)
-    last_lastarg = savestring (last_lastarg);
-
-  parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST);
-
-  restore_parser_state (&ps);
-  bind_variable ("_", last_lastarg, 0);
-  FREE (last_lastarg);
-
-  if (token_to_read == '\n')   /* reset_parser was called */
-    token_to_read = 0;
-}
-
-/* Place to remember the token.  We try to keep the buffer
-   at a reasonable size, but it can grow. */
-static char *token = (char *)NULL;
-
-/* Current size of the token buffer. */
-static int token_buffer_size;
-
-/* Command to read_token () explaining what we want it to do. */
-#define READ 0
-#define RESET 1
-#define prompt_is_ps1 \
-      (!prompt_string_pointer || prompt_string_pointer == &ps1_prompt)
-
-/* Function for yyparse to call.  yylex keeps track of
-   the last two tokens read, and calls read_token.  */
-static int
-yylex ()
-{
-  if (interactive && (current_token == 0 || current_token == '\n'))
-    {
-      /* Before we print a prompt, we might have to check mailboxes.
-        We do this only if it is time to do so. Notice that only here
-        is the mail alarm reset; nothing takes place in check_mail ()
-        except the checking of mail.  Please don't change this. */
-      if (prompt_is_ps1 && time_to_check_mail ())
-       {
-         check_mail ();
-         reset_mail_timer ();
-       }
-
-      /* Avoid printing a prompt if we're not going to read anything, e.g.
-        after resetting the parser with read_token (RESET). */
-      if (token_to_read == 0 && SHOULD_PROMPT ())
-       prompt_again ();
-    }
-
-  two_tokens_ago = token_before_that;
-  token_before_that = last_read_token;
-  last_read_token = current_token;
-  current_token = read_token (READ);
-
-  if ((parser_state & PST_EOFTOKEN) && current_token == shell_eof_token)
-    {
-      current_token = yacc_EOF;
-      if (bash_input.type == st_string)
-       rewind_input_string ();
-    }
-  parser_state &= ~PST_EOFTOKEN;
-
-  return (current_token);
-}
-
-/* When non-zero, we have read the required tokens
-   which allow ESAC to be the next one read. */
-static int esacs_needed_count;
-
-void
-gather_here_documents ()
-{
-  int r;
-
-  r = 0;
-  while (need_here_doc)
-    {
-      parser_state |= PST_HEREDOC;
-      make_here_document (redir_stack[r++], line_number);
-      parser_state &= ~PST_HEREDOC;
-      need_here_doc--;
-    }
-}
-
-/* When non-zero, an open-brace used to create a group is awaiting a close
-   brace partner. */
-static int open_brace_count;
-
-#define command_token_position(token) \
-  (((token) == ASSIGNMENT_WORD) || \
-   ((token) != SEMI_SEMI && (token) != SEMI_AND && (token) != SEMI_SEMI_AND && reserved_word_acceptable(token)))
-
-#define assignment_acceptable(token) \
-  (command_token_position(token) && ((parser_state & PST_CASEPAT) == 0))
-
-/* Check to see if TOKEN is a reserved word and return the token
-   value if it is. */
-#define CHECK_FOR_RESERVED_WORD(tok) \
-  do { \
-    if (!dollar_present && !quoted && \
-       reserved_word_acceptable (last_read_token)) \
-      { \
-       int i; \
-       for (i = 0; word_token_alist[i].word != (char *)NULL; i++) \
-         if (STREQ (tok, word_token_alist[i].word)) \
-           { \
-             if ((parser_state & PST_CASEPAT) && (word_token_alist[i].token != ESAC)) \
-               break; \
-             if (word_token_alist[i].token == TIME && time_command_acceptable () == 0) \
-               break; \
-             if (word_token_alist[i].token == ESAC) \
-               parser_state &= ~(PST_CASEPAT|PST_CASESTMT); \
-             else if (word_token_alist[i].token == CASE) \
-               parser_state |= PST_CASESTMT; \
-             else if (word_token_alist[i].token == COND_END) \
-               parser_state &= ~(PST_CONDCMD|PST_CONDEXPR); \
-             else if (word_token_alist[i].token == COND_START) \
-               parser_state |= PST_CONDCMD; \
-             else if (word_token_alist[i].token == '{') \
-               open_brace_count++; \
-             else if (word_token_alist[i].token == '}' && open_brace_count) \
-               open_brace_count--; \
-             return (word_token_alist[i].token); \
-           } \
-      } \
-  } while (0)
-
-#if defined (ALIAS)
-
-    /* OK, we have a token.  Let's try to alias expand it, if (and only if)
-       it's eligible.
-
-       It is eligible for expansion if EXPAND_ALIASES is set, and
-       the token is unquoted and the last token read was a command
-       separator (or expand_next_token is set), and we are currently
-       processing an alias (pushed_string_list is non-empty) and this
-       token is not the same as the current or any previously
-       processed alias.
-
-       Special cases that disqualify:
-        In a pattern list in a case statement (parser_state & PST_CASEPAT). */
-
-static char *
-mk_alexpansion (s)
-     char *s;
-{
-  int l;
-  char *r;
-
-  l = strlen (s);
-  r = xmalloc (l + 2);
-  strcpy (r, s);
-  if (r[l -1] != ' ')
-    r[l++] = ' ';
-  r[l] = '\0';
-  return r;
-}
-
-static int
-alias_expand_token (tokstr)
-     char *tokstr;
-{
-  char *expanded;
-  alias_t *ap;
-
-  if (((parser_state & PST_ALEXPNEXT) || command_token_position (last_read_token)) &&
-       (parser_state & PST_CASEPAT) == 0)
-    {
-      ap = find_alias (tokstr);
-
-      /* Currently expanding this token. */
-      if (ap && (ap->flags & AL_BEINGEXPANDED))
-       return (NO_EXPANSION);
-
-      /* mk_alexpansion puts an extra space on the end of the alias expansion,
-         so the lookahead by the parser works right.  If this gets changed,
-         make sure the code in shell_getc that deals with reaching the end of
-         an expanded alias is changed with it. */
-      expanded = ap ? mk_alexpansion (ap->value) : (char *)NULL;
-
-      if (expanded)
-       {
-         push_string (expanded, ap->flags & AL_EXPANDNEXT, ap);
-         return (RE_READ_TOKEN);
-       }
-      else
-       /* This is an eligible token that does not have an expansion. */
-       return (NO_EXPANSION);
-    }
-  return (NO_EXPANSION);
-}
-#endif /* ALIAS */
-
-static int
-time_command_acceptable ()
-{
-#if defined (COMMAND_TIMING)
-  switch (last_read_token)
-    {
-    case 0:
-    case ';':
-    case '\n':
-    case AND_AND:
-    case OR_OR:
-    case '&':
-    case DO:
-    case THEN:
-    case ELSE:
-    case '{':          /* } */
-    case '(':          /* ) */
-      return 1;
-    default:
-      return 0;
-    }
-#else
-  return 0;
-#endif /* COMMAND_TIMING */
-}
-
-/* Handle special cases of token recognition:
-       IN is recognized if the last token was WORD and the token
-       before that was FOR or CASE or SELECT.
-
-       DO is recognized if the last token was WORD and the token
-       before that was FOR or SELECT.
-
-       ESAC is recognized if the last token caused `esacs_needed_count'
-       to be set
-
-       `{' is recognized if the last token as WORD and the token
-       before that was FUNCTION, or if we just parsed an arithmetic
-       `for' command.
-
-       `}' is recognized if there is an unclosed `{' present.
-
-       `-p' is returned as TIMEOPT if the last read token was TIME.
-
-       ']]' is returned as COND_END if the parser is currently parsing
-       a conditional expression ((parser_state & PST_CONDEXPR) != 0)
-
-       `time' is returned as TIME if and only if it is immediately
-       preceded by one of `;', `\n', `||', `&&', or `&'.
-*/
-
-static int
-special_case_tokens (tokstr)
-     char *tokstr;
-{
-  if ((last_read_token == WORD) &&
-#if defined (SELECT_COMMAND)
-      ((token_before_that == FOR) || (token_before_that == CASE) || (token_before_that == SELECT)) &&
-#else
-      ((token_before_that == FOR) || (token_before_that == CASE)) &&
-#endif
-      (tokstr[0] == 'i' && tokstr[1] == 'n' && tokstr[2] == 0))
-    {
-      if (token_before_that == CASE)
-       {
-         parser_state |= PST_CASEPAT;
-         esacs_needed_count++;
-       }
-      return (IN);
-    }
-
-  if (last_read_token == WORD &&
-#if defined (SELECT_COMMAND)
-      (token_before_that == FOR || token_before_that == SELECT) &&
-#else
-      (token_before_that == FOR) &&
-#endif
-      (tokstr[0] == 'd' && tokstr[1] == 'o' && tokstr[2] == '\0'))
-    return (DO);
-
-  /* Ditto for ESAC in the CASE case.
-     Specifically, this handles "case word in esac", which is a legal
-     construct, certainly because someone will pass an empty arg to the
-     case construct, and we don't want it to barf.  Of course, we should
-     insist that the case construct has at least one pattern in it, but
-     the designers disagree. */
-  if (esacs_needed_count)
-    {
-      esacs_needed_count--;
-      if (STREQ (tokstr, "esac"))
-       {
-         parser_state &= ~PST_CASEPAT;
-         return (ESAC);
-       }
-    }
-
-  /* The start of a shell function definition. */
-  if (parser_state & PST_ALLOWOPNBRC)
-    {
-      parser_state &= ~PST_ALLOWOPNBRC;
-      if (tokstr[0] == '{' && tokstr[1] == '\0')               /* } */
-       {
-         open_brace_count++;
-         function_bstart = line_number;
-         return ('{');                                 /* } */
-       }
-    }
-
-  /* We allow a `do' after a for ((...)) without an intervening
-     list_terminator */
-  if (last_read_token == ARITH_FOR_EXPRS && tokstr[0] == 'd' && tokstr[1] == 'o' && !tokstr[2])
-    return (DO);
-  if (last_read_token == ARITH_FOR_EXPRS && tokstr[0] == '{' && tokstr[1] == '\0')     /* } */
-    {
-      open_brace_count++;
-      return ('{');                    /* } */
-    }
-
-  if (open_brace_count && reserved_word_acceptable (last_read_token) && tokstr[0] == '}' && !tokstr[1])
-    {
-      open_brace_count--;              /* { */
-      return ('}');
-    }
-
-#if defined (COMMAND_TIMING)
-  /* Handle -p after `time'. */
-  if (last_read_token == TIME && tokstr[0] == '-' && tokstr[1] == 'p' && !tokstr[2])
-    return (TIMEOPT);
-#endif
-
-#if 0
-#if defined (COMMAND_TIMING)
-  if (STREQ (token, "time") && ((parser_state & PST_CASEPAT) == 0) && time_command_acceptable ())
-    return (TIME);
-#endif /* COMMAND_TIMING */
-#endif
-
-#if defined (COND_COMMAND) /* [[ */
-  if ((parser_state & PST_CONDEXPR) && tokstr[0] == ']' && tokstr[1] == ']' && tokstr[2] == '\0')
-    return (COND_END);
-#endif
-
-  return (-1);
-}
-
-/* Called from shell.c when Control-C is typed at top level.  Or
-   by the error rule at top level. */
-void
-reset_parser ()
-{
-  dstack.delimiter_depth = 0;  /* No delimiters found so far. */
-  open_brace_count = 0;
-
-  parser_state = 0;
-
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  if (pushed_string_list)
-    free_string_list ();
-#endif /* ALIAS || DPAREN_ARITHMETIC */
-
-  if (shell_input_line)
-    {
-      free (shell_input_line);
-      shell_input_line = (char *)NULL;
-      shell_input_line_size = shell_input_line_index = 0;
-    }
-
-  FREE (word_desc_to_read);
-  word_desc_to_read = (WORD_DESC *)NULL;
-
-  current_token = '\n';                /* XXX */
-  last_read_token = '\n';
-  token_to_read = '\n';
-}
-
-/* Read the next token.  Command can be READ (normal operation) or
-   RESET (to normalize state). */
-static int
-read_token (command)
-     int command;
-{
-  int character;               /* Current character. */
-  int peek_char;               /* Temporary look-ahead character. */
-  int result;                  /* The thing to return. */
-
-  if (command == RESET)
-    {
-      reset_parser ();
-      return ('\n');
-    }
-
-  if (token_to_read)
-    {
-      result = token_to_read;
-      if (token_to_read == WORD || token_to_read == ASSIGNMENT_WORD)
-       {
-         yylval.word = word_desc_to_read;
-         word_desc_to_read = (WORD_DESC *)NULL;
-       }
-      token_to_read = 0;
-      return (result);
-    }
-
-#if defined (COND_COMMAND)
-  if ((parser_state & (PST_CONDCMD|PST_CONDEXPR)) == PST_CONDCMD)
-    {
-      cond_lineno = line_number;
-      parser_state |= PST_CONDEXPR;
-      yylval.command = parse_cond_command ();
-      if (cond_token != COND_END)
-       {
-         cond_error ();
-         return (-1);
-       }
-      token_to_read = COND_END;
-      parser_state &= ~(PST_CONDEXPR|PST_CONDCMD);
-      return (COND_CMD);
-    }
-#endif
-
-#if defined (ALIAS)
-  /* This is a place to jump back to once we have successfully expanded a
-     token with an alias and pushed the string with push_string () */
- re_read_token:
-#endif /* ALIAS */
-
-  /* Read a single word from input.  Start by skipping blanks. */
-  while ((character = shell_getc (1)) != EOF && shellblank (character))
-    ;
-
-  if (character == EOF)
-    {
-      EOF_Reached = 1;
-      return (yacc_EOF);
-    }
-
-  if MBTEST(character == '#' && (!interactive || interactive_comments))
-    {
-      /* A comment.  Discard until EOL or EOF, and then return a newline. */
-      discard_until ('\n');
-      shell_getc (0);
-      character = '\n';        /* this will take the next if statement and return. */
-    }
-
-  if (character == '\n')
-    {
-      /* If we're about to return an unquoted newline, we can go and collect
-        the text of any pending here document. */
-      if (need_here_doc)
-       gather_here_documents ();
-
-#if defined (ALIAS)
-      parser_state &= ~PST_ALEXPNEXT;
-#endif /* ALIAS */
-
-      parser_state &= ~PST_ASSIGNOK;
-
-      return (character);
-    }
-
-  if (parser_state & PST_REGEXP)
-    goto tokword;
-
-  /* Shell meta-characters. */
-  if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0))
-    {
-#if defined (ALIAS)
-      /* Turn off alias tokenization iff this character sequence would
-        not leave us ready to read a command. */
-      if (character == '<' || character == '>')
-       parser_state &= ~PST_ALEXPNEXT;
-#endif /* ALIAS */
-
-      parser_state &= ~PST_ASSIGNOK;
-
-      peek_char = shell_getc (1);
-      if (character == peek_char)
-       {
-         switch (character)
-           {
-           case '<':
-             /* If '<' then we could be at "<<" or at "<<-".  We have to
-                look ahead one more character. */
-             peek_char = shell_getc (1);
-             if MBTEST(peek_char == '-')
-               return (LESS_LESS_MINUS);
-             else if MBTEST(peek_char == '<')
-               return (LESS_LESS_LESS);
-             else
-               {
-                 shell_ungetc (peek_char);
-                 return (LESS_LESS);
-               }
-
-           case '>':
-             return (GREATER_GREATER);
-
-           case ';':
-             parser_state |= PST_CASEPAT;
-#if defined (ALIAS)
-             parser_state &= ~PST_ALEXPNEXT;
-#endif /* ALIAS */
-
-             peek_char = shell_getc (1);
-             if MBTEST(peek_char == '&')
-               return (SEMI_SEMI_AND);
-             else
-               {
-                 shell_ungetc (peek_char);
-                 return (SEMI_SEMI);
-               }
-
-           case '&':
-             return (AND_AND);
-
-           case '|':
-             return (OR_OR);
-
-#if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
-           case '(':           /* ) */
-             result = parse_dparen (character);
-             if (result == -2)
-               break;
-             else
-               return result;
-#endif
-           }
-       }
-      else if MBTEST(character == '<' && peek_char == '&')
-       return (LESS_AND);
-      else if MBTEST(character == '>' && peek_char == '&')
-       return (GREATER_AND);
-      else if MBTEST(character == '<' && peek_char == '>')
-       return (LESS_GREATER);
-      else if MBTEST(character == '>' && peek_char == '|')
-       return (GREATER_BAR);
-      else if MBTEST(character == '&' && peek_char == '>')
-       {
-         peek_char = shell_getc (1);
-         if MBTEST(peek_char == '>')
-           return (AND_GREATER_GREATER);
-         else
-           {
-             shell_ungetc (peek_char);
-             return (AND_GREATER);
-           }
-       }
-      else if MBTEST(character == '|' && peek_char == '&')
-       return (BAR_AND);
-      else if MBTEST(character == ';' && peek_char == '&')
-       {
-         parser_state |= PST_CASEPAT;
-#if defined (ALIAS)
-         parser_state &= ~PST_ALEXPNEXT;
-#endif /* ALIAS */
-         return (SEMI_AND);
-       }
-
-      shell_ungetc (peek_char);
-
-      /* If we look like we are reading the start of a function
-        definition, then let the reader know about it so that
-        we will do the right thing with `{'. */
-      if MBTEST(character == ')' && last_read_token == '(' && token_before_that == WORD)
-       {
-         parser_state |= PST_ALLOWOPNBRC;
-#if defined (ALIAS)
-         parser_state &= ~PST_ALEXPNEXT;
-#endif /* ALIAS */
-         function_dstart = line_number;
-       }
-
-      /* case pattern lists may be preceded by an optional left paren.  If
-        we're not trying to parse a case pattern list, the left paren
-        indicates a subshell. */
-      if MBTEST(character == '(' && (parser_state & PST_CASEPAT) == 0) /* ) */
-       parser_state |= PST_SUBSHELL;
-      /*(*/
-      else if MBTEST((parser_state & PST_CASEPAT) && character == ')')
-       parser_state &= ~PST_CASEPAT;
-      /*(*/
-      else if MBTEST((parser_state & PST_SUBSHELL) && character == ')')
-       parser_state &= ~PST_SUBSHELL;
-
-#if defined (PROCESS_SUBSTITUTION)
-      /* Check for the constructs which introduce process substitution.
-        Shells running in `posix mode' don't do process substitution. */
-      if MBTEST(posixly_correct || ((character != '>' && character != '<') || peek_char != '(')) /*)*/
-#endif /* PROCESS_SUBSTITUTION */
-       return (character);
-    }
-
-  /* Hack <&- (close stdin) case.  Also <&N- (dup and close). */
-  if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND))
-    return (character);
-
-tokword:
-  /* Okay, if we got this far, we have to read a word.  Read one,
-     and then check it against the known ones. */
-  result = read_token_word (character);
-#if defined (ALIAS)
-  if (result == RE_READ_TOKEN)
-    goto re_read_token;
-#endif
-  return result;
-}
-
-/*
- * Match a $(...) or other grouping construct.  This has to handle embedded
- * quoted strings ('', ``, "") and nested constructs.  It also must handle
- * reprompting the user, if necessary, after reading a newline, and returning
- * correct error values if it reads EOF.
- */
-#define P_FIRSTCLOSE   0x01
-#define P_ALLOWESC     0x02
-#define P_DQUOTE       0x04
-#define P_COMMAND      0x08    /* parsing a command, so look for comments */
-#define P_BACKQUOTE    0x10    /* parsing a backquoted command substitution */
-#define P_ARRAYSUB     0x20    /* parsing a [...] array subscript for assignment */
-
-/* Lexical state while parsing a grouping construct or $(...). */
-#define LEX_WASDOL     0x001
-#define LEX_CKCOMMENT  0x002
-#define LEX_INCOMMENT  0x004
-#define LEX_PASSNEXT   0x008
-#define LEX_RESWDOK    0x010
-#define LEX_CKCASE     0x020
-#define LEX_INCASE     0x040
-#define LEX_INHEREDOC  0x080
-#define LEX_HEREDELIM  0x100           /* reading here-doc delimiter */
-#define LEX_STRIPDOC   0x200           /* <<- strip tabs from here doc delim */
-#define LEX_INWORD     0x400
-
-#define COMSUB_META(ch)                ((ch) == ';' || (ch) == '&' || (ch) == '|')
-
-#define CHECK_NESTRET_ERROR() \
-  do { \
-    if (nestret == &matched_pair_error) \
-      { \
-       free (ret); \
-       return &matched_pair_error; \
-      } \
-  } while (0)
-
-#define APPEND_NESTRET() \
-  do { \
-    if (nestlen) \
-      { \
-       RESIZE_MALLOCED_BUFFER (ret, retind, nestlen, retsize, 64); \
-       strcpy (ret + retind, nestret); \
-       retind += nestlen; \
-      } \
-  } while (0)
-
-static char matched_pair_error;
-
-static char *
-parse_matched_pair (qc, open, close, lenp, flags)
-     int qc;   /* `"' if this construct is within double quotes */
-     int open, close;
-     int *lenp, flags;
-{
-  int count, ch, tflags;
-  int nestlen, ttranslen, start_lineno;
-  char *ret, *nestret, *ttrans;
-  int retind, retsize, rflags;
-
-/*itrace("parse_matched_pair: open = %c close = %c flags = %d", open, close, flags); */
-  count = 1;
-  tflags = 0;
-
-  if ((flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0)
-    tflags |= LEX_CKCOMMENT;
-
-  /* RFLAGS is the set of flags we want to pass to recursive calls. */
-  rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE);
-
-  ret = (char *)xmalloc (retsize = 64);
-  retind = 0;
-
-  start_lineno = line_number;
-  while (count)
-    {
-      ch = shell_getc (qc != '\'' && (tflags & LEX_PASSNEXT) == 0);
-
-      if (ch == EOF)
-       {
-         free (ret);
-         parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
-         EOF_Reached = 1;      /* XXX */
-         return (&matched_pair_error);
-       }
-
-      /* Possible reprompting. */
-      if (ch == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
-
-      /* Don't bother counting parens or doing anything else if in a comment
-        or part of a case statement */
-      if (tflags & LEX_INCOMMENT)
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-
-         if (ch == '\n')
-           tflags &= ~LEX_INCOMMENT;
-
-         continue;
-       }
-
-      /* Not exactly right yet, should handle shell metacharacters, too.  If
-        any changes are made to this test, make analogous changes to subst.c:
-        extract_delimited_string(). */
-      else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || shellblank (ret[retind - 1])))
-       tflags |= LEX_INCOMMENT;
-
-      if (tflags & LEX_PASSNEXT)               /* last char was backslash */
-       {
-         tflags &= ~LEX_PASSNEXT;
-         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
-           {
-             if (retind > 0)
-               retind--;       /* swallow previously-added backslash */
-             continue;
-           }
-
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         if MBTEST(ch == CTLESC || ch == CTLNUL)
-           ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-      /* If we're reparsing the input (e.g., from parse_string_to_word_list),
-        we've already prepended CTLESC to single-quoted results of $'...'.
-        We may want to do this for other CTLESC-quoted characters in
-        reparse, too. */
-      else if MBTEST((parser_state & PST_REPARSE) && open == '\'' && (ch == CTLESC || ch == CTLNUL))
-       {
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         continue;
-       }
-      else if MBTEST(ch == CTLESC || ch == CTLNUL)     /* special shell escapes */
-       {
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-      else if MBTEST(ch == close)              /* ending delimiter */
-       count--;
-      /* handle nested ${...} specially. */
-      else if MBTEST(open != close && (tflags & LEX_WASDOL) && open == '{' && ch == open) /* } */
-       count++;
-      else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && ch == open)      /* nested begin */
-       count++;
-
-      /* Add this character. */
-      RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-      ret[retind++] = ch;
-
-      /* If we just read the ending character, don't bother continuing. */
-      if (count == 0)
-       break;
-
-      if (open == '\'')                        /* '' inside grouping construct */
-       {
-         if MBTEST((flags & P_ALLOWESC) && ch == '\\')
-           tflags |= LEX_PASSNEXT;
-         continue;
-       }
-
-      if MBTEST(ch == '\\')                    /* backslashes */
-       tflags |= LEX_PASSNEXT;
-
-#if 0
-      /* The big hammer.  Single quotes aren't special in double quotes.  The
-         problem is that Posix says the single quotes are semi-special:
-         within a double-quoted ${...} construct "an even number of
-         unescaped double-quotes or single-quotes, if any, shall occur." */
-      if MBTEST(open == '{' && (flags & P_DQUOTE) && ch == '\'')       /* } */
-       continue;
-#endif
-
-      /* Could also check open == '`' if we want to parse grouping constructs
-        inside old-style command substitution. */
-      if (open != close)               /* a grouping construct */
-       {
-         if MBTEST(shellquote (ch))
-           {
-             /* '', ``, or "" inside $(...) or other grouping construct. */
-             push_delimiter (dstack, ch);
-             if MBTEST((tflags & LEX_WASDOL) && ch == '\'')    /* $'...' inside group */
-               nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC|rflags);
-             else
-               nestret = parse_matched_pair (ch, ch, ch, &nestlen, rflags);
-             pop_delimiter (dstack);
-             CHECK_NESTRET_ERROR ();
-
-             if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
-               {
-                 /* Translate $'...' here. */
-                 ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
-                 xfree (nestret);
-
-                 if ((rflags & P_DQUOTE) == 0)
-                   {
-                     nestret = sh_single_quote (ttrans);
-                     free (ttrans);
-                     nestlen = strlen (nestret);
-                   }
-                 else
-                   {
-                     nestret = ttrans;
-                     nestlen = ttranslen;
-                   }
-                 retind -= 2;          /* back up before the $' */
-               }
-             else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
-               {
-                 /* Locale expand $"..." here. */
-                 ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
-                 xfree (nestret);
-
-                 nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
-                 free (ttrans);
-                 nestlen = ttranslen + 2;
-                 retind -= 2;          /* back up before the $" */
-               }
-
-             APPEND_NESTRET ();
-             FREE (nestret);
-           }
-         else if ((flags & P_ARRAYSUB) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))      /* ) } ] */
-           goto parse_dollar_word;
-       }
-      /* Parse an old-style command substitution within double quotes as a
-        single word. */
-      /* XXX - sh and ksh93 don't do this - XXX */
-      else if MBTEST(open == '"' && ch == '`')
-       {
-         nestret = parse_matched_pair (0, '`', '`', &nestlen, rflags);
-
-         CHECK_NESTRET_ERROR ();
-         APPEND_NESTRET ();
-
-         FREE (nestret);
-       }
-      else if MBTEST(open != '`' && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))    /* ) } ] */
-       /* check for $(), $[], or ${} inside quoted string. */
-       {
-parse_dollar_word:
-         if (open == ch)       /* undo previous increment */
-           count--;
-         if (ch == '(')                /* ) */
-           nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
-         else if (ch == '{')           /* } */
-           nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags);
-         else if (ch == '[')           /* ] */
-           nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
-
-         CHECK_NESTRET_ERROR ();
-         APPEND_NESTRET ();
-
-         FREE (nestret);
-       }
-      if MBTEST(ch == '$')
-       tflags |= LEX_WASDOL;
-      else
-       tflags &= ~LEX_WASDOL;
-    }
-
-  ret[retind] = '\0';
-  if (lenp)
-    *lenp = retind;
-  return ret;
-}
-
-/* Parse a $(...) command substitution.  This is messier than I'd like, and
-   reproduces a lot more of the token-reading code than I'd like. */
-static char *
-parse_comsub (qc, open, close, lenp, flags)
-     int qc;   /* `"' if this construct is within double quotes */
-     int open, close;
-     int *lenp, flags;
-{
-  int count, ch, peekc, tflags, lex_rwlen, lex_wlen, lex_firstind;
-  int nestlen, ttranslen, start_lineno;
-  char *ret, *nestret, *ttrans, *heredelim;
-  int retind, retsize, rflags, hdlen;
-
-/*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
-  count = 1;
-  tflags = LEX_RESWDOK;
-
-  if ((flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0)
-    tflags |= LEX_CKCASE;
-  if ((tflags & LEX_CKCASE) && (interactive == 0 || interactive_comments))
-    tflags |= LEX_CKCOMMENT;
-
-  /* RFLAGS is the set of flags we want to pass to recursive calls. */
-  rflags = (flags & P_DQUOTE);
-
-  ret = (char *)xmalloc (retsize = 64);
-  retind = 0;
-
-  start_lineno = line_number;
-  lex_rwlen = lex_wlen = 0;
-
-  heredelim = 0;
-  lex_firstind = -1;
-
-  while (count)
-    {
-comsub_readchar:
-      ch = shell_getc (qc != '\'' && (tflags & LEX_PASSNEXT) == 0);
-
-      if (ch == EOF)
-       {
-eof_error:
-         free (ret);
-         FREE (heredelim);
-         parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
-         EOF_Reached = 1;      /* XXX */
-         return (&matched_pair_error);
-       }
-
-      /* If we hit the end of a line and are reading the contents of a here
-        document, and it's not the same line that the document starts on,
-        check for this line being the here doc delimiter.  Otherwise, if
-        we're in a here document, mark the next character as the beginning
-        of a line. */
-      if (ch == '\n')
-       {
-         if ((tflags & LEX_HEREDELIM) && heredelim)
-           {
-             tflags &= ~LEX_HEREDELIM;
-             tflags |= LEX_INHEREDOC;
-             lex_firstind = retind + 1;
-           }
-         else if (tflags & LEX_INHEREDOC)
-           {
-             int tind;
-             tind = lex_firstind;
-             while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
-               tind++;
-             if (STREQN (ret + tind, heredelim, hdlen))
-               {
-                 tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
-/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
-                 lex_firstind = -1;
-               }
-             else
-               lex_firstind = retind + 1;
-           }
-       }
-
-      /* Possible reprompting. */
-      if (ch == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
-
-      /* Don't bother counting parens or doing anything else if in a comment */
-      if (tflags & (LEX_INCOMMENT|LEX_INHEREDOC))
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-
-         if ((tflags & LEX_INCOMMENT) && ch == '\n')
-{
-/*itrace("parse_comsub:%d: lex_incomment -> 0 ch = `%c'", line_number, ch);*/
-           tflags &= ~LEX_INCOMMENT;
-}
-
-         continue;
-       }
-
-      if (tflags & LEX_PASSNEXT)               /* last char was backslash */
-       {
-/*itrace("parse_comsub:%d: lex_passnext -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-         tflags &= ~LEX_PASSNEXT;
-         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
-           {
-             if (retind > 0)
-               retind--;       /* swallow previously-added backslash */
-             continue;
-           }
-
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         if MBTEST(ch == CTLESC || ch == CTLNUL)
-           ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-
-      /* If this is a shell break character, we are not in a word.  If not,
-        we either start or continue a word. */
-      if MBTEST(shellbreak (ch))
-       {
-         tflags &= ~LEX_INWORD;
-/*itrace("parse_comsub:%d: lex_inword -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-       }
-      else
-       {
-         if (tflags & LEX_INWORD)
-           {
-             lex_wlen++;
-/*itrace("parse_comsub:%d: lex_inword == 1 ch = `%c' lex_wlen = %d (%d)", line_number, ch, lex_wlen, __LINE__);*/
-           }         
-         else
-           {
-/*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-             tflags |= LEX_INWORD;
-             lex_wlen = 0;
-           }
-       }
-
-      /* Skip whitespace */
-      if MBTEST(shellblank (ch) && lex_rwlen == 0)
-        {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         continue;
-        }
-
-      /* Either we are looking for the start of the here-doc delimiter
-        (lex_firstind == -1) or we are reading one (lex_firstind >= 0).
-        If this character is a shell break character and we are reading
-        the delimiter, save it and note that we are now reading a here
-        document.  If we've found the start of the delimiter, note it by
-        setting lex_firstind.  Backslashes can quote shell metacharacters
-        in here-doc delimiters. */
-      if (tflags & LEX_HEREDELIM)
-       {
-         if (lex_firstind == -1 && shellbreak (ch) == 0)
-           lex_firstind = retind;
-         else if (lex_firstind >= 0 && (tflags & LEX_PASSNEXT) == 0 && shellbreak (ch))
-           {
-             nestret = substring (ret, lex_firstind, retind);
-             heredelim = string_quote_removal (nestret, 0);
-             free (nestret);
-             hdlen = STRLEN(heredelim);
-/*itrace("parse_comsub:%d: found here doc delimiter `%s' (%d)", line_number, heredelim, hdlen);*/
-             if (ch == '\n')
-               {
-                 tflags |= LEX_INHEREDOC;
-                 tflags &= ~LEX_HEREDELIM;
-                 lex_firstind = retind + 1;
-               }
-             else
-               lex_firstind = -1;
-           }
-       }
-
-      /* Meta-characters that can introduce a reserved word.  Not perfect yet. */
-      if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && shellmeta(ch))
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         peekc = shell_getc (1);
-         if (ch == peekc && (ch == '&' || ch == '|' || ch == ';'))     /* two-character tokens */
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = peekc;
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
-             tflags |= LEX_RESWDOK;
-             lex_rwlen = 0;
-             continue;
-           }
-         else if (ch == '\n' || COMSUB_META(ch))
-           {
-             shell_ungetc (peekc);
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
-             tflags |= LEX_RESWDOK;
-             lex_rwlen = 0;
-             continue;
-           }
-         else if (ch == EOF)
-           goto eof_error;
-         else
-           {
-             /* `unget' the character we just added and fall through */
-             retind--;
-             shell_ungetc (peekc);
-           }
-       }
-
-      /* If we can read a reserved word, try to read one. */
-      if (tflags & LEX_RESWDOK)
-       {
-         if MBTEST(islower (ch))
-           {
-             /* Add this character. */
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = ch;
-             lex_rwlen++;
-             continue;
-           }
-         else if MBTEST(lex_rwlen == 4 && shellbreak (ch))
-           {
-             if (STREQN (ret + retind - 4, "case", 4))
-{
-               tflags |= LEX_INCASE;
-/*itrace("parse_comsub:%d: found `case', lex_incase -> 1 lex_reswdok -> 0", line_number);*/
-}
-             else if (STREQN (ret + retind - 4, "esac", 4))
-{
-               tflags &= ~LEX_INCASE;
-/*itrace("parse_comsub:%d: found `esac', lex_incase -> 0 lex_reswdok -> 0", line_number);*/
-}              
-             tflags &= ~LEX_RESWDOK;
-           }
-         else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-           ;   /* don't modify LEX_RESWDOK if we're starting a comment */
-         else if MBTEST((tflags & LEX_INCASE) && ch != '\n')
-           /* If we can read a reserved word and we're in case, we're at the
-              point where we can read a new pattern list or an esac.  We
-              handle the esac case above.  If we read a newline, we want to
-              leave LEX_RESWDOK alone.  If we read anything else, we want to
-              turn off LEX_RESWDOK, since we're going to read a pattern list. */
-{
-           tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/
-}
-         else if MBTEST(shellbreak (ch) == 0)
-{
-           tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
-}
-       }
-
-      /* Might be the start of a here-doc delimiter */
-      if MBTEST((tflags & LEX_INCOMMENT) == 0 && (tflags & LEX_CKCASE) && ch == '<')
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         peekc = shell_getc (1);
-         if (peekc == EOF)
-           goto eof_error;
-         if (peekc == ch)
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = peekc;
-             peekc = shell_getc (1);
-             if (peekc == EOF)
-               goto eof_error;
-             if (peekc == '-')
-               {
-                 RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-                 ret[retind++] = peekc;
-                 tflags |= LEX_STRIPDOC;
-               }
-             else
-               shell_ungetc (peekc);
-             if (peekc != '<')
-               {
-                 tflags |= LEX_HEREDELIM;
-                 lex_firstind = -1;
-               }
-             continue;
-           }
-         else
-           ch = peekc;         /* fall through and continue XXX */
-       }
-      else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (((tflags & LEX_RESWDOK) && lex_rwlen == 0) || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-{
-/*itrace("parse_comsub:%d: lex_incomment -> 1 (%d)", line_number, __LINE__);*/
-       tflags |= LEX_INCOMMENT;
-}
-
-      if MBTEST(ch == CTLESC || ch == CTLNUL)  /* special shell escapes */
-       {
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-#if 0
-      else if MBTEST((tflags & LEX_INCASE) && ch == close && close == ')')
-        tflags &= ~LEX_INCASE;         /* XXX */
-#endif
-      else if MBTEST(ch == close && (tflags & LEX_INCASE) == 0)                /* ending delimiter */
-{
-       count--;
-/*itrace("parse_comsub:%d: found close: count = %d", line_number, count);*/
-}
-      else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && (tflags & LEX_INCASE) == 0 && ch == open)        /* nested begin */
-{
-       count++;
-/*itrace("parse_comsub:%d: found open: count = %d", line_number, count);*/
-}
-
-      /* Add this character. */
-      RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-      ret[retind++] = ch;
-
-      /* If we just read the ending character, don't bother continuing. */
-      if (count == 0)
-       break;
-
-      if MBTEST(ch == '\\')                    /* backslashes */
-       tflags |= LEX_PASSNEXT;
-
-      if MBTEST(shellquote (ch))
-        {
-          /* '', ``, or "" inside $(...). */
-          push_delimiter (dstack, ch);
-          if MBTEST((tflags & LEX_WASDOL) && ch == '\'')       /* $'...' inside group */
-           nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC|rflags);
-         else
-           nestret = parse_matched_pair (ch, ch, ch, &nestlen, rflags);
-         pop_delimiter (dstack);
-         CHECK_NESTRET_ERROR ();
-
-         if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
-           {
-             /* Translate $'...' here. */
-             ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
-             xfree (nestret);
-
-             if ((rflags & P_DQUOTE) == 0)
-               {
-                 nestret = sh_single_quote (ttrans);
-                 free (ttrans);
-                 nestlen = strlen (nestret);
-               }
-             else
-               {
-                 nestret = ttrans;
-                 nestlen = ttranslen;
-               }
-             retind -= 2;              /* back up before the $' */
-           }
-         else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
-           {
-             /* Locale expand $"..." here. */
-             ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
-             xfree (nestret);
-
-             nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
-             free (ttrans);
-             nestlen = ttranslen + 2;
-             retind -= 2;              /* back up before the $" */
-           }
-
-         APPEND_NESTRET ();
-         FREE (nestret);
-       }
-      else if MBTEST((tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))   /* ) } ] */
-       /* check for $(), $[], or ${} inside command substitution. */
-       {
-         if ((tflags & LEX_INCASE) == 0 && open == ch) /* undo previous increment */
-           count--;
-         if (ch == '(')                /* ) */
-           nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
-         else if (ch == '{')           /* } */
-           nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags);
-         else if (ch == '[')           /* ] */
-           nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
-
-         CHECK_NESTRET_ERROR ();
-         APPEND_NESTRET ();
-
-         FREE (nestret);
-       }
-      if MBTEST(ch == '$')
-       tflags |= LEX_WASDOL;
-      else
-       tflags &= ~LEX_WASDOL;
-    }
-
-  FREE (heredelim);
-  ret[retind] = '\0';
-  if (lenp)
-    *lenp = retind;
-/*itrace("parse_comsub:%d: returning `%s'", line_number, ret);*/
-  return ret;
-}
-
-/* XXX - this needs to handle functionality like subst.c:no_longjmp_on_fatal_error;
-   maybe extract_command_subst should handle it. */
-char *
-xparse_dolparen (base, string, indp, flags)
-     char *base;
-     char *string;
-     int *indp;
-     int flags;
-{
-  sh_parser_state_t ps;
-  int orig_ind, nc, sflags;
-  char *ret, *s, *ep, *ostring;
-
-  /*yydebug = 1;*/
-  orig_ind = *indp;
-  ostring = string;
-
-  sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
-  if (flags & SX_NOLONGJMP)
-    sflags |= SEVAL_NOLONGJMP;
-  save_parser_state (&ps);
-
-  /*(*/
-  parser_state |= PST_CMDSUBST|PST_EOFTOKEN;   /* allow instant ')' */ /*(*/
-  shell_eof_token = ')';
-  parse_string (string, "command substitution", sflags, &ep);
-
-  restore_parser_state (&ps);
-  reset_parser ();
-  if (interactive)
-    token_to_read = 0;
-
-  /* Need to find how many characters parse_and_execute consumed, update
-     *indp, if flags != 0, copy the portion of the string parsed into RET
-     and return it.  If flags & 1 (EX_NOALLOC) we can return NULL. */
-
-  /*(*/
-  if (ep[-1] != ')')
-    {
-#if DEBUG
-      if (ep[-1] != '\n')
-       itrace("xparse_dolparen:%d: ep[-1] != RPAREN (%d), ep = `%s'", line_number, ep[-1], ep);
-#endif
-      while (ep > ostring && ep[-1] == '\n') ep--;
-    }
-
-  nc = ep - ostring;
-  *indp = ep - base - 1;
-
-  /*(*/
-#if DEBUG
-  if (base[*indp] != ')')
-    itrace("xparse_dolparen:%d: base[%d] != RPAREN (%d), base = `%s'", line_number, *indp, base[*indp], base);
-#endif
-
-  if (flags & SX_NOALLOC) 
-    return (char *)NULL;
-
-  if (nc == 0)
-    {
-      ret = xmalloc (1);
-      ret[0] = '\0';
-    }
-  else
-    ret = substring (ostring, 0, nc - 1);
-
-  return ret;
-}
-
-#if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
-/* Parse a double-paren construct.  It can be either an arithmetic
-   command, an arithmetic `for' command, or a nested subshell.  Returns
-   the parsed token, -1 on error, or -2 if we didn't do anything and
-   should just go on. */
-static int
-parse_dparen (c)
-     int c;
-{
-  int cmdtyp, sline;
-  char *wval;
-  WORD_DESC *wd;
-
-#if defined (ARITH_FOR_COMMAND)
-  if (last_read_token == FOR)
-    {
-      arith_for_lineno = line_number;
-      cmdtyp = parse_arith_cmd (&wval, 0);
-      if (cmdtyp == 1)
-       {
-         wd = alloc_word_desc ();
-         wd->word = wval;
-         yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
-         return (ARITH_FOR_EXPRS);
-       }
-      else
-       return -1;              /* ERROR */
-    }
-#endif
-
-#if defined (DPAREN_ARITHMETIC)
-  if (reserved_word_acceptable (last_read_token))
-    {
-      sline = line_number;
-
-      cmdtyp = parse_arith_cmd (&wval, 0);
-      if (cmdtyp == 1) /* arithmetic command */
-       {
-         wd = alloc_word_desc ();
-         wd->word = wval;
-         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_DQUOTE;
-         yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
-         return (ARITH_CMD);
-       }
-      else if (cmdtyp == 0)    /* nested subshell */
-       {
-         push_string (wval, 0, (alias_t *)NULL);
-         if ((parser_state & PST_CASEPAT) == 0)
-           parser_state |= PST_SUBSHELL;
-         return (c);
-       }
-      else                     /* ERROR */
-       return -1;
-    }
-#endif
-
-  return -2;                   /* XXX */
-}
-
-/* We've seen a `(('.  Look for the matching `))'.  If we get it, return 1.
-   If not, assume it's a nested subshell for backwards compatibility and
-   return 0.  In any case, put the characters we've consumed into a locally-
-   allocated buffer and make *ep point to that buffer.  Return -1 on an
-   error, for example EOF. */
-static int
-parse_arith_cmd (ep, adddq)
-     char **ep;
-     int adddq;
-{
-  int exp_lineno, rval, c;
-  char *ttok, *tokstr;
-  int ttoklen;
-
-  exp_lineno = line_number;
-  ttok = parse_matched_pair (0, '(', ')', &ttoklen, 0);
-  rval = 1;
-  if (ttok == &matched_pair_error)
-    return -1;
-  /* Check that the next character is the closing right paren.  If
-     not, this is a syntax error. ( */
-  c = shell_getc (0);
-  if MBTEST(c != ')')
-    rval = 0;
-
-  tokstr = (char *)xmalloc (ttoklen + 4);
-
-  /* if ADDDQ != 0 then (( ... )) -> "..." */
-  if (rval == 1 && adddq)      /* arith cmd, add double quotes */
-    {
-      tokstr[0] = '"';
-      strncpy (tokstr + 1, ttok, ttoklen - 1);
-      tokstr[ttoklen] = '"';
-      tokstr[ttoklen+1] = '\0';
-    }
-  else if (rval == 1)          /* arith cmd, don't add double quotes */
-    {
-      strncpy (tokstr, ttok, ttoklen - 1);
-      tokstr[ttoklen-1] = '\0';
-    }
-  else                         /* nested subshell */
-    {
-      tokstr[0] = '(';
-      strncpy (tokstr + 1, ttok, ttoklen - 1);
-      tokstr[ttoklen] = ')';
-      tokstr[ttoklen+1] = c;
-      tokstr[ttoklen+2] = '\0';
-    }
-
-  *ep = tokstr;
-  FREE (ttok);
-  return rval;
-}
-#endif /* DPAREN_ARITHMETIC || ARITH_FOR_COMMAND */
-
-#if defined (COND_COMMAND)
-static void
-cond_error ()
-{
-  char *etext;
-
-  if (EOF_Reached && cond_token != COND_ERROR)         /* [[ */
-    parser_error (cond_lineno, _("unexpected EOF while looking for `]]'"));
-  else if (cond_token != COND_ERROR)
-    {
-      if (etext = error_token_from_token (cond_token))
-       {
-         parser_error (cond_lineno, _("syntax error in conditional expression: unexpected token `%s'"), etext);
-         free (etext);
-       }
-      else
-       parser_error (cond_lineno, _("syntax error in conditional expression"));
-    }
-}
-
-static COND_COM *
-cond_expr ()
-{
-  return (cond_or ());  
-}
-
-static COND_COM *
-cond_or ()
-{
-  COND_COM *l, *r;
-
-  l = cond_and ();
-  if (cond_token == OR_OR)
-    {
-      r = cond_or ();
-      l = make_cond_node (COND_OR, (WORD_DESC *)NULL, l, r);
-    }
-  return l;
-}
-
-static COND_COM *
-cond_and ()
-{
-  COND_COM *l, *r;
-
-  l = cond_term ();
-  if (cond_token == AND_AND)
-    {
-      r = cond_and ();
-      l = make_cond_node (COND_AND, (WORD_DESC *)NULL, l, r);
-    }
-  return l;
-}
-
-static int
-cond_skip_newlines ()
-{
-  while ((cond_token = read_token (READ)) == '\n')
-    {
-      if (SHOULD_PROMPT ())
-       prompt_again ();
-    }
-  return (cond_token);
-}
-
-#define COND_RETURN_ERROR() \
-  do { cond_token = COND_ERROR; return ((COND_COM *)NULL); } while (0)
-
-static COND_COM *
-cond_term ()
-{
-  WORD_DESC *op;
-  COND_COM *term, *tleft, *tright;
-  int tok, lineno;
-  char *etext;
-
-  /* Read a token.  It can be a left paren, a `!', a unary operator, or a
-     word that should be the first argument of a binary operator.  Start by
-     skipping newlines, since this is a compound command. */
-  tok = cond_skip_newlines ();
-  lineno = line_number;
-  if (tok == COND_END)
-    {
-      COND_RETURN_ERROR ();
-    }
-  else if (tok == '(')
-    {
-      term = cond_expr ();
-      if (cond_token != ')')
-       {
-         if (term)
-           dispose_cond_node (term);           /* ( */
-         if (etext = error_token_from_token (cond_token))
-           {
-             parser_error (lineno, _("unexpected token `%s', expected `)'"), etext);
-             free (etext);
-           }
-         else
-           parser_error (lineno, _("expected `)'"));
-         COND_RETURN_ERROR ();
-       }
-      term = make_cond_node (COND_EXPR, (WORD_DESC *)NULL, term, (COND_COM *)NULL);
-      (void)cond_skip_newlines ();
-    }
-  else if (tok == BANG || (tok == WORD && (yylval.word->word[0] == '!' && yylval.word->word[1] == '\0')))
-    {
-      if (tok == WORD)
-       dispose_word (yylval.word);     /* not needed */
-      term = cond_term ();
-      if (term)
-       term->flags |= CMD_INVERT_RETURN;
-    }
-  else if (tok == WORD && yylval.word->word[0] == '-' && yylval.word->word[2] == 0 && test_unop (yylval.word->word))
-    {
-      op = yylval.word;
-      tok = read_token (READ);
-      if (tok == WORD)
-       {
-         tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
-         term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL);
-       }
-      else
-       {
-         dispose_word (op);
-         if (etext = error_token_from_token (tok))
-           {
-             parser_error (line_number, _("unexpected argument `%s' to conditional unary operator"), etext);
-             free (etext);
-           }
-         else
-           parser_error (line_number, _("unexpected argument to conditional unary operator"));
-         COND_RETURN_ERROR ();
-       }
-
-      (void)cond_skip_newlines ();
-    }
-  else if (tok == WORD)                /* left argument to binary operator */
-    {
-      /* lhs */
-      tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
-
-      /* binop */
-      tok = read_token (READ);
-      if (tok == WORD && test_binop (yylval.word->word))
-       op = yylval.word;
-#if defined (COND_REGEXP)
-      else if (tok == WORD && STREQ (yylval.word->word, "=~"))
-       {
-         op = yylval.word;
-         parser_state |= PST_REGEXP;
-       }
-#endif
-      else if (tok == '<' || tok == '>')
-       op = make_word_from_token (tok);  /* ( */
-      /* There should be a check before blindly accepting the `)' that we have
-        seen the opening `('. */
-      else if (tok == COND_END || tok == AND_AND || tok == OR_OR || tok == ')')
-       {
-         /* Special case.  [[ x ]] is equivalent to [[ -n x ]], just like
-            the test command.  Similarly for [[ x && expr ]] or
-            [[ x || expr ]] or [[ (x) ]]. */
-         op = make_word ("-n");
-         term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL);
-         cond_token = tok;
-         return (term);
-       }
-      else
-       {
-         if (etext = error_token_from_token (tok))
-           {
-             parser_error (line_number, _("unexpected token `%s', conditional binary operator expected"), etext);
-             free (etext);
-           }
-         else
-           parser_error (line_number, _("conditional binary operator expected"));
-         dispose_cond_node (tleft);
-         COND_RETURN_ERROR ();
-       }
-
-      /* rhs */
-      tok = read_token (READ);
-      parser_state &= ~PST_REGEXP;
-      if (tok == WORD)
-       {
-         tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
-         term = make_cond_node (COND_BINARY, op, tleft, tright);
-       }
-      else
-       {
-         if (etext = error_token_from_token (tok))
-           {
-             parser_error (line_number, _("unexpected argument `%s' to conditional binary operator"), etext);
-             free (etext);
-           }
-         else
-           parser_error (line_number, _("unexpected argument to conditional binary operator"));
-         dispose_cond_node (tleft);
-         dispose_word (op);
-         COND_RETURN_ERROR ();
-       }
-
-      (void)cond_skip_newlines ();
-    }
-  else
-    {
-      if (tok < 256)
-       parser_error (line_number, _("unexpected token `%c' in conditional command"), tok);
-      else if (etext = error_token_from_token (tok))
-       {
-         parser_error (line_number, _("unexpected token `%s' in conditional command"), etext);
-         free (etext);
-       }
-      else
-       parser_error (line_number, _("unexpected token %d in conditional command"), tok);
-      COND_RETURN_ERROR ();
-    }
-  return (term);
-}      
-
-/* This is kind of bogus -- we slip a mini recursive-descent parser in
-   here to handle the conditional statement syntax. */
-static COMMAND *
-parse_cond_command ()
-{
-  COND_COM *cexp;
-
-  cexp = cond_expr ();
-  return (make_cond_command (cexp));
-}
-#endif
-
-#if defined (ARRAY_VARS)
-/* When this is called, it's guaranteed that we don't care about anything
-   in t beyond i.  We do save and restore the chars, though. */
-static int
-token_is_assignment (t, i)
-     char *t;
-     int i;
-{
-  unsigned char c, c1;
-  int r;
-
-  c = t[i]; c1 = t[i+1];
-  t[i] = '='; t[i+1] = '\0';
-  r = assignment (t, (parser_state & PST_COMPASSIGN) != 0);
-  t[i] = c; t[i+1] = c1;
-  return r;
-}
-
-/* XXX - possible changes here for `+=' */
-static int
-token_is_ident (t, i)
-     char *t;
-     int i;
-{
-  unsigned char c;
-  int r;
-
-  c = t[i];
-  t[i] = '\0';
-  r = legal_identifier (t);
-  t[i] = c;
-  return r;
-}
-#endif
-
-static int
-read_token_word (character)
-     int character;
-{
-  /* The value for YYLVAL when a WORD is read. */
-  WORD_DESC *the_word;
-
-  /* Index into the token that we are building. */
-  int token_index;
-
-  /* ALL_DIGITS becomes zero when we see a non-digit. */
-  int all_digit_token;
-
-  /* DOLLAR_PRESENT becomes non-zero if we see a `$'. */
-  int dollar_present;
-
-  /* COMPOUND_ASSIGNMENT becomes non-zero if we are parsing a compound
-     assignment. */
-  int compound_assignment;
-
-  /* QUOTED becomes non-zero if we see one of ("), ('), (`), or (\). */
-  int quoted;
-
-  /* Non-zero means to ignore the value of the next character, and just
-     to add it no matter what. */
- int pass_next_character;
-
-  /* The current delimiting character. */
-  int cd;
-  int result, peek_char;
-  char *ttok, *ttrans;
-  int ttoklen, ttranslen;
-  intmax_t lvalue;
-
-  if (token_buffer_size < TOKEN_DEFAULT_INITIAL_SIZE)
-    token = (char *)xrealloc (token, token_buffer_size = TOKEN_DEFAULT_INITIAL_SIZE);
-
-  token_index = 0;
-  all_digit_token = DIGIT (character);
-  dollar_present = quoted = pass_next_character = compound_assignment = 0;
-
-  for (;;)
-    {
-      if (character == EOF)
-       goto got_token;
-
-      if (pass_next_character)
-       {
-         pass_next_character = 0;
-         goto got_escaped_character;
-       }
-
-      cd = current_delimiter (dstack);
-
-      /* Handle backslashes.  Quote lots of things when not inside of
-        double-quotes, quote some things inside of double-quotes. */
-      if MBTEST(character == '\\')
-       {
-         peek_char = shell_getc (0);
-
-         /* Backslash-newline is ignored in all cases except
-            when quoted with single quotes. */
-         if (peek_char == '\n')
-           {
-             character = '\n';
-             goto next_character;
-           }
-         else
-           {
-             shell_ungetc (peek_char);
-
-             /* If the next character is to be quoted, note it now. */
-             if (cd == 0 || cd == '`' ||
-                 (cd == '"' && peek_char >= 0 && (sh_syntaxtab[peek_char] & CBSDQUOTE)))
-               pass_next_character++;
-
-             quoted = 1;
-             goto got_character;
-           }
-       }
-
-      /* Parse a matched pair of quote characters. */
-      if MBTEST(shellquote (character))
-       {
-         push_delimiter (dstack, character);
-         ttok = parse_matched_pair (character, character, character, &ttoklen, (character == '`') ? P_COMMAND : 0);
-         pop_delimiter (dstack);
-         if (ttok == &matched_pair_error)
-           return -1;          /* Bail immediately. */
-         RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
-                                 token_buffer_size, TOKEN_DEFAULT_GROW_SIZE);
-         token[token_index++] = character;
-         strcpy (token + token_index, ttok);
-         token_index += ttoklen;
-         all_digit_token = 0;
-         quoted = 1;
-         dollar_present |= (character == '"' && strchr (ttok, '$') != 0);
-         FREE (ttok);
-         goto next_character;
-       }
-
-#ifdef COND_REGEXP
-      /* When parsing a regexp as a single word inside a conditional command,
-        we need to special-case characters special to both the shell and
-        regular expressions.  Right now, that is only '(' and '|'. */ /*)*/
-      if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|'))         /*)*/
-       {
-         if (character == '|')
-           goto got_character;
-
-         push_delimiter (dstack, character);
-         ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
-         pop_delimiter (dstack);
-         if (ttok == &matched_pair_error)
-           return -1;          /* Bail immediately. */
-         RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
-                                 token_buffer_size, TOKEN_DEFAULT_GROW_SIZE);
-         token[token_index++] = character;
-         strcpy (token + token_index, ttok);
-         token_index += ttoklen;
-         FREE (ttok);
-         dollar_present = all_digit_token = 0;
-         goto next_character;
-       }
-#endif /* COND_REGEXP */
-
-#ifdef EXTENDED_GLOB
-      /* Parse a ksh-style extended pattern matching specification. */
-      if MBTEST(extended_glob && PATTERN_CHAR (character))
-       {
-         peek_char = shell_getc (1);
-         if MBTEST(peek_char == '(')           /* ) */
-           {
-             push_delimiter (dstack, peek_char);
-             ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
-             pop_delimiter (dstack);
-             if (ttok == &matched_pair_error)
-               return -1;              /* Bail immediately. */
-             RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
-                                     token_buffer_size,
-                                     TOKEN_DEFAULT_GROW_SIZE);
-             token[token_index++] = character;
-             token[token_index++] = peek_char;
-             strcpy (token + token_index, ttok);
-             token_index += ttoklen;
-             FREE (ttok);
-             dollar_present = all_digit_token = 0;
-             goto next_character;
-           }
-         else
-           shell_ungetc (peek_char);
-       }
-#endif /* EXTENDED_GLOB */
-
-      /* If the delimiter character is not single quote, parse some of
-        the shell expansions that must be read as a single word. */
-      if (shellexp (character))
-       {
-         peek_char = shell_getc (1);
-         /* $(...), <(...), >(...), $((...)), ${...}, and $[...] constructs */
-         if MBTEST(peek_char == '(' || \
-               ((peek_char == '{' || peek_char == '[') && character == '$'))   /* ) ] } */
-           {
-             if (peek_char == '{')             /* } */
-               ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE);
-             else if (peek_char == '(')                /* ) */
-               {
-                 /* XXX - push and pop the `(' as a delimiter for use by
-                    the command-oriented-history code.  This way newlines
-                    appearing in the $(...) string get added to the
-                    history literally rather than causing a possibly-
-                    incorrect `;' to be added. ) */
-                 push_delimiter (dstack, peek_char);
-                 ttok = parse_comsub (cd, '(', ')', &ttoklen, P_COMMAND);
-                 pop_delimiter (dstack);
-               }
-             else
-               ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0);
-             if (ttok == &matched_pair_error)
-               return -1;              /* Bail immediately. */
-             RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
-                                     token_buffer_size,
-                                     TOKEN_DEFAULT_GROW_SIZE);
-             token[token_index++] = character;
-             token[token_index++] = peek_char;
-             strcpy (token + token_index, ttok);
-             token_index += ttoklen;
-             FREE (ttok);
-             dollar_present = 1;
-             all_digit_token = 0;
-             goto next_character;
-           }
-         /* This handles $'...' and $"..." new-style quoted strings. */
-         else if MBTEST(character == '$' && (peek_char == '\'' || peek_char == '"'))
-           {
-             int first_line;
-
-             first_line = line_number;
-             push_delimiter (dstack, peek_char);
-             ttok = parse_matched_pair (peek_char, peek_char, peek_char,
-                                        &ttoklen,
-                                        (peek_char == '\'') ? P_ALLOWESC : 0);
-             pop_delimiter (dstack);
-             if (ttok == &matched_pair_error)
-               return -1;
-             if (peek_char == '\'')
-               {
-                 ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen);
-                 free (ttok);
-
-                 /* Insert the single quotes and correctly quote any
-                    embedded single quotes (allowed because P_ALLOWESC was
-                    passed to parse_matched_pair). */
-                 ttok = sh_single_quote (ttrans);
-                 free (ttrans);
-                 ttranslen = strlen (ttok);
-                 ttrans = ttok;
-               }
-             else
-               {
-                 /* Try to locale-expand the converted string. */
-                 ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
-                 free (ttok);
-
-                 /* Add the double quotes back */
-                 ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
-                 free (ttrans);
-                 ttranslen += 2;
-                 ttrans = ttok;
-               }
-
-             RESIZE_MALLOCED_BUFFER (token, token_index, ttranslen + 2,
-                                     token_buffer_size,
-                                     TOKEN_DEFAULT_GROW_SIZE);
-             strcpy (token + token_index, ttrans);
-             token_index += ttranslen;
-             FREE (ttrans);
-             quoted = 1;
-             all_digit_token = 0;
-             goto next_character;
-           }
-         /* This could eventually be extended to recognize all of the
-            shell's single-character parameter expansions, and set flags.*/
-         else if MBTEST(character == '$' && peek_char == '$')
-           {
-             ttok = (char *)xmalloc (3);
-             ttok[0] = ttok[1] = '$';
-             ttok[2] = '\0';
-             RESIZE_MALLOCED_BUFFER (token, token_index, 3,
-                                     token_buffer_size,
-                                     TOKEN_DEFAULT_GROW_SIZE);
-             strcpy (token + token_index, ttok);
-             token_index += 2;
-             dollar_present = 1;
-             all_digit_token = 0;
-             FREE (ttok);
-             goto next_character;
-           }
-         else
-           shell_ungetc (peek_char);
-       }
-
-#if defined (ARRAY_VARS)
-      /* Identify possible array subscript assignment; match [...].  If
-        parser_state&PST_COMPASSIGN, we need to parse [sub]=words treating
-        `sub' as if it were enclosed in double quotes. */
-      else if MBTEST(character == '[' &&               /* ] */
-                    ((token_index > 0 && assignment_acceptable (last_read_token) && token_is_ident (token, token_index)) ||
-                     (token_index == 0 && (parser_state&PST_COMPASSIGN))))
-        {
-         ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARRAYSUB);
-         if (ttok == &matched_pair_error)
-           return -1;          /* Bail immediately. */
-         RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
-                                 token_buffer_size,
-                                 TOKEN_DEFAULT_GROW_SIZE);
-         token[token_index++] = character;
-         strcpy (token + token_index, ttok);
-         token_index += ttoklen;
-         FREE (ttok);
-         all_digit_token = 0;
-         goto next_character;
-        }
-      /* Identify possible compound array variable assignment. */
-      else if MBTEST(character == '=' && token_index > 0 && (assignment_acceptable (last_read_token) || (parser_state & PST_ASSIGNOK)) && token_is_assignment (token, token_index))
-       {
-         peek_char = shell_getc (1);
-         if MBTEST(peek_char == '(')           /* ) */
-           {
-             ttok = parse_compound_assignment (&ttoklen);
-
-             RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 4,
-                                     token_buffer_size,
-                                     TOKEN_DEFAULT_GROW_SIZE);
-
-             token[token_index++] = '=';
-             token[token_index++] = '(';
-             if (ttok)
-               {
-                 strcpy (token + token_index, ttok);
-                 token_index += ttoklen;
-               }
-             token[token_index++] = ')';
-             FREE (ttok);
-             all_digit_token = 0;
-             compound_assignment = 1;
-#if 1
-             goto next_character;
-#else
-             goto got_token;           /* ksh93 seems to do this */
-#endif
-           }
-         else
-           shell_ungetc (peek_char);
-       }
-#endif
-
-      /* When not parsing a multi-character word construct, shell meta-
-        characters break words. */
-      if MBTEST(shellbreak (character))
-       {
-         shell_ungetc (character);
-         goto got_token;
-       }
-
-    got_character:
-
-      if (character == CTLESC || character == CTLNUL)
-       token[token_index++] = CTLESC;
-
-    got_escaped_character:
-
-      all_digit_token &= DIGIT (character);
-      dollar_present |= character == '$';
-
-      token[token_index++] = character;
-
-      RESIZE_MALLOCED_BUFFER (token, token_index, 1, token_buffer_size,
-                             TOKEN_DEFAULT_GROW_SIZE);
-
-    next_character:
-      if (character == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
-
-      /* We want to remove quoted newlines (that is, a \<newline> pair)
-        unless we are within single quotes or pass_next_character is
-        set (the shell equivalent of literal-next). */
-      cd = current_delimiter (dstack);
-      character = shell_getc (cd != '\'' && pass_next_character == 0);
-    }  /* end for (;;) */
-
-got_token:
-
-  token[token_index] = '\0';
-
-  /* Check to see what thing we should return.  If the last_read_token
-     is a `<', or a `&', or the character which ended this token is
-     a '>' or '<', then, and ONLY then, is this input token a NUMBER.
-     Otherwise, it is just a word, and should be returned as such. */
-  if MBTEST(all_digit_token && (character == '<' || character == '>' || \
-                   last_read_token == LESS_AND || \
-                   last_read_token == GREATER_AND))
-      {
-       if (legal_number (token, &lvalue) && (int)lvalue == lvalue)
-         yylval.number = lvalue;
-       else
-         yylval.number = -1;
-       return (NUMBER);
-      }
-
-  /* Check for special case tokens. */
-  result = (last_shell_getc_is_singlebyte) ? special_case_tokens (token) : -1;
-  if (result >= 0)
-    return result;
-
-#if defined (ALIAS)
-  /* Posix.2 does not allow reserved words to be aliased, so check for all
-     of them, including special cases, before expanding the current token
-     as an alias. */
-  if MBTEST(posixly_correct)
-    CHECK_FOR_RESERVED_WORD (token);
-
-  /* Aliases are expanded iff EXPAND_ALIASES is non-zero, and quoting
-     inhibits alias expansion. */
-  if (expand_aliases && quoted == 0)
-    {
-      result = alias_expand_token (token);
-      if (result == RE_READ_TOKEN)
-       return (RE_READ_TOKEN);
-      else if (result == NO_EXPANSION)
-       parser_state &= ~PST_ALEXPNEXT;
-    }
-
-  /* If not in Posix.2 mode, check for reserved words after alias
-     expansion. */
-  if MBTEST(posixly_correct == 0)
-#endif
-    CHECK_FOR_RESERVED_WORD (token);
-
-  the_word = (WORD_DESC *)xmalloc (sizeof (WORD_DESC));
-  the_word->word = (char *)xmalloc (1 + token_index);
-  the_word->flags = 0;
-  strcpy (the_word->word, token);
-  if (dollar_present)
-    the_word->flags |= W_HASDOLLAR;
-  if (quoted)
-    the_word->flags |= W_QUOTED;               /*(*/
-  if (compound_assignment && token[token_index-1] == ')')
-    the_word->flags |= W_COMPASSIGN;
-  /* A word is an assignment if it appears at the beginning of a
-     simple command, or after another assignment word.  This is
-     context-dependent, so it cannot be handled in the grammar. */
-  if (assignment (token, (parser_state & PST_COMPASSIGN) != 0))
-    {
-      the_word->flags |= W_ASSIGNMENT;
-      /* Don't perform word splitting on assignment statements. */
-      if (assignment_acceptable (last_read_token) || (parser_state & PST_COMPASSIGN) != 0)
-       the_word->flags |= W_NOSPLIT;
-    }
-
-  if (command_token_position (last_read_token))
-    {
-      struct builtin *b;
-      b = builtin_address_internal (token, 0);
-      if (b && (b->flags & ASSIGNMENT_BUILTIN))
-       parser_state |= PST_ASSIGNOK;
-      else if (STREQ (token, "eval") || STREQ (token, "let"))
-       parser_state |= PST_ASSIGNOK;
-    }
-
-  yylval.word = the_word;
-
-  result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT))
-               ? ASSIGNMENT_WORD : WORD;
-
-  switch (last_read_token)
-    {
-    case FUNCTION:
-      parser_state |= PST_ALLOWOPNBRC;
-      function_dstart = line_number;
-      break;
-    case CASE:
-    case SELECT:
-    case FOR:
-      if (word_top < MAX_CASE_NEST)
-       word_top++;
-      word_lineno[word_top] = line_number;
-      break;
-    }
-
-  return (result);
-}
-
-/* Return 1 if TOKSYM is a token that after being read would allow
-   a reserved word to be seen, else 0. */
-static int
-reserved_word_acceptable (toksym)
-     int toksym;
-{
-  switch (toksym)
-    {
-    case '\n':
-    case ';':
-    case '(':
-    case ')':
-    case '|':
-    case '&':
-    case '{':
-    case '}':          /* XXX */
-    case AND_AND:
-    case BANG:
-    case BAR_AND:
-    case DO:
-    case DONE:
-    case ELIF:
-    case ELSE:
-    case ESAC:
-    case FI:
-    case IF:
-    case OR_OR:
-    case SEMI_SEMI:
-    case SEMI_AND:
-    case SEMI_SEMI_AND:
-    case THEN:
-    case TIME:
-    case TIMEOPT:
-    case COPROC:
-    case UNTIL:
-    case WHILE:
-    case 0:
-      return 1;
-    default:
-#if defined (COPROCESS_SUPPORT)
-      if (last_read_token == WORD && token_before_that == COPROC)
-       return 1;
-#endif
-      return 0;
-    }
-}
-    
-/* Return the index of TOKEN in the alist of reserved words, or -1 if
-   TOKEN is not a shell reserved word. */
-int
-find_reserved_word (tokstr)
-     char *tokstr;
-{
-  int i;
-  for (i = 0; word_token_alist[i].word; i++)
-    if (STREQ (tokstr, word_token_alist[i].word))
-      return i;
-  return -1;
-}
-
-#if 0
-#if defined (READLINE)
-/* Called after each time readline is called.  This insures that whatever
-   the new prompt string is gets propagated to readline's local prompt
-   variable. */
-static void
-reset_readline_prompt ()
-{
-  char *temp_prompt;
-
-  if (prompt_string_pointer)
-    {
-      temp_prompt = (*prompt_string_pointer)
-                       ? decode_prompt_string (*prompt_string_pointer)
-                       : (char *)NULL;
-
-      if (temp_prompt == 0)
-       {
-         temp_prompt = (char *)xmalloc (1);
-         temp_prompt[0] = '\0';
-       }
-
-      FREE (current_readline_prompt);
-      current_readline_prompt = temp_prompt;
-    }
-}
-#endif /* READLINE */
-#endif /* 0 */
-
-#if defined (HISTORY)
-/* A list of tokens which can be followed by newlines, but not by
-   semi-colons.  When concatenating multiple lines of history, the
-   newline separator for such tokens is replaced with a space. */
-static const int no_semi_successors[] = {
-  '\n', '{', '(', ')', ';', '&', '|',
-  CASE, DO, ELSE, IF, SEMI_SEMI, SEMI_AND, SEMI_SEMI_AND, THEN, UNTIL,
-  WHILE, AND_AND, OR_OR, IN,
-  0
-};
-
-/* If we are not within a delimited expression, try to be smart
-   about which separators can be semi-colons and which must be
-   newlines.  Returns the string that should be added into the
-   history entry. */
-char *
-history_delimiting_chars ()
-{
-  register int i;
-
-  if (dstack.delimiter_depth != 0)
-    return ("\n");
-
-  /* We look for current_command_line_count == 2 because we are looking to
-     add the first line of the body of the here document (the second line
-     of the command). */
-  if (parser_state & PST_HEREDOC)
-    return (current_command_line_count == 2 ? "\n" : "");
-
-  /* First, handle some special cases. */
-  /*(*/
-  /* If we just read `()', assume it's a function definition, and don't
-     add a semicolon.  If the token before the `)' was not `(', and we're
-     not in the midst of parsing a case statement, assume it's a
-     parenthesized command and add the semicolon. */
-  /*)(*/
-  if (token_before_that == ')')
-    {
-      if (two_tokens_ago == '(')       /*)*/   /* function def */
-       return " ";
-      /* This does not work for subshells inside case statement
-        command lists.  It's a suboptimal solution. */
-      else if (parser_state & PST_CASESTMT)    /* case statement pattern */
-       return " ";
-      else     
-       return "; ";                            /* (...) subshell */
-    }
-  else if (token_before_that == WORD && two_tokens_ago == FUNCTION)
-    return " ";                /* function def using `function name' without `()' */
-
-  else if (token_before_that == WORD && two_tokens_ago == FOR)
-    {
-      /* Tricky.  `for i\nin ...' should not have a semicolon, but
-        `for i\ndo ...' should.  We do what we can. */
-      for (i = shell_input_line_index; whitespace (shell_input_line[i]); i++)
-       ;
-      if (shell_input_line[i] && shell_input_line[i] == 'i' && shell_input_line[i+1] == 'n')
-       return " ";
-      return ";";
-    }
-  else if (two_tokens_ago == CASE && token_before_that == WORD && (parser_state & PST_CASESTMT))
-    return " ";
-
-  for (i = 0; no_semi_successors[i]; i++)
-    {
-      if (token_before_that == no_semi_successors[i])
-       return (" ");
-    }
-
-  return ("; ");
-}
-#endif /* HISTORY */
-
-/* Issue a prompt, or prepare to issue a prompt when the next character
-   is read. */
-static void
-prompt_again ()
-{
-  char *temp_prompt;
-
-  if (interactive == 0 || expanding_alias())   /* XXX */
-    return;
-
-  ps1_prompt = get_string_value ("PS1");
-  ps2_prompt = get_string_value ("PS2");
-
-  if (!prompt_string_pointer)
-    prompt_string_pointer = &ps1_prompt;
-
-  temp_prompt = *prompt_string_pointer
-                       ? decode_prompt_string (*prompt_string_pointer)
-                       : (char *)NULL;
-
-  if (temp_prompt == 0)
-    {
-      temp_prompt = (char *)xmalloc (1);
-      temp_prompt[0] = '\0';
-    }
-
-  current_prompt_string = *prompt_string_pointer;
-  prompt_string_pointer = &ps2_prompt;
-
-#if defined (READLINE)
-  if (!no_line_editing)
-    {
-      FREE (current_readline_prompt);
-      current_readline_prompt = temp_prompt;
-    }
-  else
-#endif /* READLINE */
-    {
-      FREE (current_decoded_prompt);
-      current_decoded_prompt = temp_prompt;
-    }
-}
-
-int
-get_current_prompt_level ()
-{
-  return ((current_prompt_string && current_prompt_string == ps2_prompt) ? 2 : 1);
-}
-
-void
-set_current_prompt_level (x)
-     int x;
-{
-  prompt_string_pointer = (x == 2) ? &ps2_prompt : &ps1_prompt;
-  current_prompt_string = *prompt_string_pointer;
-}
-      
-static void
-print_prompt ()
-{
-  fprintf (stderr, "%s", current_decoded_prompt);
-  fflush (stderr);
-}
-
-/* Return a string which will be printed as a prompt.  The string
-   may contain special characters which are decoded as follows:
-
-       \a      bell (ascii 07)
-       \d      the date in Day Mon Date format
-       \e      escape (ascii 033)
-       \h      the hostname up to the first `.'
-       \H      the hostname
-       \j      the number of active jobs
-       \l      the basename of the shell's tty device name
-       \n      CRLF
-       \r      CR
-       \s      the name of the shell
-       \t      the time in 24-hour hh:mm:ss format
-       \T      the time in 12-hour hh:mm:ss format
-       \@      the time in 12-hour hh:mm am/pm format
-       \A      the time in 24-hour hh:mm format
-       \D{fmt} the result of passing FMT to strftime(3)
-       \u      your username
-       \v      the version of bash (e.g., 2.00)
-       \V      the release of bash, version + patchlevel (e.g., 2.00.0)
-       \w      the current working directory
-       \W      the last element of $PWD
-       \!      the history number of this command
-       \#      the command number of this command
-       \$      a $ or a # if you are root
-       \nnn    character code nnn in octal
-       \\      a backslash
-       \[      begin a sequence of non-printing chars
-       \]      end a sequence of non-printing chars
-*/
-#define PROMPT_GROWTH 48
-char *
-decode_prompt_string (string)
-     char *string;
-{
-  WORD_LIST *list;
-  char *result, *t;
-  struct dstack save_dstack;
-  int last_exit_value;
-#if defined (PROMPT_STRING_DECODE)
-  int result_size, result_index;
-  int c, n, i;
-  char *temp, octal_string[4];
-  struct tm *tm;  
-  time_t the_time;
-  char timebuf[128];
-  char *timefmt;
-
-  result = (char *)xmalloc (result_size = PROMPT_GROWTH);
-  result[result_index = 0] = 0;
-  temp = (char *)NULL;
-
-  while (c = *string++)
-    {
-      if (posixly_correct && c == '!')
-       {
-         if (*string == '!')
-           {
-             temp = savestring ("!");
-             goto add_string;
-           }
-         else
-           {
-#if !defined (HISTORY)
-               temp = savestring ("1");
-#else /* HISTORY */
-               temp = itos (history_number ());
-#endif /* HISTORY */
-               string--;       /* add_string increments string again. */
-               goto add_string;
-           }
-       }
-      if (c == '\\')
-       {
-         c = *string;
-
-         switch (c)
-           {
-           case '0':
-           case '1':
-           case '2':
-           case '3':
-           case '4':
-           case '5':
-           case '6':
-           case '7':
-             strncpy (octal_string, string, 3);
-             octal_string[3] = '\0';
-
-             n = read_octal (octal_string);
-             temp = (char *)xmalloc (3);
-
-             if (n == CTLESC || n == CTLNUL)
-               {
-                 temp[0] = CTLESC;
-                 temp[1] = n;
-                 temp[2] = '\0';
-               }
-             else if (n == -1)
-               {
-                 temp[0] = '\\';
-                 temp[1] = '\0';
-               }
-             else
-               {
-                 temp[0] = n;
-                 temp[1] = '\0';
-               }
-
-             for (c = 0; n != -1 && c < 3 && ISOCTAL (*string); c++)
-               string++;
-
-             c = 0;            /* tested at add_string: */
-             goto add_string;
-
-           case 'd':
-           case 't':
-           case 'T':
-           case '@':
-           case 'A':
-             /* Make the current time/date into a string. */
-             (void) time (&the_time);
-             tm = localtime (&the_time);
-
-             if (c == 'd')
-               n = strftime (timebuf, sizeof (timebuf), "%a %b %d", tm);
-             else if (c == 't')
-               n = strftime (timebuf, sizeof (timebuf), "%H:%M:%S", tm);
-             else if (c == 'T')
-               n = strftime (timebuf, sizeof (timebuf), "%I:%M:%S", tm);
-             else if (c == '@')
-               n = strftime (timebuf, sizeof (timebuf), "%I:%M %p", tm);
-             else if (c == 'A')
-               n = strftime (timebuf, sizeof (timebuf), "%H:%M", tm);
-
-             if (n == 0)
-               timebuf[0] = '\0';
-             else
-               timebuf[sizeof(timebuf) - 1] = '\0';
-
-             temp = savestring (timebuf);
-             goto add_string;
-
-           case 'D':           /* strftime format */
-             if (string[1] != '{')             /* } */
-               goto not_escape;
-
-             (void) time (&the_time);
-             tm = localtime (&the_time);
-             string += 2;                      /* skip { */
-             timefmt = xmalloc (strlen (string) + 3);
-             for (t = timefmt; *string && *string != '}'; )
-               *t++ = *string++;
-             *t = '\0';
-             c = *string;      /* tested at add_string */
-             if (timefmt[0] == '\0')
-               {
-                 timefmt[0] = '%';
-                 timefmt[1] = 'X';     /* locale-specific current time */
-                 timefmt[2] = '\0';
-               }
-             n = strftime (timebuf, sizeof (timebuf), timefmt, tm);
-             free (timefmt);
-
-             if (n == 0)
-               timebuf[0] = '\0';
-             else
-               timebuf[sizeof(timebuf) - 1] = '\0';
-
-             if (promptvars || posixly_correct)
-               /* Make sure that expand_prompt_string is called with a
-                  second argument of Q_DOUBLE_QUOTES if we use this
-                  function here. */
-               temp = sh_backslash_quote_for_double_quotes (timebuf);
-             else
-               temp = savestring (timebuf);
-             goto add_string;
-             
-           case 'n':
-             temp = (char *)xmalloc (3);
-             temp[0] = no_line_editing ? '\n' : '\r';
-             temp[1] = no_line_editing ? '\0' : '\n';
-             temp[2] = '\0';
-             goto add_string;
-
-           case 's':
-             temp = base_pathname (shell_name);
-             temp = savestring (temp);
-             goto add_string;
-
-           case 'v':
-           case 'V':
-             temp = (char *)xmalloc (16);
-             if (c == 'v')
-               strcpy (temp, dist_version);
-             else
-               sprintf (temp, "%s.%d", dist_version, patch_level);
-             goto add_string;
-
-           case 'w':
-           case 'W':
-             {
-               /* Use the value of PWD because it is much more efficient. */
-               char t_string[PATH_MAX];
-               int tlen;
-
-               temp = get_string_value ("PWD");
-
-               if (temp == 0)
-                 {
-                   if (getcwd (t_string, sizeof(t_string)) == 0)
-                     {
-                       t_string[0] = '.';
-                       tlen = 1;
-                     }
-                   else
-                     tlen = strlen (t_string);
-                 }
-               else
-                 {
-                   tlen = sizeof (t_string) - 1;
-                   strncpy (t_string, temp, tlen);
-                 }
-               t_string[tlen] = '\0';
-
-#define ROOT_PATH(x)   ((x)[0] == '/' && (x)[1] == 0)
-#define DOUBLE_SLASH_ROOT(x)   ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
-               /* Abbreviate \W as ~ if $PWD == $HOME */
-               if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, t_string) == 0))
-                 {
-                   if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
-                     {
-                       t = strrchr (t_string, '/');
-                       if (t)
-                         strcpy (t_string, t + 1);
-                     }
-                 }
-#undef ROOT_PATH
-#undef DOUBLE_SLASH_ROOT
-               else
-                 /* polite_directory_format is guaranteed to return a string
-                    no longer than PATH_MAX - 1 characters. */
-                 strcpy (t_string, polite_directory_format (t_string));
-
-               temp = trim_pathname (t_string, PATH_MAX - 1);
-               /* If we're going to be expanding the prompt string later,
-                  quote the directory name. */
-               if (promptvars || posixly_correct)
-                 /* Make sure that expand_prompt_string is called with a
-                    second argument of Q_DOUBLE_QUOTES if we use this
-                    function here. */
-                 temp = sh_backslash_quote_for_double_quotes (t_string);
-               else
-                 temp = savestring (t_string);
-
-               goto add_string;
-             }
-
-           case 'u':
-             if (current_user.user_name == 0)
-               get_current_user_info ();
-             temp = savestring (current_user.user_name);
-             goto add_string;
-
-           case 'h':
-           case 'H':
-             temp = savestring (current_host_name);
-             if (c == 'h' && (t = (char *)strchr (temp, '.')))
-               *t = '\0';
-             goto add_string;
-
-           case '#':
-             temp = itos (current_command_number);
-             goto add_string;
-
-           case '!':
-#if !defined (HISTORY)
-             temp = savestring ("1");
-#else /* HISTORY */
-             temp = itos (history_number ());
-#endif /* HISTORY */
-             goto add_string;
-
-           case '$':
-             t = temp = (char *)xmalloc (3);
-             if ((promptvars || posixly_correct) && (current_user.euid != 0))
-               *t++ = '\\';
-             *t++ = current_user.euid == 0 ? '#' : '$';
-             *t = '\0';
-             goto add_string;
-
-           case 'j':
-             temp = itos (count_all_jobs ());
-             goto add_string;
-
-           case 'l':
-#if defined (HAVE_TTYNAME)
-             temp = (char *)ttyname (fileno (stdin));
-             t = temp ? base_pathname (temp) : "tty";
-             temp = savestring (t);
-#else
-             temp = savestring ("tty");
-#endif /* !HAVE_TTYNAME */
-             goto add_string;
-
-#if defined (READLINE)
-           case '[':
-           case ']':
-             if (no_line_editing)
-               {
-                 string++;
-                 break;
-               }
-             temp = (char *)xmalloc (3);
-             n = (c == '[') ? RL_PROMPT_START_IGNORE : RL_PROMPT_END_IGNORE;
-             i = 0;
-             if (n == CTLESC || n == CTLNUL)
-               temp[i++] = CTLESC;
-             temp[i++] = n;
-             temp[i] = '\0';
-             goto add_string;
-#endif /* READLINE */
-
-           case '\\':
-           case 'a':
-           case 'e':
-           case 'r':
-             temp = (char *)xmalloc (2);
-             if (c == 'a')
-               temp[0] = '\07';
-             else if (c == 'e')
-               temp[0] = '\033';
-             else if (c == 'r')
-               temp[0] = '\r';
-             else                      /* (c == '\\') */
-               temp[0] = c;
-             temp[1] = '\0';
-             goto add_string;
-
-           default:
-not_escape:
-             temp = (char *)xmalloc (3);
-             temp[0] = '\\';
-             temp[1] = c;
-             temp[2] = '\0';
-
-           add_string:
-             if (c)
-               string++;
-             result =
-               sub_append_string (temp, result, &result_index, &result_size);
-             temp = (char *)NULL; /* Freed in sub_append_string (). */
-             result[result_index] = '\0';
-             break;
-           }
-       }
-      else
-       {
-         RESIZE_MALLOCED_BUFFER (result, result_index, 3, result_size, PROMPT_GROWTH);
-         result[result_index++] = c;
-         result[result_index] = '\0';
-       }
-    }
-#else /* !PROMPT_STRING_DECODE */
-  result = savestring (string);
-#endif /* !PROMPT_STRING_DECODE */
-
-  /* Save the delimiter stack and point `dstack' to temp space so any
-     command substitutions in the prompt string won't result in screwing
-     up the parser's quoting state. */
-  save_dstack = dstack;
-  dstack = temp_dstack;
-  dstack.delimiter_depth = 0;
-
-  /* Perform variable and parameter expansion and command substitution on
-     the prompt string. */
-  if (promptvars || posixly_correct)
-    {
-      last_exit_value = last_command_exit_value;
-      list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0);
-      free (result);
-      result = string_list (list);
-      dispose_words (list);
-      last_command_exit_value = last_exit_value;
-    }
-  else
-    {
-      t = dequote_string (result);
-      free (result);
-      result = t;
-    }
-
-  dstack = save_dstack;
-
-  return (result);
-}
-
-/************************************************
- *                                             *
- *             ERROR HANDLING                  *
- *                                             *
- ************************************************/
-
-/* Report a syntax error, and restart the parser.  Call here for fatal
-   errors. */
-int
-yyerror (msg)
-     const char *msg;
-{
-  report_syntax_error ((char *)NULL);
-  reset_parser ();
-  return (0);
-}
-
-static char *
-error_token_from_token (tok)
-     int tok;
-{
-  char *t;
-
-  if (t = find_token_in_alist (tok, word_token_alist, 0))
-    return t;
-
-  if (t = find_token_in_alist (tok, other_token_alist, 0))
-    return t;
-
-  t = (char *)NULL;
-  /* This stuff is dicy and needs closer inspection */
-  switch (current_token)
-    {
-    case WORD:
-    case ASSIGNMENT_WORD:
-      if (yylval.word)
-       t = savestring (yylval.word->word);
-      break;
-    case NUMBER:
-      t = itos (yylval.number);
-      break;
-    case ARITH_CMD:
-      if (yylval.word_list)
-        t = string_list (yylval.word_list);
-      break;
-    case ARITH_FOR_EXPRS:
-      if (yylval.word_list)
-       t = string_list_internal (yylval.word_list, " ; ");
-      break;
-    case COND_CMD:
-      t = (char *)NULL;                /* punt */
-      break;
-    }
-
-  return t;
-}
-
-static char *
-error_token_from_text ()
-{
-  char *msg, *t;
-  int token_end, i;
-
-  t = shell_input_line;
-  i = shell_input_line_index;
-  token_end = 0;
-  msg = (char *)NULL;
-
-  if (i && t[i] == '\0')
-    i--;
-
-  while (i && (whitespace (t[i]) || t[i] == '\n'))
-    i--;
-
-  if (i)
-    token_end = i + 1;
-
-  while (i && (member (t[i], " \n\t;|&") == 0))
-    i--;
-
-  while (i != token_end && (whitespace (t[i]) || t[i] == '\n'))
-    i++;
-
-  /* Return our idea of the offending token. */
-  if (token_end || (i == 0 && token_end == 0))
-    {
-      if (token_end)
-       msg = substring (t, i, token_end);
-      else     /* one-character token */
-       {
-         msg = (char *)xmalloc (2);
-         msg[0] = t[i];
-         msg[1] = '\0';
-       }
-    }
-
-  return (msg);
-}
-
-static void
-print_offending_line ()
-{
-  char *msg;
-  int token_end;
-
-  msg = savestring (shell_input_line);
-  token_end = strlen (msg);
-  while (token_end && msg[token_end - 1] == '\n')
-    msg[--token_end] = '\0';
-
-  parser_error (line_number, "`%s'", msg);
-  free (msg);
-}
-
-/* Report a syntax error with line numbers, etc.
-   Call here for recoverable errors.  If you have a message to print,
-   then place it in MESSAGE, otherwise pass NULL and this will figure
-   out an appropriate message for you. */
-static void
-report_syntax_error (message)
-     char *message;
-{
-  char *msg;
-
-  if (message)
-    {
-      parser_error (line_number, "%s", message);
-      if (interactive && EOF_Reached)
-       EOF_Reached = 0;
-      last_command_exit_value = EX_BADUSAGE;
-      return;
-    }
-
-  /* If the line of input we're reading is not null, try to find the
-     objectionable token.  First, try to figure out what token the
-     parser's complaining about by looking at current_token. */
-  if (current_token != 0 && EOF_Reached == 0 && (msg = error_token_from_token (current_token)))
-    {
-      parser_error (line_number, _("syntax error near unexpected token `%s'"), msg);
-      free (msg);
-
-      if (interactive == 0)
-       print_offending_line ();
-
-      last_command_exit_value = EX_BADUSAGE;
-      return;
-    }
-
-  /* If looking at the current token doesn't prove fruitful, try to find the
-     offending token by analyzing the text of the input line near the current
-     input line index and report what we find. */
-  if (shell_input_line && *shell_input_line)
-    {
-      msg = error_token_from_text ();
-      if (msg)
-       {
-         parser_error (line_number, _("syntax error near `%s'"), msg);
-         free (msg);
-       }
-
-      /* If not interactive, print the line containing the error. */
-      if (interactive == 0)
-        print_offending_line ();
-    }
-  else
-    {
-      msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error");
-      parser_error (line_number, "%s", msg);
-      /* When the shell is interactive, this file uses EOF_Reached
-        only for error reporting.  Other mechanisms are used to
-        decide whether or not to exit. */
-      if (interactive && EOF_Reached)
-       EOF_Reached = 0;
-    }
-
-  last_command_exit_value = EX_BADUSAGE;
-}
-
-/* ??? Needed function. ??? We have to be able to discard the constructs
-   created during parsing.  In the case of error, we want to return
-   allocated objects to the memory pool.  In the case of no error, we want
-   to throw away the information about where the allocated objects live.
-   (dispose_command () will actually free the command.) */
-static void
-discard_parser_constructs (error_p)
-     int error_p;
-{
-}
-
-/************************************************
- *                                             *
- *             EOF HANDLING                    *
- *                                             *
- ************************************************/
-
-/* Do that silly `type "bye" to exit' stuff.  You know, "ignoreeof". */
-
-/* A flag denoting whether or not ignoreeof is set. */
-int ignoreeof = 0;
-
-/* The number of times that we have encountered an EOF character without
-   another character intervening.  When this gets above the limit, the
-   shell terminates. */
-int eof_encountered = 0;
-
-/* The limit for eof_encountered. */
-int eof_encountered_limit = 10;
-
-/* If we have EOF as the only input unit, this user wants to leave
-   the shell.  If the shell is not interactive, then just leave.
-   Otherwise, if ignoreeof is set, and we haven't done this the
-   required number of times in a row, print a message. */
-static void
-handle_eof_input_unit ()
-{
-  if (interactive)
-    {
-      /* shell.c may use this to decide whether or not to write out the
-        history, among other things.  We use it only for error reporting
-        in this file. */
-      if (EOF_Reached)
-       EOF_Reached = 0;
-
-      /* If the user wants to "ignore" eof, then let her do so, kind of. */
-      if (ignoreeof)
-       {
-         if (eof_encountered < eof_encountered_limit)
-           {
-             fprintf (stderr, _("Use \"%s\" to leave the shell.\n"),
-                      login_shell ? "logout" : "exit");
-             eof_encountered++;
-             /* Reset the parsing state. */
-             last_read_token = current_token = '\n';
-             /* Reset the prompt string to be $PS1. */
-             prompt_string_pointer = (char **)NULL;
-             prompt_again ();
-             return;
-           }
-       }
-
-      /* In this case EOF should exit the shell.  Do it now. */
-      reset_parser ();
-      exit_builtin ((WORD_LIST *)NULL);
-    }
-  else
-    {
-      /* We don't write history files, etc., for non-interactive shells. */
-      EOF_Reached = 1;
-    }
-}
-
-/************************************************
- *                                             *
- *     STRING PARSING FUNCTIONS                *
- *                                             *
- ************************************************/
-
-/* It's very important that these two functions treat the characters
-   between ( and ) identically. */
-
-static WORD_LIST parse_string_error;
-
-/* Take a string and run it through the shell parser, returning the
-   resultant word list.  Used by compound array assignment. */
-WORD_LIST *
-parse_string_to_word_list (s, flags, whom)
-     char *s;
-     int flags;
-     const char *whom;
-{
-  WORD_LIST *wl;
-  int tok, orig_current_token, orig_line_number, orig_input_terminator;
-  int orig_line_count;
-  int old_echo_input, old_expand_aliases;
-#if defined (HISTORY)
-  int old_remember_on_history, old_history_expansion_inhibited;
-#endif
-
-#if defined (HISTORY)
-  old_remember_on_history = remember_on_history;
-#  if defined (BANG_HISTORY)
-  old_history_expansion_inhibited = history_expansion_inhibited;
-#  endif
-  bash_history_disable ();
-#endif
-
-  orig_line_number = line_number;
-  orig_line_count = current_command_line_count;
-  orig_input_terminator = shell_input_line_terminator;
-  old_echo_input = echo_input_at_read;
-  old_expand_aliases = expand_aliases;
-
-  push_stream (1);
-  last_read_token = WORD;              /* WORD to allow reserved words here */
-  current_command_line_count = 0;
-  echo_input_at_read = expand_aliases = 0;
-
-  with_input_from_string (s, whom);
-  wl = (WORD_LIST *)NULL;
-
-  if (flags & 1)
-    parser_state |= PST_COMPASSIGN|PST_REPARSE;
-
-  while ((tok = read_token (READ)) != yacc_EOF)
-    {
-      if (tok == '\n' && *bash_input.location.string == '\0')
-       break;
-      if (tok == '\n')         /* Allow newlines in compound assignments */
-       continue;
-      if (tok != WORD && tok != ASSIGNMENT_WORD)
-       {
-         line_number = orig_line_number + line_number - 1;
-         orig_current_token = current_token;
-         current_token = tok;
-         yyerror (NULL);       /* does the right thing */
-         current_token = orig_current_token;
-         if (wl)
-           dispose_words (wl);
-         wl = &parse_string_error;
-         break;
-       }
-      wl = make_word_list (yylval.word, wl);
-    }
-  
-  last_read_token = '\n';
-  pop_stream ();
-
-#if defined (HISTORY)
-  remember_on_history = old_remember_on_history;
-#  if defined (BANG_HISTORY)
-  history_expansion_inhibited = old_history_expansion_inhibited;
-#  endif /* BANG_HISTORY */
-#endif /* HISTORY */
-
-  echo_input_at_read = old_echo_input;
-  expand_aliases = old_expand_aliases;
-
-  current_command_line_count = orig_line_count;
-  shell_input_line_terminator = orig_input_terminator;
-
-  if (flags & 1)
-    parser_state &= ~(PST_COMPASSIGN|PST_REPARSE);
-
-  if (wl == &parse_string_error)
-    {
-      last_command_exit_value = EXECUTION_FAILURE;
-      if (interactive_shell == 0 && posixly_correct)
-       jump_to_top_level (FORCE_EOF);
-      else
-       jump_to_top_level (DISCARD);
-    }
-
-  return (REVERSE_LIST (wl, WORD_LIST *));
-}
-
-static char *
-parse_compound_assignment (retlenp)
-     int *retlenp;
-{
-  WORD_LIST *wl, *rl;
-  int tok, orig_line_number, orig_token_size, orig_last_token, assignok;
-  char *saved_token, *ret;
-
-  saved_token = token;
-  orig_token_size = token_buffer_size;
-  orig_line_number = line_number;
-  orig_last_token = last_read_token;
-
-  last_read_token = WORD;      /* WORD to allow reserved words here */
-
-  token = (char *)NULL;
-  token_buffer_size = 0;
-
-  assignok = parser_state&PST_ASSIGNOK;                /* XXX */
-
-  wl = (WORD_LIST *)NULL;      /* ( */
-  parser_state |= PST_COMPASSIGN;
-
-  while ((tok = read_token (READ)) != ')')
-    {
-      if (tok == '\n')                 /* Allow newlines in compound assignments */
-       {
-         if (SHOULD_PROMPT ())
-           prompt_again ();
-         continue;
-       }
-      if (tok != WORD && tok != ASSIGNMENT_WORD)
-       {
-         current_token = tok;  /* for error reporting */
-         if (tok == yacc_EOF)  /* ( */
-           parser_error (orig_line_number, _("unexpected EOF while looking for matching `)'"));
-         else
-           yyerror(NULL);      /* does the right thing */
-         if (wl)
-           dispose_words (wl);
-         wl = &parse_string_error;
-         break;
-       }
-      wl = make_word_list (yylval.word, wl);
-    }
-
-  FREE (token);
-  token = saved_token;
-  token_buffer_size = orig_token_size;
-
-  parser_state &= ~PST_COMPASSIGN;
-
-  if (wl == &parse_string_error)
-    {
-      last_command_exit_value = EXECUTION_FAILURE;
-      last_read_token = '\n';  /* XXX */
-      if (interactive_shell == 0 && posixly_correct)
-       jump_to_top_level (FORCE_EOF);
-      else
-       jump_to_top_level (DISCARD);
-    }
-
-  last_read_token = orig_last_token;           /* XXX - was WORD? */
-
-  if (wl)
-    {
-      rl = REVERSE_LIST (wl, WORD_LIST *);
-      ret = string_list (rl);
-      dispose_words (rl);
-    }
-  else
-    ret = (char *)NULL;
-
-  if (retlenp)
-    *retlenp = (ret && *ret) ? strlen (ret) : 0;
-
-  if (assignok)
-    parser_state |= PST_ASSIGNOK;
-
-  return ret;
-}
-
-/************************************************
- *                                             *
- *   SAVING AND RESTORING PARTIAL PARSE STATE   *
- *                                             *
- ************************************************/
-
-sh_parser_state_t *
-save_parser_state (ps)
-     sh_parser_state_t *ps;
-{
-#if defined (ARRAY_VARS)
-  SHELL_VAR *v;
-#endif
-
-  if (ps == 0)
-    ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t));
-  if (ps == 0)
-    return ((sh_parser_state_t *)NULL);
-
-  ps->parser_state = parser_state;
-  ps->token_state = save_token_state ();
-
-  ps->input_line_terminator = shell_input_line_terminator;
-  ps->eof_encountered = eof_encountered;
-
-  ps->current_command_line_count = current_command_line_count;
-
-#if defined (HISTORY)
-  ps->remember_on_history = remember_on_history;
-#  if defined (BANG_HISTORY)
-  ps->history_expansion_inhibited = history_expansion_inhibited;
-#  endif
-#endif
-
-  ps->last_command_exit_value = last_command_exit_value;
-#if defined (ARRAY_VARS)
-  v = find_variable ("PIPESTATUS");
-  if (v && array_p (v) && array_cell (v))
-    ps->pipestatus = array_copy (array_cell (v));
-  else
-    ps->pipestatus = (ARRAY *)NULL;
-#endif
-    
-  ps->last_shell_builtin = last_shell_builtin;
-  ps->this_shell_builtin = this_shell_builtin;
-
-  ps->expand_aliases = expand_aliases;
-  ps->echo_input_at_read = echo_input_at_read;
-
-  return (ps);
-}
-
-void
-restore_parser_state (ps)
-     sh_parser_state_t *ps;
-{
-#if defined (ARRAY_VARS)
-  SHELL_VAR *v;
-#endif
-
-  if (ps == 0)
-    return;
-
-  parser_state = ps->parser_state;
-  if (ps->token_state)
-    {
-      restore_token_state (ps->token_state);
-      free (ps->token_state);
-    }
-
-  shell_input_line_terminator = ps->input_line_terminator;
-  eof_encountered = ps->eof_encountered;
-
-  current_command_line_count = ps->current_command_line_count;
-
-#if defined (HISTORY)
-  remember_on_history = ps->remember_on_history;
-#  if defined (BANG_HISTORY)
-  history_expansion_inhibited = ps->history_expansion_inhibited;
-#  endif
-#endif
-
-  last_command_exit_value = ps->last_command_exit_value;
-#if defined (ARRAY_VARS)
-  v = find_variable ("PIPESTATUS");
-  if (v && array_p (v) && array_cell (v))
-    {
-      array_dispose (array_cell (v));
-      var_setarray (v, ps->pipestatus);
-    }
-#endif
-
-  last_shell_builtin = ps->last_shell_builtin;
-  this_shell_builtin = ps->this_shell_builtin;
-
-  expand_aliases = ps->expand_aliases;
-  echo_input_at_read = ps->echo_input_at_read;
-}
-
-/************************************************
- *                                             *
- *     MULTIBYTE CHARACTER HANDLING            *
- *                                             *
- ************************************************/
-
-#if defined (HANDLE_MULTIBYTE)
-static void
-set_line_mbstate ()
-{
-  int i, previ, len, c;
-  mbstate_t mbs, prevs;
-  size_t mbclen;
-
-  if (shell_input_line == NULL)
-    return;
-  len = strlen (shell_input_line);     /* XXX - shell_input_line_len ? */
-  FREE (shell_input_line_property);
-  shell_input_line_property = (char *)xmalloc (len + 1);
-
-  memset (&prevs, '\0', sizeof (mbstate_t));
-  for (i = previ = 0; i < len; i++)
-    {
-      mbs = prevs;
-
-      c = shell_input_line[i];
-      if (c == EOF)
-       {
-         int j;
-         for (j = i; j < len; j++)
-           shell_input_line_property[j] = 1;
-         break;
-       }
-
-      mbclen = mbrlen (shell_input_line + previ, i - previ + 1, &mbs);
-      if (mbclen == 1 || mbclen == (size_t)-1)
-       {
-         mbclen = 1;
-         previ = i + 1;
-       }
-      else if (mbclen == (size_t)-2)
-        mbclen = 0;
-      else if (mbclen > 1)
-       {
-         mbclen = 0;
-         previ = i + 1;
-         prevs = mbs;
-       }
-      else
-       {
-         /* XXX - what to do if mbrlen returns 0? (null wide character) */
-         int j;
-         for (j = i; j < len; j++)
-           shell_input_line_property[j] = 1;
-         break;
-       }
-
-      shell_input_line_property[i] = mbclen;
-    }
-}
-#endif /* HANDLE_MULTIBYTE */
diff --git a/tests/run-histexpand.debug b/tests/run-histexpand.debug
deleted file mode 100644 (file)
index 16b325f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-echo "warning: all of these tests will fail if history has not been compiled" >&2
-echo "warning: into the shell" >&2
-${THIS_SH} +o histexpand ./histexp.tests > /tmp/xx 2>&1
-diff /tmp/xx histexp.right && rm -f /tmp/xx